Bài giảng Kỹ thuật vi xử lý - Hồ Viết Việt

ppt 403 trang ngocly 4020
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật vi xử lý - Hồ Viết Việt", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptbai_giang_ky_thuat_vi_xu_ly_ho_viet_viet.ppt

Nội dung text: Bài giảng Kỹ thuật vi xử lý - Hồ Viết Việt

  1. Bài giảng Kỹ thuật Vi xử lý Ngành Điện tử-Viễn thông Đại học Bách khoa Đà Nẵng của Hồ Viết Việt, Khoa CNTT-ĐTVT Tài liệu tham khảo [1] Kỹ thuật vi xử lý, Văn Thế Minh, NXB Giáo dục, 1997 [2] Kỹ thuật vi xử lý và Lập trình Assembly cho hệ vi xử lý, Đỗ Xuân Tiến, NXB Khoa học & kỹ thuật, 2001
  2. Chương 1 1.1 Các hệ thống số - Hệ thập phân - Hệ nhị phân - Hệ thập lục phân 1.2 Các hệ thống mã hoá - ASCII - BCD 1.3 Các linh kiện điện tử số cơ bản - Các cổng logic: AND, OR, XOR,NOT - Các bộ giải mã
  3. 1.1 Các hệ thống số ◼ Hệ đếm thập phân (Decimal) ◼ Còn gọi là hệ đếm cơ số mười (Vì có quá ít người có chín ngón tay hoặc mười một ngón chân?) ◼ Dùng mười ký hiệu: 1,2,3,4,5,6,7,8,9,0 ◼ Ví dụ:1.1: Ba nghìn Chín trăm Bảy mươi Tám 3978 = 3x103 + 9x102 + 7x101 + 8x100 = 3000 + 900 + 70 + 8
  4. 1.1 Các hệ thống số ◼ Hệ đếm nhị phân (Binary) ◼ Còn gọi là Hệ đếm cơ số hai ◼ Sử dụng hai ký hiệu (bit): 0 và 1 (Các hệ thống điện tử số chỉ sử dụng hai mức điện áp?) ◼ Kích cỡ, LSB, MSB của số nhị phân ◼ Số nhị phân không dấu (Unsigned) ◼ Số nhị phân có dấu (Số bù hai)
  5. Số nhị phân ◼ Mỗi ký hiệu 0 hoặc 1 được gọi là 1 Bit (Binary Digit- Chữ số nhị phân) ◼ Kích cỡ của một số nhị phân là số bit của nó ◼ MSB (Most Significant Bit): Bit sát trái ◼ LSB (Least Significant Bit): Bit sát phải ◼ Ví dụ 1.1: 1010101010101010 MSB LSB là một số nhị phân 16-bit
  6. Số nhị phân không dấu ◼ Chỉ biểu diễn được các giá trị không âm (>= 0) ◼ Với n-bit có thể biểu diễn các giá trị từ 0 đến 2n – 1 ◼ Ví dụ 1.3: Giá trị V của số nhị phân không dấu 1101 được tính: V(1101) = 1x23 + 1x22 + 0x21 + 1x20 = 8 + 4 + 0 + 1 = 13
  7. Số nhị phân không dấu ◼ Tổng quát: Nếu số nhị phân N n-bit: N = b( n-1) b( n-2) . b1 b0 thì giá trị V của nó là: (n-1) (n-2) V = b(n -1) x 2 +b (n-2) x2 + 1 0 + b1 x 2 + b0 x 2 Các số nhị phân không dấu 4-bit biểu diễn được các giá trị từ ? đến ?
  8. 16 giá trị từ 0 đến 15 Nhị phân không dấu Giá trị thập phân 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 10 1011 11 1100 12 1101 13 1110 14 1111 15
  9. Số nhị phân không dấu ◼ Dải giá tri của các số không dấu 8-bit là [0,255] (unsigned char trong C) ◼ Dải giá tri của các số không dấu 16- bit là [0,65535] (unsigned int trong C)
  10. Chuyển đổi thập phân sang nhị phân ◼ Ví dụ 1.4 Chuyển 25 sang nhị phân không dấu. Dùng phương pháp chia 2 liên tiếp Chia 2 Thương số Dư số ◼ 25/2 = 12 1 LSB ◼ 12/2 = 6 0 ◼ 6/2 = 3 0 ◼ 3/2 = 1 1 ◼ 1/2 = 0 1 MSB Kết quả là: 11001
  11. Số nhị phân có dấu ◼ Biểu diễn được cả các giá trị âm ◼ Còn gọi là Số bù hai ◼ Với n-bit có thể biểu diễn các giá trị từ – 2(n-1) đến 2(n-1) – 1 ◼ Ví dụ 1.3: Giá trị V của số nhị phân có dấu 1101 được tính: V(1101) = – 1x23 + 1x22 + 0x21 + 1x20 = – 8 + 4 + 0 + 1 = – 3
  12. Số nhị phân có dấu ◼ Tổng quát: Nếu số nhị phân N n-bit: N = b( n-1) b( n-2) . b1 b0 thì giá trị V của nó là: (n-1) (n-2) V = –b(n -1) x 2 +b (n-2) x2 + 1 0 + b1 x 2 + b0 x 2 Các số nhị phân có dấu 4-bit biểu diễn được các giá trị từ ? đến ?
  13. 16 giá trị từ - 8 đến 7 Nhị phân có dấu Giá trị thập phân 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 - 8 1001 -7 1010 -6 1011 -5 1100 -4 1101 -3 1110 -2 1111 -1
  14. Số nhị phân có dấu ◼ Dải giá tri của các số có dấu 8-bit là [-128,+127] (char trong C) ◼ Dải giá tri của các số có dấu 16-bit là [-32768,+32767] (int trong C)
  15. Tìm đối số (Lấy bù 2) ◼ Tổng của một số với đối số của nó bằng 0 ◼ Ví dụ 1.5 Đối số của số nhị phân có dấu 10011101? 10011101 Số có dấu (-99) ◼ 01100010 Lấy bù 1 ◼ + 1 Cộng 1 01100011 Kết quả (+99)
  16. Chuyển số thập phân sang nhị phân có dấu ◼ Vơí số dương:Giống như chuyển thập phân sang nhị phân không dấu rồi thêm bit 0 vào sát bên trái ◼ Ví dụ: Chuyển 25 sang nhị phân có dấu: Kết quả: 011011 ◼ Với số âm: Chuyển đối số sang nhị phân có dấu rồi lấy bù 2
  17. Chuyển số thập phân sang nhị phân có dấu Ví dụ 1.6 Chuyển – 26 sang nhị phân 1. chuyển đối số: +26 = 11010 2. Đưa 0 vào sát trái: 011010 3. Bù 1: 100101 4. Cộng 1: + 1 -26 = 100110
  18. Số thập lục phân ◼ Quen gọi là số Hexa (Hexadecimal) ◼ Còn gọi là hệ đếm cơ số mười sáu ◼ Sử dụng 16 ký hiệu để biểu diễn: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F ◼ Mỗi ký hiệu tương ứng với 4-bit ◼ Mục đích: Biểu diễn số nhị phân ở dạng ngắn gọn 11110000 = F0 10101010 = AA 01010101 = 55 Nhị phân Thập lục phân
  19. Mỗi ký hiệu tương ứng với 4-bit Hexa Binary Hexa Binary 0 0000 8 1000 1 0001 9 1001 2 0010 A 1010 3 0011 B 1011 4 0100 C 1100 5 0101 D 1101 6 0110 E 1110 7 0111 F 1111
  20. Chuyển đổi Hexa & nhị phân ◼ Ví dụ 1.7 Chuyển số hexa 2F8 và ABBA sang nhị phân Thay thế mỗi ký hiệu hexa bằng 4-bit tương ứng với nó 2 F 8 0010 1111 1000 A B B A 1010 1011 1011 1010 ◼ Kết quả 2F8h = 001011111000b ABBAh = 1010101110111010b
  21. Chuyển đổi Hexa & nhị phân ◼ Ví dụ 1.8 Chuyển số nhị phân 1100101011111110 sang hexa - Trước hết theo hướng từ LSB về MSB chia số nhị phân đó thành các nhóm 4-bit - Sau đó thay thế mỗi nhóm 4-bit bằng ký hiệu hexa tương ứng với nó 1100 1010 1111 1110 C A F E ◼ Kết quả: 1100101011111110b = CAFEh
  22. 1.2 Các hệ thống mã hoá ◼ ASCII: American Standard Code for Information Interchange. ◼ Dùng để biểu diễn các ký tự (characters): Gồm ký tự hiển thị được và ký tự điều khiển ◼ Mỗi ký tự được biểu diễn bằng 8-bit gọi là mã ASCII của ký tự đó • Các chữ cái in và thường: A Z và a z • Các chữ số thập phân: 0,1, ,9 • Các dấu chấm câu: ; , . : vân vân • Các ký tự đặc biệt: $ & @ / { vân vân • Các ký tự điều khiển: carriage return (CR) , line feed (LF), beep, vân vân
  23. Mã ASCII ◼ Với bảng mã được sắp xếp theo trật tự tăng dần của mã ASCII: • Các chữ số thập phân: 0,1, ,9 nằm liên tiếp nhau, chữ số 0 có mã ASCII là 30h • Các chữ cái in:A Z nằm liên tiếp nhau, chữ A có mã ASCII là 41h • Các chữ cái thường: a z nằm liên tiếp nhau, chữ a có mã ASCII là 61h • Mã ASCII của chữ in và chữ thường tương ứng chỉ khác nhau ở bit 5 A: 01000001 B: 01000010 Z: 01011010 a: 01100001 b: 01100010 z: 01111010 • 32 ký tự điều khiển được xếp đầu bảng mã (00h đến 1Fh)
  24. Bảng mã ASCII
  25. Bảng mã ASCII
  26. Mã BCD ◼ BCD (Binary Coded Decimal) ◼ Quen gọi là số BCD ◼ Dùng để mã hoá các số thập phân bằng các ký hiệu nhị phân ◼ Mỗi chữ số thập phân được biểu diễn bằng một tổ hợp 4-bit ◼ Các tổ hợp 4-bit không sử dụng gọi là các tổ hợp cấm ◼ Nhiều linh kiện điện tử sử dụng mã này (Bộ giải mã BCD-LED bảy đoạn 7447)
  27. Bảng mã BCD Thập phân BCD Thập phân BCD 0 0000 8 1000 1 0001 9 1001 2 0010 1010 3 0011 1011 4 0100 1100 5 0101 1101 6 0110 1110 7 0111 1111
  28. Mã BCD ◼ Đừng nhầm mã hoá BCD với việc chuyển đổi thập phân sang nhị phân: Ví dụ 1.9: Cho số thập phân 15 Mã BCD của nó là: 00010101 Số nhị phân không dấu 8-bit tương ứng là: 00001111
  29. Bit, Nibble, Byte, Word ◼ Bit: Một chữ số nhị phân 0 hoặc 1 ◼ Nibble: 4-bit (nửa byte) ◼ Byte: 8-bit (Còn gọi là Octet) ◼ Word (Từ): 16-bit ◼ Double Word (Từ kép): 32-bit 10 ◼ K = 2 = 1024 Kb (kilôbit) = 1024 bit = 128 byte KB (kilôbyte) = 1024 byte Kbps (Kilobit per second): Kilôbit trên giây 20 ◼ M = 2 = 1024 K = 1048576 Mb (Mêgabit) = 1024 Kb = 1048576 bit MB (Mêgabyte) = 1024 KB = 1048576 byte 30 ◼ G = 2 = 1024 M = 1048576 K Gb (Gigabit) = 1024 Mb = 1048576 Kb GB (Gigabyte) = 1024 MB = 1048576 KB ◼ T = ?
  30. 1.3 Các linh kiện điện tử số cơ bản ◼ Phân chia linh liện số theo mật độ tích hợp: SSI, MSI, LSI, VLSI SSI (Small Scale Integration): Vi mạch tích hợp cỡ nhỏ MSI (Medium Scale Integration): Vi mạch tích hợp cỡ trung LSI (Large Scale Integration): Vi mạch tích hợp cỡ lớn VLSI (Very Large Scale Integration):Vi mạch tích hợp cỡ cực lớn ◼ SSI: Các cổng logic and, or, xor, not ◼ MSI: Các bộ giải mã, Các chốt, đệm ◼ LSI,VLSI: Các bộ vi xử lý, vi điều khiển, DSPs
  31. Cổng logic AND A A B A AND B A AND B 1 1 1 B 1 0 0 Cổng AND có thể có nhiều hơn 2 đầu vào Trên một chip có thể có nhiều cổng 0 1 0 AND 0 0 0
  32. Cổng logic AND: IC 7408
  33. Cổng logic AND: IC 7411
  34. Cổng logic OR A A B A OR B A OR B B 1 1 1 Cổng OR có thể có nhiều hơn 2 đầu vào 1 0 1 Trên một chip có thể có nhiều cổng OR 0 1 1 0 0 0
  35. Cổng logic OR: IC 7432
  36. Cổng logic XOR A A B A XOR B A XOR B B 1 1 0 Cổng XOR có thể có nhiều hơn 2 đầu vào 1 0 1 Trên một chip có thể có nhiều cổng XOR 0 1 1 0 0 0
  37. Cổng logic NOT A NOT A 1 0 A NOT A 1 0 0 1 0 1
  38. Đệm 3 trạng thái c z c z 0 HiZ 1 HiZ 1 x 0 x
  39. Chip giải mã 74138
  40. Chip giải mã 74138
  41. Flip Flop kiểu D
  42. Flip Flop kiểu D
  43. Flip Flop kiểu D
  44. Flip Flop kiểu D
  45. Chốt 8-bit 74373
  46. Chốt 8-bit 74573
  47. IC 74244
  48. IC 74244
  49. Đệm 2 chiều 74245
  50. Đệm 2 chiều 74245
  51. What is a microprocessor? ◼ Intel’s first microprocessor, the 4004, was introduced in 1971. It contained 2300 transistors. Today’s Pentium 4 processor, by contrast, contains 55 million transistors. ◼ One of the most common tasks microprocessors perform is to serve as the “brains” inside personal computers, but they deliver “intelligence” to countless other devices as well. ◼ For example, they may give your telephone speed-dial and re-dial options, automatically turn down your home’s thermostat at night and make your car safer and more energy efficient.
  52. 1971 ◼ In 1971, Intel’s first microprocessor was the 4004. This breakthrough invention powered the Busicom calculator and paved the way for embedding intelligence in inanimate objects as well as the personal computer.
  53. 1978 ◼ In 1978, a pivotal sale to IBM's new personal computer division made the Intel 8088 the brains of IBM's new hit product the IBM PC. ◼ The 8088's success launched Intel into the ranks of the Fortune 500 companies, and Fortune magazine named the company one of the "Business Triumphs of the Seventies."
  54. 1982 ◼ Then, in 1982, the 286, also known as the 80286, became the first Intel processor that could run all the software written for its predecessor. ◼ This software compatibility remains a cornerstone of Intel's family of microprocessors. Within 6 years of its release, there were an estimated 15 million 286-based PC’s around the world.
  55. 1989 ◼ In 1989, the move to a 486 processor allowed the shift from a command-level computer to point- and-click computing. ◼ The Intel 486 processor was the first to offer a built-in math coprocessor, which speeds up computing because it offloads complex math functions from the central processor.
  56. 1993 ◼ In 1993, the jump to the Pentium processor allowed computers to more easily incorporate "real world" data such as speech, sound, handwriting and photographic images.
  57. 1997 ◼ In 1997, the 7.5 million-transistor Pentium II processor incorporated Intel MMX technology, which is designed specifically to process video, audio and graphics data efficiently. ◼ With this processor, PC users could • capture, edit and share digital photos with friends and family via the Internet, • edit and add text, music or between-scene transitions to home movies, and, • with a video phone, send video over standard phone lines and the Internet.
  58. 1998 ◼ In 1998, the Pentium II XeonTM processor was designed to meet the performance requirements of mid-range and higher servers and workstations. ◼ The Pentium II Xeon processors featured technical innovations specifically designed for workstations and servers that utilized demanding business applications such as Internet services, corporate data warehousing, digital content creation, and electronic and mechanical design automations.
  59. 1999 ◼ In 1999, the Intel Celeron processor was designed for the value PC market segment. It provided consumers great performance at an exceptional value, and it delivered excellent performance for uses such as gaming and educational software.
  60. 1999 ◼ Also in 1999, the Pentium III processor was released and featured 70 new instructions that dramatically enhanced the performance of advanced imaging, 3-D, streaming audio, and video and speech recognition applications. ◼ It was designed to significantly enhance Internet experiences, allowing users to do such things as browse through realistic online museums and stores and download high-quality video.
  61. 2000 ◼ In 2000, users of the newly released Pentium 4 processor could create professional-quality movies, deliver TV-like video via the Internet, communicate with real-time video and voice, render 3D graphics in real time, quickly encode music for MP3 players, and simultaneously run several multimedia applications while still connected to the Internet. ◼ As a comparison, Intel's first microprocessor, the 4004, ran at 108 kilohertz, compared to the Pentium 4 processor's initial speed of 1.5 gigahertz. If automobile speed had increased similarly over the same period, you could now drive from San Francisco to New York in about 13 seconds.
  62. History of Intel Microprocessor The Continuing Evolution of Intel Microprocessors CIS105 December 2002 1600 1,400 1400 1200 1000 800 Speed(MHZ) 600 550 400 400 400 333 233 200 200 200 100 33 0.74 2 8 12 0 1971 1974 1979 1982 1985 1989 1993 1995 1997 1998 1998 1999 1999 2000 Year
  63. ◼ Bách Khoa Online: hutonline.net ◼ Tìm kiếm & download ebook: bookilook.com
  64. Bài giảng Kỹ thuật Vi xử lý Ngành Điện tử-Viễn thông Đại học Bách khoa Đà Nẵng của Hồ Viết Việt, Khoa CNTT-ĐTVT Tài liệu tham khảo [1] Kỹ thuật vi xử lý, Văn Thế Minh, NXB Giáo dục, 1997 [2] Kỹ thuật vi xử lý và Lập trình Assembly cho hệ vi xử lý, Đỗ Xuân Tiến, NXB Khoa học & kỹ thuật, 2001
  65. Chương 2 Vi xử lý và Hệ thống vi xử lý 2.1 Bộ vi xử lý - Bộ vi xử lý (Microprocessor) là gì? - Các thành phần của bộ vi xử lý - Ứng dụng của bộ vi xử lý 2.2 Các họ vi xử lý - Họ x86 của Intel- Luật Moore - Họ 68x của Motorola 2.3 Hệ thống vi xử lý - Bộ nhớ - Các cổng I/O - Bus hệ thống: D-Bus, A-Bus, C-Bus - Thiết kế hệ thống vi xử lý?
  66. 2.1 Bộ vi xử lý ◼ Một bộ vi xử lý là một mạch tích hợp chứa hàng ngàn, thậm chí hàng triệu transistor (LSI, VLSI) được kết nối với nhau ◼ Các transistor ấy cùng nhau làm việc để lưu trữ và xử lý dữ liệu cho phép bộ vi xử lý có thể thực hiện rất nhiều chức năng hữu ích ◼ Chức năng cụ thể của một bộ vi xử lý được xác định bằng phần mềm (có thể lập trình được)
  67. Bộ vi xử lý ◼ Bộ vi xử lý đầu tiên của Intel,4004, được giới thiệu vào năm 1971. ◼ 4004 chứa 2300 transistor. ◼ Bộ vi xử lý Pentium 4 hiện nay chứa 55 triệu transistor. ◼ Bộ vi xử lý thường được sử dụng trong các máy vi tính (microcomputer) với vai trò là CPU. Ngoài ra, chúng còn có mặt ở nhiều thiết bị khác.
  68. Các thành phần của bộ vi xử lý
  69. ALU và Control Unit ALU ◼ Thực hiện các phép toán logic (AND, OR, XOR, NOT) và các phép toán số học (cộng, trừ, nhân, chia) ◼ Thực hiện việc chuyển dữ liệu ◼ Việc thực hiện lệnh thực sự diễn ra ở ALU Control Unit ◼ Có trách nhiệm liên quan đến việc tìm và thực hiện các lệnh bằng cách cung cấp các tín hiệu điều khiển và định thời cho ALU và các mạch khác biết phải làm gì và làm khi nào.
  70. Các thanh ghi (Registers) ◼ Thanh ghi là nơi mà bộ vi xử lý có thể lưu trữ được một số nhị phân (Kích cỡ của thanh ghi tính bằng bit) ◼ Bộ vi xử lý dùng các thanh ghi để lưu trữ dữ liệu tạm thời trong quá trình thực hiện chương trình ◼ Các thanh ghi có thể được truy cập bằng các câu lệnh ngôn ngữ máy thường được gọi là các thanh ghi người sử dụng có thể nhìn thấy được (có thể truy cập được) ◼ Các thanh ghi điều khiển và các thanh ghi trạng thái được CU dùng để điều khiển việc thực hiện chương trình. Đa số các thanh ghi này người sử dụng không thể nhìn thấy được
  71. 2.2 Các họ vi xử lý ◼ Hiện nay, có rất nhiều nhà sản xuất ra các chip vi xử lý:Intel, AMD, Motorola, Cyrix ◼ Thông thường, một họ vi xử lý là các chip vi xử lý được sản xuất bởi một nhà sản xuất nào đó. ◼ Trong phạm vi một họ vi xử lý, theo thời gian và theo công nghệ chế tạo có các đời (thế hệ) vi xử lý khác nhau phân biệt theo Độ dài Từ của chúng (bit) và tốc độ (Hz). ◼ Độ dài Từ (Word Length) của một chip vi xử lý là kích cỡ tối đa của các toán hạng nhị phân mà nó có thể thực hiện các phép toán trên đó.
  72. Tốc độ của họ vi xử lý x86 của Intel The Continuing Evolution of Intel Microprocessors CIS105 December 2002 1600 1,400 1400 1200 1000 800 Speed(MHZ) 600 550 400 400 400 333 233 200 200 200 100 33 0.74 2 8 12 0 1971 1974 1979 1982 1985 1989 1993 1995 1997 1998 1998 1999 1999 2000 Year
  73. Họ vi xử lý x86 của Intel Model Năm sản xuất Số lượng Transistor 4004 1971 2,300 8008 1972 2,500 8080 1974 5,000 8086 1978 29,000 80286 1982 120,000 80386™ processor 1985 275,000 80486™ DX processor 1989 1,180,000 Pentium® processor 1993 3,100,000 Pentium II processor 1997 7,500,000 Pentium III processor 1999 24,000,000 Pentium 4 processor 2000 55,000,000
  74. Họ vi xử lý x86 của Intel 70’s 4004 8008 8080 8086 Introduced 11/15/71 4/1/72 4/1/74 6/8/78 Clock Speeds 108KHz 200KHz 2MHz 5MHz, 8MHz, 10MHz Bus Width 4 bits 8 bits 8 bits 16 bits Number of 2,300 3,500 6,000 29,000 Transistors (10 microns) (10 microns) (6 microns) (3 microns) Addressable Memory 640 bytes 16 KBytes 64 KBytes 1 MB Virtual Memory Brief Description First microcomputer Data/character 10X the performance 10X the performance chip, Arithmetic manipulation of the 8008 of the 8080 manipulation
  75. Họ vi xử lý x86 của Intel 80’s Intel486TM Intel386TM DX Intel386TM SX DX CPU 80286 Microprocessor Microprocessor Microprocessor Introduced 2/1/82 10/17/85 6/16/88 4/10/89 Clock Speeds 6MHz, 8MHz, 10MHz, 16MHz, 20MHz, 16MHz, 20MHz, 25MHz, 33MHz, 12.5MHz 25MHz, 33MHz 25MHz, 33MHz 50MHz Bus Width 16 bits 32 bits 16 bits 32 bits Number of 134,000 275,000 275,000 1.2 million Transistors (1.5 microns) (1 micron) (1 micron) (1 micron) (.8 micron with 50MHz) Addressable Memory 16 megabytes 4 gigabytes 16 megabytes 4 gigabytes Virtual Memory 1 gigabyte 64 terabytes 64 terabytes 64 terabytes Brief Description 3-6X the performance First X86 chip to 16-bit address bus Level 1 cache on chip of the 8086 handle 32-bit data sets enabled low-cost 32-bit processing
  76. Họ vi xử lý x86 của Intel 90’s Intel486TM SX Pentium® Pentium® Pro Pentium® II Microprocessor Processor Processor Processor Introduced 4/22/91 3/22/93 11/01/95 5/07/97 Clock Speeds 16MHz, 20MHz, 60MHz,66MHz 150MHz, 166MHz, 200MHz, 233MHz, 25MHz, 33MHz 180MHz, 200MHz 266MHz, 300MHz Bus Width 32 bits 64 bits 64 bits 64 bits Number of 1.185 million 3.1 million 5.5 million 7.5 million Transistors (1 micron) (.8 micron) (0.35 micron) (0.35 micron) Addressable Memory 4 gigabytes 4 gigabytes 64 gigabytes 64 gigabytes Virtual Memory 64 terabytes 64 terabytes 64 terabytes 64 terabytes Brief Description Identical in design to Superscalar Dynamic execution Dual independent bus, Intel486TM DX but architecture brought architecture drives dynamic execution, without math 5X the performance of high-performing Intel MMXTM coprocessor the 33-MHz Intel486TM processor technology DX processor
  77. 2.3 Hệ thống vi xử lý
  78. Luật Moore Dr. Gordon E. Moore, Chairman Emeritus of Intel Corporation, dự đoán rằng Cứ một năm rưỡi thì số lượng transistor được tích hợp trên chip vi xử lý tăng gấp đôi
  79. 2.3 Hệ thống vi xử lý Address Bus MEMORY I/O Ports Microprocessor Data Bus Control Lines (Control Bus) Sơ đồ khối chức năng của một hệ thống vi xử lý
  80. Hệ thống vi xử lý ◼ Gồm 3 khối chức năng: Vi xử lý, Bộ nhớ, Các cổng I/O ◼ Bộ nhớ được thực hiện bằng các chip nhớ bán dẫn ROM hoặc RWM, là nơi lưu trữ chương trình và dữ liệu. Đối với vi xử lý, bộ nhớ là một tập hợp các ô nhớ phân biệt theo địa chỉ của chúng. ◼ Các cổng I/O được thực hiện bằng các chip MSI hoặc LSI, là phần mạch giao tiếp giữa vi xử lý với các thiết bị I/O. Bộ vi xử lý cũng phân biệt các cổng I/O theo địa chỉ của chúng.
  81. Hệ thống vi xử lý ◼ 3 khối chức năng: Vi xử lý, Bộ nhớ, Các cổng I/O của một hệ thống vi xử lý trao đổi tín hiệu với nhau thông qua Bus hệ thống. ◼ Bus hệ thống là một tập hợp các đường truyền dẫn dùng chung, bao gồm: Bus địa chỉ (A-Bus), Bus dữ liệu (D-Bus) và Bus điều khiển (C-Bus) ◼ Các tín hiệu địa chỉ di chuyển trên A-Bus theo hướng từ vi xử lý đến Bộ nhớ và các cổng I/O. Số lượng đường truyền dẫn của A-Bus (gọi là Độ rộng của A-Bus) tính bằng bit, phản ánh khả năng quản lý bộ nhớ của chip vi xử lý.
  82. Hệ thống vi xử lý ◼ Các tín hiệu dữ liệu di chuyển trên D-Bus theo cả 2 hướng từ vi xử lý đến Bộ nhớ và các cổng I/O và ngược lại (mỗi lúc một hướng). Số lượng đường truyền dẫn của D- Bus (gọi là Độ rộng của D-Bus) tính bằng bit, phản ánh một phần tốc độ trao đổi dữ liệu của chip vi xử lý vớI các khối chức năng khác. ◼ Đa số các tín hiệu trên C-Bus là các tín hiệu điều khiển riêng lẽ, có tín hiệu xuất phát từ vi xử lý, có tín hiệu đi vào vi xử lý. Vi xử lý sử dụng các tín hiệu này để điều khiển hoạt động và nhận biết trạng thái của các khối chức năng khác.
  83. Thiết kế phần cứng của hệ thống vi xử lý ◼ Thiết kế bộ nhớ cho hệ thống vi xử lý: Ghép nối các chip nhớ bán dẫn sẵn có với bus hệ thống sao cho khi bộ vi xử lý truy cập bộ nhớ thì không xảy ra xung đột giữa các chip nhớ với nhau và không xung đột với các chip dùng làm cổng I/O ◼ Tương tự, Thiết kế các cổng I/O cho hệ thống vi xử lý: Ghép nối các chip MSI hoặc LSI thường dùng làm cổng I/O với bus hệ thống sao cho khi bộ vi xử lý truy cập các thiết bị I/O thì không xảy ra xung đột giữa các chip đó với nhau và không xung đột với các chip dùng làm bộ nhớ
  84. Thiết kế phần mềm của hệ thống vi xử lý ◼ Viết chương trình điều khiển hoạt động của hệ thống phần cứng theo chức năng mong muốn (thường dùng ngôn ngữ Assembly của chip vi xử lý dùng trong hệ thống) ◼ Dịch chương trình đã viết sang ngôn ngữ máy sử dụng các chương trình dịch thích hợp ◼ Nạp chương trình ngôn ngữ máy vào bộ nhớ của hệ thống vi xử lý ◼ Kiểm tra hoạt động của hệ thống và thực hiện các hiệu chỉnh nếu cần thiết ◼ Có thể nhờ sự trợ giúp của các chương trình mô phỏng trên máy tính
  85. • Bách Khoa Online: hutonline.net • Tìm kiếm & download ebook: bookilook.com
  86. Bay giảng Kỹ thuật Vi xử lý Ngành Điện tử-Viễn thông Đại học Bách khoa Đà Nẵng của Hồ Viết Việt, Khoa CNTT-ĐTVT Tài liệu tham khảo [1] Kỹ thuật vi xử lý, Văn Thế Minh, NXB Giáo dục, 1997 [2] Kỹ thuật vi xử lý và Lập trình Assembly cho hệ vi xử lý, Đỗ Xuân Tiến, NXB Khoa học & kỹ thuật, 2001
  87. Chương 3 Vi xử lý 8088-Intel 3.1 Kiến trúc và hoạt động của 8088 - Nguyên lý hoạt động - Sơ đồ khối chức năng 3.2 Cấu trúc thanh ghi của 8088 3.3 Phương pháp quản lý bộ nhớ 3.4 Mô tả tập lệnh Assembly
  88. Nguyên lý hoạt động của một bộ vi xử lý Lấy - Giải mã - Thực hiện lệnh Tìm và copy các byte lệnh từ bộ nhớ Tạo ra các tín hiệu điều khiển Giải mã lệnh để thực hiện lệnh
  89. Chu kỳ lệnh và Chu kỳ máy • Chu kỳ lệnh: Tổng thời gian tìm lệnh, giải mã lệnh và thực hiện 1 lệnh • Nói chung, Chu kỳ lệnh của các lệnh khác nhau là khác nhau • Chu kỳ lệnh bao giờ cũng bằng một số nguyên lần chu kỳ máy • Chu kỳ máy bằng nghịch đảo của tần số hoạt động (tốc độ đồng hồ) của bộ vi xử lý
  90. 3.1 Kiến trúc và Hoạt động của 8088
  91. Đơn vị giao tiếp Bus - BIU • Phát các tín hiệu địa chỉ đến bộ nhớ và các cổng I/O thông qua A-Bus • Đọc mã lệnh từ bộ nhớ thông qua D-Bus • Đọc dữ liệu từ bộ nhớ thông qua D-Bus • Ghi dữ liệu vào bộ nhớ thông qua D-Bus • Đọc dữ liệu từ các cổng I thông qua D-Bus • Ghi dữ liệu ra các cổng O thông qua D-Bus
  92. Đơn vị thực hiện - EU • Bao gồm CU và ALU • CU : Giải mã lệnh để tạo ra các tín hiệu điều khiển nhằm thực hiện lệnh đã được giải mã • ALU: thực hiện các thao tác khác nhau đối với các toán hạng của lệnh
  93. Tổ chức của microprocessor CPU Control registers ALU Control General BIU Address purpose Control Data registers Status Registers
  94. Xử lý lệnh của các vi xử lý trước 8086/8088 • Một thủ tục đơn giản gồm 3 bước: – Lấy lệnh từ bộ nhớ – Giải mã lệnh – Thực hiện lệnh • Lấy các toán hạng từ bộ nhớ (nếu có) • Lưu trữ kết quả Fetch Decode Execute Fetch Decode Execute Microprocessor 1 1 1 2 2 2 Bus Busy Idle Busy Busy Idle Busy
  95. Cơ chế Pipelining Pipelining Fetch Fetch Fetch Fetch Store Fetch Fetch Load Fetch Bus 1 2 3 4 1 5 6 2 7 Decode Decode Decode Decode Idle Decode Decode Idle Decode Instruction 1 2 3 4 5 6 7 Unit Exec. Exec. Exec. Exec. IdleIdle Exec. Exec. Idle Exec. Execution 1 2 3 4 5 6 7 Unit Memory request Memory request
  96. 3.2 Cấu trúc thanh ghi của 8088 8088 có 14 thanh ghi 16-bit
  97. Cấu trúc thanh ghi của họ x86 General Purpose Special Registers AH AL Accumulator Index Registers AX Instr Pointer IP EAX EIP Stack Pointer SP BH BL Base Flags FLAG ESP BX EFLAG Base Pointer EBX BP EBP CH CL Count Dest Index CX Segment Registers DI ECX EDI CS Code Segment Source Index DH DL SI Data DS DX Data Segment ESI EDX ES Extra Segment SS Stack Segment FS GS
  98. Cấu trúc thanh ghi 8086/8088 7 0 7 0 Accumulator AH AL AX Base BH BL BX Counter CH CL CX Data DH DL DX 15 0 Code Segment CS Data Segment DS Stack Segment SS Extra Segment ES 15 0 Instruction Pointer IP } Stack Pointer SP Base Pointer BP } Source Index SI Destination Index DI }
  99. Các thanh ghi đa năng 7 0 7 0 Accumulator AH AL AX Base BH BL BX Counter CH CL CX Data DH DL DX - Có thể truy cập như các thanh ghi 8-bit - Lưu trữ tạm thời dữ liệu để truy cập nhanh hơn và tránh khỏi phải truy cập bộ nhớ - Có công dụng đặc biệt đối với một số câu lệnh
  100. Các thanh ghi segment 15 0 Code Segment CS Data Segment DS Stack Segment SS Extra Segment ES - Lưu trữ địa chỉ segment của một ô nhớ cần truy cập - Kết hợp với các thanh ghi offset nhất định
  101. Các thanh ghi offset Instruction Pointer IP Stack Pointer SP Base Pointer BP Source Index SI Destination Index DI - Lưu trữ địa chỉ offset của một ô nhớ cần truy cập - Kết hợp với các thanh ghi segment nhất định
  102. Thanh ghi cờ 15 0 x x x x OF DF IF TF SF ZF x AF x PF x CF - Không phải tất cả các bit đều được sử dụng - Mỗi bit được sử dụng được gọi là một cờ - Các cờ đều có tên và có thể được Lập/Xoá riêng lẽ - Bao gồm các cờ trạng thái và các cờ điều khiển
  103. Flags register AC (Alignment check) (VM) Virtual mode (RF) Resume (NT) Nested task (IOPL) Input/output privilege level (O) Overflow (D) Direction (I) Interrupt (T) Trace (S) Sign (Z) Zero (A) Auxiliary Carry (P) Parity (C) Carry 8086, 8088, 80186 80386, 80486DX 80286 80486SX
  104. 3.3 Phương pháp quản lý bộ nhớ - Bộ nhớ được xem là một tập hợp các ô nhớ - Mỗi ô nhớ được nhận dạng bằng một Địa chỉ vật lý duy nhất 20-bit - Trong hoạt động truy cập một ô nhớ, Địa chỉ vật lý của nó được tạo ra từ hai giá trị 16-bit: Địa chỉ segment và Địa chỉ Offset - Địa chỉ logic = Địa chỉ segment:Địa chỉ offset
  105. Mối liên hệ giữa ĐCVL và ĐCLG A=Bus 19 0 Địa chỉ vật lý 15 0 15 0 Thanh ghi offset. Thanh ghi Segment 0000
  106. 3.4 Mô tả tập lệnh Assembly của 8086/8088 - Khuôn dạng: Mnemonics Các toán hạng - Nhóm lệnh chuyển số liệu - Nhóm lệnh số học - Nhóm lệnh logic - Nhóm lệnh Rẽ nhánh - Nhóm lệnh thao tác string - Nhóm lệnh hỗn hợp
  107. Nhóm lệnh chuyển số liệu Data Transfer Instructions -Chuyển số liệu (sao chép số liệu) từ vị trí này sang vị trí khác - Nguồn số liệu không thay đổi - Đich sẽ có giá trị như giá trị của Nguồn - Các lệnh chuyển số liệu không ảnh hưởng đến các cờ trạng thái trên thanh ghi cờ - Một số lệnh tiêu biểu: MOV, XCHG
  108. Data Transfer Instructions - MOV Khuôn dạng: MOV Đích,Nguồn - Tác dụng: (Đích)  (Nguồn) - Đích: có thể là: 1. Một thanh ghi 8 hoặc 16 bit của VXL 2. Một vị trí nhớ (1 hoặc 2 ô nhớ liên tiếp nhau) - Nguồn: có thể là: 1. Một thanh ghi 8 hoặc 16 bit của VXL 2. Một vị trí nhớ (1 hoặc 2 ô nhớ liên tiếp nhau) 3. Một giá trị cụ thể
  109. Một số lưu ý đối với MOV - Đích và Nguồn phải có cùng kích cỡ - Đích và Nguồn không thể đồng thời thuộc bộ nhớ - Nếu Đích là một thanh ghi segment của VXL thì Nguồn không thể là một giá trị cụ thể (nói cách khác, không thể nạp giá trị trực tiếp cho một thanh ghi segment bằng lệnh MOV)
  110. Data Transfer Instructions - XCHG Khuôn dạng: XCHG T/h1,T/h2 - Tác dụng: (T/h1)  (T/h2) - T/h1: có thể là: 1. Một thanh ghi 8 hoặc 16 bit của VXL 2. Một vị trí nhớ (1 hoặc 2 ô nhớ liên tiếp nhau) - T/h2: có thể là: 1. Một thanh ghi 8 hoặc 16 bit của VXL 2. Một vị trí nhớ (1 hoặc 2 ô nhớ liên tiếp nhau)
  111. Một số lưu ý đối với XCHG - T/h1 và T/h2 phải có cùng kích cỡ - T/h1 và T/h2 không thể đồng thời thuộc bộ nhớ - T/h1 và T/h2 không thể là các thanh ghi segment
  112. Các mode địa chỉ - Khi thực hiện lệnh, VXL sẽ thực hiện những thao tác nhất định trên số liệu, các số liệu này được gọi chung là các toán hạng. - Các toán hạng trong một câu lệnh có thể là một phần của câu lệnh (ở dạng mã máy), có thể nằm ở một thanh ghi của VXL hoặc ở Bộ nhớ -Cách xác định toán hạng trong các câu lệnh được gọi là các mode (định) địa chỉ
  113. Các mode địa chỉ - Mode địa chỉ thanh ghi: MOV AX,BX - Mode địa chỉ tức thì: MOV AL,55h - Các mode địa chỉ bộ nhớ: Các cách thức xác định địa chỉ vât lý của toán hạng nằm trong bộ nhớ: Mode địa chỉ trực tiếp Các mode địa chỉ gián tiếp
  114. Mode địa chỉ trực tiếp (Direct Addressing Mode)
  115. Mode địa chỉ gián tiếp thanh ghi (Register Indirect Addressing Mode)
  116. Mode địa chỉ cơ sở-chỉ số (Based-Indexed Addressing Mode)
  117. Nhớ các mode địa chỉ bộ nhớ như thế nào? • Tất cả bắt đầu trong bảng sau đây: BX SI BP DI DISP • Lấy ra 0 hoặc 1 phần tử từ mỗi cột • (Không lấy 2 phần tử từ một cột) • Phải lấy ít nhất 1 phần tử từ bảng
  118. Các ví dụ Addressing Instruction Comment Memory Contents Mode MOV AX, BX Move to AX the 16-bit value in BX Register 89 D8 OP MODE MOV AX, DI Move to AX the 16-bit value in DI Register 89 F8 OP MODE MOV AH, AL Move to AL the 8-bit value in AX Register 88 C4 OP MODE MOV AH, 12h Move to AH the 8-bit value 12H Immediate B4 12 OP DATA8 MOV AX, 1234h Move to AX the value 1234h Immediate B8 34 OP DATA16 Move to AX the constant defined as MOV AX, CONST Immediate B8 lsb msb CONST OP DATA16 Move to AX the address or offset of MOV AX, X Immediate B8 lsb msb the variable X OP DATA16 Move to AX the value at memory MOV AX, [1234h] Direct A1 34 12 location 1234h OP DISP16 Move to AX the value in memory MOV AX, [X] Direct A1 lsb msb location DS:X OP DISP16
  119. Các ví dụ Addressing Instruction Comment Memory Contents Mode Move to the memory location MOV [X], AX Direct A3 lsb msb pointed to by DS:X the value in AX OP DATA16 Move to AX the 16-bit value pointed MOV AX, [DI] Indexed 8B 05 to by DS:DI OP MODE Move to address DS:DI the 16-bit MOV [DI], AX Indexed 89 05 value in AX OP MODE Move to AX the 16-bit value pointed Register MOV AX, [BX] 8B 07 to by DS:BX Indirect OP MODE Move to the memory address DS:BX Register MOV [BX], AX 89 07 the 16-bit value stored in AX Indirect OP MODE Move to memory address SS:BP Register MOV [BP], AX 89 46 the 16-bit value in AX Indirect OP MODE Move to AX the value in memory at Register MOV AX, TAB[BX] 8B 87 lsb msb DS:BX + TAB Relative OP MODE DISP16 Move value in AX to memory Register MOV TAB[BX], AX 89 87 lsb msb address DS:BX + TAB Relative OP MODE DISP16 Move to AX the value in memory at Base Plus MOV AX, [BX + DI] 8B 01 DS:BX + DI Index OP MODE
  120. Các ví dụ Addressing Instruction Comment Memory Contents Mode Move to the memory location Base Plus MOV [BX + DI], AX 89 01 pointed to by DS:X the value in AX Index OP MODE Move word in memory location Base Rel MOV AX, [BX + DI + 1234h] 8B 81 34 12 DS:BX + DI + 1234h to AX register Plus Index OP MODE DISP16 MOV word [BX + DI + Move immediate value 5678h to Base Rel C7 81 34 12 78 56 1234h], 5678h memory location BX + DI + 1234h Plus Index
  121. Mã máy Một lệnh có thể dài từ1 đến 6 byte • Byte 1 gồm: – Opcode (6 bit) xác định phép toán cần thực hiện – Bit D xác định toán hạng ở REG của Byte 2 là nguồn hay đích: 1: Đích 0: Nguồn – Bit W xác định kích cỡ của toán hạng là 8 bit hay 16 bit 0: 8 bit 1: 16 bit • Byte 2 gồm:Mode field (MOD), Register field (REG) Register/memory field (R/M field)
  122. Anatomy of an instruction Opcode Mode Displacement Data/Immediate • Opcode contains the type of instruction we execute plus two special bits, D and W D W • The mode byte is used only in instructions that use register addressing modes and encodes the source and destination for instructions with two OPCODE operands • D stands for direction and defines the data flow of the instruction MOD REG R/M – D=0, data flows from REG to R/M – D=1, data flows from R/M to REG • W stands for the size of data – W=0, byte-sized data – W=1, word (in real mode) or double-word sized (in protected mode)
  123. Anatomy of an instruction Opcode Mode Displacement Data/Immediate • MOD field specifies the addressing mode D W • 00 – no displacement • 01 – 8-bit displacement, sign extended OPCODE • 10 – 16-bit displacement • 11 – R/M is a register, register addressing mode • If MOD is 00,01, or 10, the R/M field selects one of the memory addressing modes MOD REG R/M
  124. Registers in the REG and R/M fields Code W=0 (Byte) W=1 (Word) W=1 (DWord) 000 AL AX EAX 001 CL CX ECX 010 DL DX EDX 011 BL BX EBX 100 AH SP ESP 101 CH BP EBP 110 DH SI ESI 111 BH DI EDI
  125. Example • Consider the instruction 8BECh Code W=0 W=1 W=1 • 1000 1011 1110 1100 binary 000 AL AX EAX 001 CL CX ECX • Opcode 100010 -> MOV 010 DL DX EDX 011 BL BX EBX • D=1 data goes from R/M to REG 100 AH SP ESP 101 CH BP EBP 110 DH SI ESI • W=1 data is word-sized 111 BH DI EDI • MOD=11, register addressing • REG=101 destination, R/M=100 source • MOV BP, SP
  126. Displacement addressing • If MOD is 00, 01, or 10 R/M has an entirely different meaning MOD FUNCTION R/M Code Function 00 No displacement 000 DS:BX+SI 01 8-bit sign-extended displacement 10 16-bit displacement 001 DS:BX+DI 11 R/M is a register (register addressing mode) 010 SS:BP+SI Examples: 011 SS:BP+DI If MOD=00 and R/M=101 mode is [DI] 100 DS:SI If MOD=01 and R/M=101 mode is 101 DS:DI [DI+33h] 110 SS:BP If MODE=10 and R/M=101 modes is 111 DS:BX [DI+2233h]
  127. Code W=0 W=1 W=1 Example 000 AL AX EAX 001 CL CX ECX 010 DL DX EDX 011 BL BX EBX 100 AH SP ESP • Instruction 8A15h 101 CH BP EBP 110 DH SI ESI • 1000 1010 0001 0101 111 BH DI EDI • Opcode 100010 -> MOV R/M Code Function • D=1, data flows from R/M to REG 000 DS:BX+SI • W=0, 8-bit argument 001 DS:BX+DI • MOD=00 (no displacement) 010 SS:BP+SI 011 SS:BP+DI • REG=010 (DL) 100 DS:SI • REG=101 ([DI] addressing mode) 101 DS:DI • MOV DL, [DI] 110 SS:BP 111 DS:BX
  128. Direct Addressing Mode • MOD is always 00 • R/M is always 110 • REG encodes the register to/from we take data as usual • Third byte contains the lower-order bytes of the displacement, fourth byte contains the high order byte of the displacement
  129. Direct Addressing • Example: 8816 00 10 • 1000 1000 0001 0110 0000 0000 0001 0000 Code W=0 W=1 W=1 • Opcode 100010 -> MOV 000 AL AX EAX 001 CL CX ECX • W=0 (byte-sized data) 010 DL DX EDX 011 BL BX EBX 100 AH SP ESP • D=0 data flows from REG 101 CH BP EBP 110 DH SI ESI • MOD 00, REG=010 (DL), R/M=110 111 BH DI EDI • Low-order byte of displacement 00 • High-order byte of displacement 10 • MOV [1000h], DL
  130. Segment MOV instructions • Different opcode 100011 • Segments are selected by setting the REG field Example MOV BX, CS REG Code Segment reg. Opcode 10001100 000 ES MOD=11 (register addressing) 001 CS 010 SS REG=001 (CS) 011 DS R/M=011 (BX) 100 FS 101 GS 8CCB
  131. Mã máy REG xác định thanh ghi cho toán hạng thứ nhất
  132. Mã máy MOD và R/M cùng nhau xác định toán hạng thứ hai
  133. Mã máy MOD và R/M cùng nhau xác định toán hạng thứ hai
  134. Ví dụ Mã hoá lệnh MOV BL,AL • Opcode đối với MOV là 100010 • Ta mã hoá AL sao cho AL là toán hạng nguồn: – D = 0 (AL là toán hạng nguồn) • W bit = 0 (8-bit) • MOD = 11 (register mode) • REG = 000 (mã của AL) • R/M = 011 (mã của BL) Kết quả:: 10001000 11000011 = 88 C3
  135. Nhóm lệnh Số học • Bên cạnh tác dụng, cần chú ý đến ảnh hưởng của lệnh đối với các cờ trạng thái • Các lệnh số học th/thường: ADD, SUB, • Các lệnh số học khác: CMP. NEG, INC, DEC, • Ảnh hưởng đến các cờ trạng thái – CF – OF Phụ thuộc vào quá trình thực hiện phép toán – AF – ZF = 1 nếu Kết quả bằng 0 – SF = 1 nếu MSB của Kết quả = 1 – PF = 1 nếu byte thấp của kết quả có Parity chẳn
  136. Arithmetic Instructions - ADD Khuôn dạng: ADD Đích,Nguồn - Tác dụng: (Đích)  (Đích)+(Nguồn) - Đích: có thể là: 1. Một thanh ghi 8 hoặc 16 bit của VXL 2. Một vị trí nhớ (1 hoặc 2 ô nhớ liên tiếp nhau) - Nguồn: có thể là: 1. Một thanh ghi 8 hoặc 16 bit của VXL 2. Một vị trí nhớ (1 hoặc 2 ô nhớ liên tiếp nhau) 3. Một giá trị cụ thể
  137. Ảnh hưởng của ADD – ZF = 1 nếu Kết quả bằng 0 – SF = 1 nếu MSB của Kết quả = 1 – PF = 1 nếu byte thấp của kết quả có Parity chẳn • CF được lập nếu tràn không dấu (có nhớ từ MSB) • OF được lập nếu tràn có dấu: - Có nhớ từ MSB, Không có nhớ vào MSB - Có nhớ vào MSB, Không có nhớ từ MSB • AF được lập nếu có nhớ từ nibble thấp vào nibble cao (từ bit 3 vào bit 4)
  138. Các cờ trên thanh ghi cờ • Các bit nhất định trên thanh ghi cờ điều khiển hoạt động hoặc phản ánh trạng thái của vi xử lý – Các cờ điều khiển (TF, IF, DF) • Quyết định cách đáp ứng của vi xử lý trong các tình huống nhất định – Các cở trạng thái (CF, PF, AF, ZF, SF, OF) • Bị ảnh hưởng bởi các phép toán nhất định • Phục vụ cho các lệnh có điều kiện
  139. Các cờ điều khiển • DF - Direction flag (Cờ hướng) – DF = 1: huớng xuống – DF = 0: hướng lên • IF – Interrupt flag (Cờ ngắt) – IF = 1: cho phép ngắt ngoài – IF = 0: cấm ngắt ngoài (đối với ngắt che được) • TF - Trace flag – TF = 1: vi xử lý thực hiện từng lệnh một
  140. Các cờ trạng thái • Carry • Zero – carry or borrow at – result is 0 MSB in add or subtract • Sign – last bit shifted out – result is negative • Parity • Overflow – low byte of result has – signed overflow even parity occurred during add or • Auxiliary subtract – carry or borrow at bit 3
  141. (Signed) Overflow • Can only occur when adding numbers of the same sign (subtracting with different signs) • Detected when carry into MSB is not equal to carry out of MSB – Easily detected because this implies the result has a different sign than the sign of the operands • Programs can ignore the Flags!
  142. Signed Overflow Example 10010110 00110110 + 10100011 + 01100011 00111001 10011001 Carry in = 0, Carry out = 1 Carry in = 1, Carry out = 0 Neg+Neg=Pos Pos+Pos=Neg Signed overflow occurred Signed overflow occurred OF = 1 (set) OF = 1 (set)
  143. Examples of No Signed Overflow 10010110 10010110 + 01100011 + 11110011 11111001 10001001 Carry in = 0, Carry out = 0 Carry in = 1, Carry out = 1 Neg+Pos=Neg Neg+Neg=Neg No Signed overflow occurred No Signed overflow occurred OF = 0 (clear) OF = 0 (clear)
  144. Unsigned Overflow • The carry flag is used 10010110 to indicate if an + 11110011 unsigned operation 10001001 overflowed • The processor only Carry out = 1 adds or subtracts - it Unsigned overflow occurred does not care if the CF = 1 (set) data is signed or unsigned!
  145. DEBUG's Register Display -R 000 SP=0010 BP=0000 SI=0000 DI=0000 00F IP=004F NV UP DI PL NZ NA PO NC • The state of the Flags are shown in line 2 • OV/NV: (no)oVerflow DN/UP: direction • EI/DI: En(Dis)abled Interrupts • NG/PL: sign ZR/NZ: (not)Zero • AC/NA: (no)Auxiliary PE/PO: Even/Odd • CY/NC: (no)Carry (set/clear)
  146. Arithmetic Instructions - SUB Khuôn dạng: SUB Đích,Nguồn - Tác dụng: (Đích)  (Đích)-(Nguồn) - Đích: có thể là: 1. Một thanh ghi 8 hoặc 16 bit của VXL 2. Một vị trí nhớ (1 hoặc 2 ô nhớ liên tiếp nhau) - Nguồn: có thể là: 1. Một thanh ghi 8 hoặc 16 bit của VXL 2. Một vị trí nhớ (1 hoặc 2 ô nhớ liên tiếp nhau) 3. Một giá trị cụ thể
  147. Ảnh hưởng của SUB – ZF = 1 nếu Kết quả bằng 0 – SF = 1 nếu MSB của Kết quả = 1 – PF = 1 nếu byte thấp của kết quả có Parity chẳn • CF được lập nếu tràn không dấu (có mượn vào MSB) • OF được lập nếu tràn có dấu: - Có mượn từ MSB, Không có mượn từ MSB - Có mượn từ MSB, Không có mượn vào MSB • AF được lập nếu có mượn từ nibble cao vào nibble thấp (từ bit 4 vào bit 3)
  148. Arithmetic Instructions - CMP Khuôn dạng: CMP Đích,Nguồn - Tác dụng: (Đích)-(Nguồn) - Đích: có thể là: 1. Một thanh ghi 8 hoặc 16 bit của VXL 2. Một vị trí nhớ (1 hoặc 2 ô nhớ liên tiếp nhau) - Nguồn: có thể là: 1. Một thanh ghi 8 hoặc 16 bit của VXL 2. Một vị trí nhớ (1 hoặc 2 ô nhớ liên tiếp nhau) 3. Một giá trị cụ thể
  149. Arithmetic Instructions – INC, DEC, NEG • INC T/h • Trong đó: T/h có thể là các thanh ghi hoặc vị trí nhớ • Tác dụng: (T/h)  (T/h)+1 • DEC T/h • Trong đó: T/h có thể là các thanh ghi hoặc vị trí nhớ • Tác dụng: (T/h)  (T/h)-1 • Lưu ý: Các lệnh INC và DEC không ảnh hưởng đến cờ CF • Lệnh NEG T/h: Đảo dấu của T/h (Lấy bù 2) • Lệnh NEG sẽ lập cờ OF nếu giá trị của T/h là giá trị âm nhất trong dải giá trị của các số có dấu tương ứng
  150. Nhóm lệnh Logic • Cần chú ý đến ảnh hưởng của lệnh đối với các cờ trạng thái • Các lệnh logic th/thường: NOT, AND, OR, XOR NOT A: ~A AND A,B: A &= B OR A,B : A |= B XOR A,B: A ^= B • NOT không ảnh huởng đến các cờ trạng thái. • Các lệnh khác: – CF = 0 – OF = 0 – ZF = 1 nếu Kết quả bằng 0 – SF = 1 nếu MSB của Kết quả = 1 – PF = 1 nếu byte thấp của kết quả có Parity chẳn – AF không xác định
  151. Một số ví dụ AL 1100 1010 AL 0011 0101 NOT AL BL 0110 1101 AL 0011 0101 OR AL, BL AL 0111 1101 AL 0011 0101 BL 0110 1101 AL 0011 0101 AND AL, BL BL 0000 1111 AL 0010 0101 OR AL, BL AL 0011 1111 AL 0011 0101 BL 0000 1111 AL 0011 0101 AND AL, BL BL 0110 1101 AL 0000 0101 XOR AL, BL AL 0101 1000
  152. Một số ứng dụng • Bài toán Xoá bit: Xoá một bit nào đó của một toán hạng mà không làm ảnh hưởng đến các bit còn lại của toán hạng đó • Bài toán Kiểm tra bit: Xác định một bit nào đó của một toán hạng là bằng 0 hay 1 (thông qua giá trị của một cờ trạng thái) • Bài toán Lập bit: Lập một bit nào đó của một toán hạng mà không làm ảnh hưởng đến các bit còn lại của toán hạng đó
  153. Nhóm lệnh logic • Các lệnh logic khác: Lệnh TEST, Các lệnh dịch (Shift) và Các lệnh quay (Rotate) • Lệnh TEST chỉ khác lệnh AND là không giữ lại kết quả của phép toán • Các lệnh dịch và Các lệnh quay đều có hai khuôn dạng: Khuôn dạng 1: Mnemonic Toán hạng,1 Khuôn dạng 2: Mnemonic Toán hạng,CL • Tác dụng của một câu lệnh theo khuôn dang 2 giống như tác dụng liên tiếp của N câu lệnh tương ứng theo khuôn dạng 1, với N là giá trị của thanh ghi CL
  154. Các lệnh Dịch trái: SHL, SAL CF Register 0
  155. Shift right SHR Register CF 0
  156. Shift right SAR Register CF
  157. Rotate through Carry L/R (Quay trái/phải thông qua carry) RCL RCR
  158. Rotate left/right (Quay trái/phải không qua carry) ROL ROR
  159. Nhóm lệnh rẽ nhánh • Làm thay đổi trật tự thực hiện lệnh bình thường của vi xử lý • Lệnh nhảy không điều kiện: JMP • Các lệnh nhảy có điều kiện: Jxxx • Lệnh lặp: LOOP và các biến thể của nó • Các lệnh có liên quan đến Chương trình con: - CALL (gọi chương trình con) - RET (trở về chương trình gọi) • Các lệnh có liên quan đến Chương trình con phục vụ ngắt - INT (gọi chương trình con phục vụ ngắt - Gọi ngắt) - IRET (quay về chương trình gọi ngắt)
  160. Lệnh nhảy không điều kiện • JMP nhãn – Nhảy gần: E9 xx xx (3 byte) – Nhảy ngắn: EB xx (2 byte) – Nhảy xa: EA xx xx xx xx (5 byte) • Nhãn: tên do ngườI lập trình tự đặt ra theo qui tắc đặt tên của Assembler và có thể đặt vào trước một câu lệnh bất kỳ trong chương trình cùng với dấu : nhãn: Câu lệnh cần thực hiện • Nhãn sẽ được dịch thành địa chỉ • Khoảng cách nhảy: Khoảng cách đại số (có dấu) từ lệnh nhảy đến lệnh cần thực hiện
  161. Cơ chế thực hiện lệnh nhảy • Các lệnh nhảy ngắn và gần chỉ làm thay đổi giá trị của thanh ghi IP – Lệnh nhảy ngắn cộng khoảng cách nhảy 8-bit có dấu vào giá trị hiện thời của IP – Lệnh nhảy gần cộng khoảng cách nhảy 16-bit có dấu vào giá trị hiện thời của IP • Lệnh nhảy xa làm thay đổi cả CS và IP – Gán cho CS và IP các giá trị mới
  162. Mã máy của lệnh nhảy 1106:0100 EB2A JMP 012C • 012C-0102=002A 1106:0102 EBFC JMP 0100 • 0100-0104=FFFC 1106:0104 E97F00 JMP 0186 • 0186-0106=0080 (too far for short!) • 0186-0107=007F 1106:0107 E9F5FE JMP FFFF • FFFF-010A=FEF5
  163. Các lệnh nhảy có điều kiện • Jxxx nhãn – Có gần 40 menmonic khác nhau • Các lệnh nhảy điều kiện đơn: phụ thuộc vào giá trị của 1 cờ. • JNZ/JNE - Nhảy nếu cờ ZF = 0, nghĩa là kết quả của phép toán trước đó khác không • JC - Nhảy nếu CF = 1, nghĩa là câu lệnh trước đó lập cờ carry • JZ/JE • JNC
  164. Các lệnh nhảy có điều kiện • Tất cả các lệnh nhảy có điều kiện phải là nhảy ngắn – khoảng cách nhảy: -128 to +127 bytes • Tổ hợp với lệnh nhảy không điều kiện để có thể vượt qua giới hạn này. • Các lệnh nhảy điều kiện kép: phụ thuộc vào giá trị của nhiều cờ • JB/JNAE • JNL/JGE
  165. ứng dụng của các lệnh nhảy có điều kiện • Kết hợp với JMP để xây dựng các cấu trúc lập trình cơ bản: - Cấu trúc điều kiện - Cấu trúc lặp • Các lệnh nhảy thường theo sau các lệnh làm thay đổi giá trị của các cờ trạng thái: – CMP – TEST
  166. Cấu trúc điều kiện mov ax,n cmp ax,7 jz nhan1 lệnh 1 jmp nhan2 nhan1:lệnh 2 nhan2:lệnh 3
  167. Cấu trúc lặp mov ax,n nhan1: cmp ax,0 jz nhan2 lệnhi sub ax,2 jmp nhan1 nhan2: lệnhk
  168. Cấu trúc điều kiện - AND char n; int w,x; ;if(n>='A'&&w==x) mov ah,n if (n>='A' && w==x) cmp ah,'A' whatever(); jl nogo mov ax,w cmp ax,x jne no_go ;then-part call whatever nogo:
  169. Cấu trúc điều kiện - OR char n,k; unsigned int w; ;if(n k || w<=10) cmp ah,k whatever(); jne then_ cmp w,10 ja end_if then_: call whatever end_if:
  170. Lệnh LOOP • LOOP nhan – Giảm CX đi 1 mov cx,9 – Nếu (CX) <> 0 thì JMP nhan: lệnh 1 nhan. Nếu không thì tiếp tục thực hiện lệnh lệnh 2 theo trật tự bình lệnh 3 thường loop nhan
  171. LOOPZ/E và LOOPNZ/E • Các biến thể của • Lưu ý: LOOP giảm LOOP CX nhưng không ảnh • Giá trị của cờ ZF có huởng đến các cờ thể làm kết thúc sớm • LOOPZ == LOOPE vòng lặp • Loop while ZF/equal • LOOPNZ==LOOPNE && CX!=0 • Các lệnh trong vòng • Loop while (NZ/ not lặp có thể tác động đến equal) && CX!=0 cờ ZF (CMP ?)
  172. Chương trình con • Chương trình con trong ngôn ngữ Assembly được gọi là Thủ tục (Procedure) • Một thủ tục có thể được thực hiện nhiều lần • Có liên quan đến stack: - lưu giữ Địa chỉ quay về - lưu giữ giá trị của các thanh ghi của vi xử lý
  173. Stack ? • Cấu trúc dữ liệu LIFO ở RWM - PUSH : ghi dữ liệu vào stack, - POP: đọc dữ liệu từ stack • (SS:SP) trỏ đến đỉnh của stack • (SS:BP) truy cập stack ngẫu nhiên (không theo LIFO)
  174. Stack Initialization • The .stack directive hides an array allocation statement that looks like this – The_Stack DB Stack_Size dup (?) • On program load – SS is set to a segment address containing this array (usually The_Stack starts at offset 0) – SP is set to the offset of The_Stack+Stack_Size which is one byte past the end of the stack array • This is the condition for an empty stack
  175. Initial Stack Configuration .stack 12 ;Reserve space for the stack • Loader determines actual segment address for the start of the stack – This is an empty stack Stack Size: 000C SS:0340 SP:000C
  176. How Does The Stack Work? • The stack grows backwards through memory towards the start of the stack segment Stack Size: 000C SS:0340 SP:0008 • Push decrements stack pointer Pop increments stack pointer
  177. PUSH • PUSH nguồn – Push nguồn vào stack • PUSHF – Push thanh ghi cờ vào stack • Lệnh PUSH trước hết sẽ giảm SP đi 2 rồi lưu giá trị của nguồn vào vị trị nhớ được trỏ bởi (SS:SP)
  178. Ví dụ PUSH Stack Size: 000C 3C 09 A4 40 2C FF A2 43 07 06 4C 2A 09 46 SS:0340 SP:0008 PUSH AX AX: 0123 3C 09 A4 40 2C FF A2 23 01 06 4C 2A 09 46 SS:0340 SP:0006
  179. POP • POP đích – Pop dữ liệu từ đỉnh stack vào đích • POPF – Pop dữ liệu từ đỉnh stack vào thanh ghi cờ • Lệnh POP trước hết copy dữ liệu được trỏ bởi (SS:SP) đến đích rồi tăng SP lên 2
  180. Ví dụ POP 3C 09 A4 40 2C FF A2 23 01 06 4C 2A 09 46 SS:0340 SP:0006 POP ES 3C 09 A4 40 2C FF A2 23 01 06 4C 2A 09 46 SS:0340 SP:0008 ES: 0123
  181. Tràn stack! Stack Size: 000C SS:0340 SP:FFFE • Stack Overflow • Stack Underflow Stack Size: 000C SS:0340 SP:000D
  182. Thủ tục Tên_Thủ_tục PROC kiểu ;thân của thủ tục RET ;quay về chuơng trình gọi Tên_Thủ_tục ENDP • kiểu là NEAR hoặc FAR – ngầm định là NEAR • Một thủ tục có thể có nhiều lệnh RET
  183. Lệnh CALL và RET • Gọi một thủ tục (NEAR) CALL Tên_Thủ_tục – push IP vào stack – copy địa chỉ của Tên_Thủ_tục vào IP • Trở về từ một thủ tục (NEAR) RET – pop giá trị ở đỉnh stack vào IP
  184. Thủ tục Far • Gọi thủ tục (FAR) CALL Tên_thủ_tục – lần lượt push CS và IP vào stack – copy địa chỉ của Tên_thủ_tục vào CS và IP • Trở về từ thủ tục (FAR) RET – pop giá trị từ đỉnh stack lần lượt vào IP và CS
  185. Gọi ngắt • Gọi ngắt là một lời gọi thủ tục đặc biêt – FAR – Thanh ghi cờ phải được bảo toàn • INT Số ngắt – Thanh ghi cờ được push, TF và IF bị xoá – CS và rồI IP được push – Địa chỉ của một chương trình con phục vụ ngắt (Vector ngắt) tương ứng với Số ngắt được copy vào CS và IP
  186. Trở về từ ngắt • IRET • Tác dụng của lênh: – Giá trị ở đỉnh của stack được pop vào IP – Giá trị ở đỉnh của stack được pop vào CS – Giá trị ở đỉnh của stack được pop vào thanh ghi cờ • Chương trình bị ngắt tiếp tục thực hiện dường như không có chuyện gì xảy ra
  187. Xuất ký tự ra màn hình PC • Ngắt 21h – Ngắt này hỗ trợ rất nhiều dịch vụ trên PC – Nhận dạng dịch vụ bằng số dịch vụ (số hàm). Số dịch vụ cần được nạp voà thanh ghi AH – Tuỳ theo từng dịch vụ, có thể cần thêm một số đối số khác được nạp vào các thanh ghi xác định • AH = 2, DL = Mã ASCII của ký tự cần xuất – Ký tự được hiển thị tại vị trí hiện thờI của con trỏ
  188. Xuất xâu ký tự ra màn hình PC • Dịch vụ 09h của ngắt 21h – DX = Địa chỉ Offset của xâu (trong đoạn dữ liệu) – DS = Địa chỉ segment của xâu – Xâu ký tự phải kết thúc bằng ký tự '$' • Để nạp địa chỉ offset của xâu vào DX, có thể: – LEA DX, Tênxâu – MOV DX, OFFSET Tên xâu
  189. Nhập 1 ký tự từ bàn phím PC • Dịch vụ 01h của ngắt 21h • Khi NSD gõ một ký tự từ bàn phím: – Ký tự sẽ hiện trên màn hình – AL sẽ chứa mã ASCII của ký tự đó • AL=0 nếu ký tự được nhập là ký tự điều khiển
  190. Nhóm lệnh thao tác string • Chúng ta hiểu: string là một mảng byte hoặc từ nằm trong bộ nhớ • Các thao tác string: – Sao chép – Tìm kiếm – Lưu trữ – So sánh
  191. Các đặc điểm • Nguồn: (DS:SI), Đích: (ES:DI) – DS, ES chứa Địa chỉ Segment của string – SI, DI chứa Địa chỉ Offset của string • Cờ hướng DF (0 = Up, 1 = Down) – DF = 0 - Tăng địa chỉ (trái qua phải) – DF = 1 - Giảm địa chỉ (phảI qua trái)
  192. Chuyển (Sao chép) • MOVSB, MOVSW – Chuyển 1 byte hoặc 1 word từ vị trí nhớ này sang vị trí nhớ khác – Tác dụng của lệnh: • Sao chép byte/word từ (DS:SI) đến (ES:DI) • Tăng/Giảm SI và DI 1 hoặc 2 giá trị – Nếu CX chứa một giá trị khác không: • REP MOVSB hoặc REP MOVSW sẽ tự động sao chép (CX) lần và CX sẽ về không
  193. Ví dụ:Sao chép mảng ; Sao chép 10 byte từ mảng a sang mảng b, giả sử (DS) = (ES) mov cx, 10 mov di, offset b mov si, offset a cld ;xoá cờ DF rep movsb
  194. Ví dụ: Tịnh tiến các ô nhớ mov cx, 7 mov di, offset a+9 mov si, offset a+6 std ;lập cờ DF rep movsb SI DI a
  195. Ví dụ pattern db "!@#*" db 96 dup (?) mov cx,96 mov si, offset pattern mov di, offset pattern+4 cld rep movsb DI SI ! @ # * a
  196. Lưu trữ string STOSB, STOSW • Thường được sử dụng • Copy AL hoặc AX vào có tiền tố REP và số một mảng byte hoặc lần lặp trong CX word – Đích (ES:DI) • Tăng hoặc Giảm DI – phụ thuộc DF
  197. Ví dụ: arr dw 200 dup (?) mov ax,50A0h mov di,offset arr mov cx,200 cld DI AX 50 A0 rep stosw A0 50 A0 50 arr
  198. Nạp String • LODSB, LODSW – Byte hoặc word tại (DS:SI) được copy vào AL hoặc AX – SI tăng hoặc giảm 1 hoặc 2 giá trị phụ thuộc DF • Thường được dùng với STOSx trong một vòng lặp để xử lý từng phần tử trong một mảng
  199. Ví dụ: mov di, offset b mov si, offset a mov cx,30 cld lp: lodsb and al,0DFh stosb loop lp
  200. Quét String SCASB, SCASW • So sánh AL hoặc AX với byte hoặc word tạI (ES:DI) và tự động tăng hoặc giảm DI • Lệnh này ảnh hưởng đến các cờ trạng thái – Tuỳ theo kết quả so sánh – Dùng trong một vòng lặp REPs • REPZ, REPE, REPNZ, REPNE
  201. Ví dụ arr db 'abcdefghijklmnopqrstuvwxyz' mov di, offset arr mov cx,26 cld mov al,target repne scasb jne nomatch
  202. So sánh String CMPSB, CMPSW • So sánh byte hoặc word tại (DS:SI) với byte hoặc word tạI (ES:DI), tác động đến các cờ và tăng hoặc giảm SI và DI • Thường dùng để so sánh hai mảng với nhau
  203. Ví dụ mov si, offset str1 mov di, offset str2 cld mov cx, 12 repe cmpsb jl str1smaller jg str2smaller ;the strings are equal - so far ;if sizes different, shorter string is less
  204. Nhóm lệnh hỗn hợp - Các lệnh Lập/Xoá trực tiếp các cờ: STC, CLC STD, CLD STI, CLI - Lệnh NOP (No Operation): Không làm gì!!! - Lệnh NOP thường được dùng trong các vòng lặp tạo trễ (delay)bằng phần mềm - Các lệnh Nhập/Xuất dữ liệu đối với các cổng I/O IN OUT
  205. Lệnh IN - Nếu Địa chỉ của cổng Nhỏ hơn hoặc bằng FFh: IN Acc, Địa chỉ cổng - Trong đó: Acc có thể là AL hoặc AX - Nhập dữ liệu từ cổng vào Acc - Nếu Địa chỉ của cổng Lớn hơn FFh: MOV DX, Địa chỉ cổng IN Acc, DX - Trong đó: Acc có thể là AL hoặc AX - Nhập dữ liệu từ cổng vào Acc
  206. Lệnh OUT - Nếu Địa chỉ của cổng Nhỏ hơn hoặc bằng FFh: OUT Địa chỉ cổng, Acc - Trong đó: Acc có thể là AL hoặc AX - Xuất dữ liệu từ Acc ra cổng - Nếu Địa chỉ của cổng Lớn hơn FFh: MOV DX, Địa chỉ cổng OUT DX, Acc - Trong đó: Acc có thể là AL hoặc AX - Xuất dữ liệu từ Acc ra cổng
  207. Tóm tắt chương - Tính tương thích về Cấu trúc thanh ghi của các vi xử lý họ x86 - Tính tương thích về Tập lệnh của các vi xử lý họ x86
  208. Kỹ thuật Vi xử lý Điện tử-Viễn thông Đại học Bách khoa Đà Nẵng
  209. Chương 4 4.1 Phân loại bộ nhớ bán dẫn 4.2 Hoạt động của các chip EPROM 4.3 Hoạt động của các chip SRAM 4.4 Bus hệ thống của hệ vi xử lý 8088 4.5 Bài toán thiết kế bộ nhớ
  210. Mục tiêu và biện pháp thiết kế ◼ Ghép nối các chip nhớ EPROM và SRAM với Bus hệ thống sao cho không xảy ra xung đột: Các chip nhớ bị cấm khi vi xử lý truy cập các cổng I/O Chỉ có một chip nhớ hoạt động khi vi xử lý truy cập bộ nhớ ◼ Thực hiện một mạch giải mã địa chỉ bộ nhớ dùng các chip giải mã hoặc các cổng logic hoặc kết hợp cả hai
  211. 4.1 Phân loại bộ nhớ bán dẫn Bộ nhớ bán dẫn (Semiconductor memory) SAM RAM (Sequential Access Memory) (Random Access Memory) ROM (Read Only Memory) RWM (Read Write memory) PROM EPROM SRAM DRAM EEPROM Flash ROM
  212. 4.2 Các chip EPROM A0 D0 A1 D1 A2 D2 A3 D3 m chân dữ liệu A4 D4 p chân địa chỉ A5 D5 A6 D6 A7 Dm-1 A8 EPROM A p-1 Điều khiển đọc OE PGM Chọn chip CE Vpp Các chân điều khiển
  213. Dung lượng của 1 chip nhớ ◼ Một chip nhớ được xem như một mảng gồm n ô nhớ. Mỗi ô nhớ lưu trữ được m-bit dữ liệu ◼ Dung lượng của chip thường được biểu diễn: nxm Ví dụ: Một chip có dung lượng 2Kx8 nghĩa là chip đó có 2048 ô nhớ và mỗi ô nhớ có thể lưu trữ được 1 byte dữ liệu ◼ m chính là số chân dữ liệu của chip ◼ log2(n) = p là số chân địa chỉ của chip
  214. Hoạt động ghi dữ liệu vào EPROM ◼ Việc ghi dữ liệu vào EPROM được gọi là lập trình cho EPROM ◼ Được thực hiện bằng thiết bị chuyên dụng gọi là Bộ nạp EPROM ◼ Chân Vpp được cấp điện áp tương ứng với từng loại chip gọi là điện áp lập trình ◼ Dữ liệu tại các chân dữ liệu sẽ được ghi vào một ô nhớ xác định nhờ các tín hiệu đưa vào ở các chân địa chỉ và một xung (thường gọi là xung lập trình) đưa vào chân PGM
  215. Hoạt động đọc dữ liệu từ một chip EPROM Để đọc dữ liệu từ 1 ô nhớ nào đó của 1 chip EPROM nào đó, Bộ vi xử lý cần phải: ◼ Chọn chip đó: 0 > CE ◼ Áp các tín hiệu địa chỉ của ô nhớ cần đọc vào các chân địa chỉ Ap-1 – A0 ◼ Đọc: 0 > OE ◼ Kết quả là m bit dữ liệu cần đọc xuất hiện ở các chân dữ liệu Dm-1 – D0
  216. Họ EPROM thông dụng 27x Số hiệu của chip Dung lượng 2716 2Kx8 2732 4Kx8 2764 8Kx8 27128 16Kx8 27256 32Kx8 27512 64Kx8 Bảng 4.1 Họ EPROM 27x
  217. EPROM 2716 2732 1 24 A7 Vcc 2 23 A6 A8 3 22 ◼ Sơ đồ chân A5 A9 4 21 của 2716 A4 Vpp A11 5 20 __ __ và 2732 A3 OE OE / Vpp 6 19 A2 A10 __ 7 18 A1 CE/PGM 8 17 A0 D7 9 16 D0 D6 10 15 D1 D5 11 14 D2 D4 12 13 GND D3
  218. EPROM 2764 Các chân địa chỉ Các chân dữ liệu Chọn chip Điều khiển đọc
  219. EPROM 2764
  220. Lập trình cho 2764 ◼ Trước hết cần phải xoá • Xoá một chip tức là làm cho tất cả các bit = 1 ◼ Xoá một chip EPROM bằng tia cực tím ◼ Lập trình bằng cách: • VPP mắc ở mức 12.5V • E và P đều ở mức thấp TTL ◼ Các bit dữ liệu đưa vào các chân dữ liệu ◼ Các bit địa chỉ đưa vào các chân địa chỉ
  221. 4.3 Các chip SRAM A0 D0 A1 D1 A2 D2 A3 D3 A4 D4 m chân dữ liệu P chân địa chỉ A5 D5 A6 D6 A7 Dm-1 A8 SRAM A p-1 Điều khiển đọc OE Chọn chip CS Điều khiển ghi WE
  222. Đọc dữ liệu từ một chip SRAM Để đọc dữ liệu từ 1 ô nhớ nào đó của 1 chip SRAM nào đó, vi xử lý cần phải: ◼ Chọn chip đó: 0 > CS ◼ Áp các tín hiệu địa chỉ vào Ap-1 – A0 ◼ Đọc: 0 > OE Kết quả là m bit dữ liệu cần đọc xuất hiện ở các chân dữ liệu Dm-1 – D0
  223. Ghi dữ liệu vào một chip SRAM Để ghi m bit dữ liệu vào 1 ô nhớ nào đó của 1 chip SRAM nào đó, vi xử lý cần phải: ◼ Chọn chip đó: 0 > CS ◼ Áp các tín hiệu địa chỉ vào Ap-1 – A0 ◼ Áp m bit dữ liệu cần ghi vào các chân dữ liệu Dm-1 – D0 ◼ Ghi: 0 > WE Kết quả là các bit dữ liệu ở các chân dữ liệu sẽ được ghi vào ô nhớ đã chọn
  224. SRAM 6264 ◼ Dung lượng 8Kx8 A0 I/O0 A1 I/O1 ◼ 8 chân dữ liệu A2 I/O2 A3 I/O3 ◼ A4 I/O4 13 chân địa chỉ A5 I/O5 A6 I/O6 ◼ Hai chân chọn A7 I/O7 A8 chip A9 6264 A10 ◼ Chân điều khiển A11 đọc A12 OE ◼ Chân điều khiển WE CS1 ghi CS2
  225. 32K x 8 Static RAM 1 28 A14 Vcc 2 __ 27 A12 WE 3 26 A7 A13 4 25 A6 A8 5 24 A5 A9 6 23 A4 A11 7 __ 22 A3 OE 8 21 A2 A10 9 __ 20 A1 CE 10 19 A0 D7 11 18 D0 D6 12 17 D1 D5 13 16 D2 D4 14 15 GND D3 51256S
  226. Sơ đồ khối 6264
  227. Chức năng của 6264
  228. 4.4 Bus hệ thống của 8088 ◼ Bus địa chỉ 20-bit: gồm các đường địa chỉ được ký hiệu từ A19 đến A0 ◼ Bus dữ liệu 8-bit: gồm các đường dữ liệu được ký hiệu từ D7 đến D0 ◼ Bus điều khiển gồm các đường điều khiển riêng lẽ phục vụ cho hoạt động truy cập bộ nhớ và các cổng I/O, mỗi đường thường được ký hiệu bằng tên của tín hiệu điều khiển ◼ Bus hệ thống không nối trực tiếp với các chân của 8088: thông qua các mạch đệm, chốt.
  229. 80x86 Microprocessors Product 8008 808 808 808 808 8028 80386 80486 Pent. Pent. 0 5 6 8 6 Pro Year Introduced 1972 1974 1976 1978 1979 1982 1985 1989 1992 1995 Technology PMOS NMO NMO NMO NMO NMOS CMOS CMOS BICMO BICMO S S S S S S Clock Rate 0.5- 2-3 3-8 5-10 5-8 10- 16-40 66 60- 150 0.8 16? 66+ Number of Pins 18 40 40 40 40 132 168 273 387 Number of 3000 4500 6500 29K 29K 130K 275K 1.2M 3M 5.5M transistors Number of 66 111 113 133 133 instructions Physical Memory 16K 64K 64K 1M 1M 16M 16M4GB 4GB 4GB 64G Virtual Memory none none none none none 1G 64T 64T 64T 64T Internal Data Bus 8 8 8 16 16 16 32 32 64 32 External Data Bus 8 8 8 16 8 16 16,32 32 64 64 Address Bus 8 16 16 20 20 24 24,32 32 32 36 Data Types 8 8 8 8,16 8,16 8,16 8,16,32 8,16,3 8,16,3 8,16,3 2 2 2
  230. 8088/8086 Microprocessor ◼ DIP 40 pin ◼ Data bus • Bus dữ liệu trong :16 bit • Bus dữ liệu ngoài của 8088: 8 bit dùng AD0-AD7 • Bus dữ liệu ngoài của 8086:16 bit dùng AD0-AD15 • ALE (Address Latch Enable)
  231. 8088/8086 Microprocessor ◼ Bus địa chỉ • ALE = 1 • Sử dụng 74LS373 để tách và chốt địa chỉ ◼ Đầu vào: AD0-AD7 (8088) hoặc AD0-AD15 (8086) và ALE ◼ Đầu ra: A0-A7 (8088) hoặc A0-A15 (8086)
  232. Sơ đồ chân của 8088
  233. Sơ đồ chân 8088/8086 (Min Mode)
  234. Minimum/Maximum Mode ◼ Ảnh hưởng đến các chân 24-31 ◼ Minimum Mode • Các chân 24-31 là các tín hiệu điều khiển I/O và bộ nhớ • Các tín hiệu điều khiển đều từ 8088/8086 • Tương tự với 8085A ◼ Maximum Mode • Một số tín hiệu điều khiển được tạo ra từ ngoài • Một số chân có thêm chức năng mới • Khi có dùng bộ đồng xử lý toán 8087
  235. Sơ đồ chân của 8088 MN / MX AD0 AD1 READY AD2 CLK AD3 RESET AD4 AD5 TEST AD6 AD7 HLDA A8 HOLD A9 NMI A10 A11 A12 A13 A14 8088 A15 A16 / S3 A17 / S4 A18 / S5 A19 / S6 SSO DEN DT / R IO / M RD WR ALE INTR INTA
  236. Tín hiệu ở các chân của 8088 MN / MX AD0 AD1 READY AD2 CLK AD3 Các chân Địa chỉ/Dữ liệu RESET AD4 AD5 TEST AD6 AD7 HLDA A8 HOLD A9 NMI A10 A11 A12 Các chân địa chỉ A13 A14 8088 A15 A16 / S3 A17 / S4 Các chân Địa chỉ/Trạng thái A18 / S5 A19 / S6 SSO DEN DT / R IO / M RD WR ALE Cho phép chốt Địa chỉ INTR INTA
  237. Các chân Địa chỉ/Dữ liệu ◼ Các chân AD7 đến AD0 ◼ Kỹ thuật Multiplexing: Tín hiệu ở các chân này lúc này là tín hiệu địa chỉ, lúc khác là tín hiệu dữ liệu phụ thuộc vào tín hiệu điều khiển ALE (Address Latch Enable): ◼ ALE = 1: AD7 đến AD0 = A7 đến A0 ◼ ALE = 0: AD7 đến AD0 = D7 đến D0
  238. Các chân Địa chỉ và Các chân Địa chỉ/Trạng thái ◼ Các chân địa chỉ: A15 đến A8 ◼ Tín hiệu ở các chân này luôn là tín hiệu địa chỉ ◼ Các chân địa chỉ/trạng thái: A19/S6 đến A16/S3: ◼ ALE = 1: A19 đến A16 ◼ ALE = 0: S6 đến S3
  239. Processor Timing Diagram of 8088 (Minimum Mode) for Memory or I/O Read (with 74245) T1 T2 T3 T4 CLOCK __ DT/R ALE D7 - D0 D7 - D0 (from memory) from memory to 74LS245 D7 - D0 from garbage AD7 - AD0 A7 - A0 74LS245 A15 - A8 A15 - A8 A19/S6 - A16/S3 A19 - A16 S6 - S3 A19 - A0 A19 - A0 from 74LS373 from 74LS373 to memory __ IO/M if I/O ACCESS this is HIGH, if MEMORY ACCESS this is LOW ___ RD ___ DEN
  240. Mô tả chân ◼ BHE ◼ Bus High Enable ◼ Phân biệt byte thấp và byte cao của một từ (chỉ với 8086)
  241. Mô tả chân ◼ NMI ◼ Non Maskable Interrupt ◼ Đầu vào ngắt không che được
  242. Mô tả chân ◼ INTR ◼ Interrupt Request ◼ Đầu vào ngắt che được ◼ Nối với chip điều khiển ngắt 8259 ◼ INTA: chấp nhận ngắt
  243. Mô tả chân ◼ CLK ◼ Clock ◼ Đầu vào đồng hồ ◼ Nối với chip 8284
  244. Mô tả chân ◼ RESET ◼ Kết thúc hoạt động hiện thời và huy bỏ mọi thứ ◼ Sau khi reset • CS=FFFFH • DS=0000H • SS=0000H • ES=0000H • IP=0000H • Các cờ bị xoá • Hàng đợI lệnh rỗng
  245. Mô tả chân ◼ READY ◼ Chèn thêm một trạng thái đợi (wait state)
  246. Mô tả chân ◼ TEST ◼ Đến từ 8087 (Bộ đồng xử lý) ◼ Đồng bộ 8088 và 8087
  247. Mô tả chân ◼ MN/MX ◼ Minimum mode = +5V ◼ Maximum mode = Gnd
  248. Mô tả chân – Max ◼ QS0, QS1 ◼ Queue status ◼ Trạng thái của hàng đợi lệnh: • 00 – No operation • 01 – first byte of opcode from queue • 10 – empty the queue • 11 – subsequent byte from queue
  249. Mô tả chân – Max ◼ S0, S1, S2 ◼ Status Signal Pins (S2- S0) • 000 – INTA – interrupt acknowledge • 001 – IORC – read I/O port • 010 – IOWC – write I/O port • 011 – none - halt • 100 – MRDC – code access • 101 – MRDC – read memory • 110 – MWTC – write memory • 111 – none - passive
  250. Mô tả chân – Max ◼ LOCK ◼ Locks processor to system bus ◼ Gain the lock by using LOCK prefix on an assembly instruction ◼ Used with status signals to prevent DMA from gaining control of the buses
  251. Mô tả chân – Max ◼ RQ/GT0, RQ/GT1 ◼ Request/Grant ◼ Bi-directional ◼ Gain control of local bus ◼ RQ/GT0 normally permanently high (disabled) ◼ RQ/GT1 is connected to the 8087
  252. Mô tả chân – Min ◼ INTA ◼ Interrupt acknowledge ◼ Chấp nhận ngắt
  253. Mô tả chân – Min ◼ ALE ◼ Address Latch Enable ◼ Tín hiệu ở các chân Địa chỉ/Dữ liệu và các chân Địa chỉ/Trạng thái lúc ALE = 1 là các tín hiệu địa chỉ
  254. Mô tả chân ◼ AD0-AD7 ◼ Các chân Địa chỉ/Dữ liệu ◼ Tín hiệu ở các chân này là 8 bit địa chỉ thấp A0 đến A7 khi ALE =1, là 8 bit dữ liệu D0 đến D7 khi ALE = 0
  255. 74LS373 D0 Q0 D1 Q1 D2 Q2 D3 Q3 D4 Q4 D5 74LS373 Q5 D6 Q6 D7 Q7 OE LE
  256. 74LS373
  257. Dùng 74LS373 để tách và chốt địa chỉ
  258. Mô tả chân – Min ◼ DEN ◼ Data Enable ◼ Dữ liệu có nghĩa
  259. Mô tả chân – Min ◼ DT/R ◼ Điều khiển hướng của tín hiệu dữ liệu: ◼ 1: Tín hiệu dữ liệu đi ra từ 8088 ◼ 0: Tín hiệu dữ liệu đi vào 8088
  260. Mô tả chân – Min ◼ IO/M ◼ Phân biệt: truy cập I/O hay Bộ nhớ • 1: 8088 truy cập I/O • 0: 8088 truy cập bộ nhớ
  261. Mô tả chân – Min ◼ WR ◼ 0: Tín hiệu trên bus dữ liệu được ghi vào bộ nhớ hoặc I/O ◼ Ghi bộ nhớ: ? ◼ Xuất dữ liệu ra cổng: ?
  262. Mô tả chân – Min ◼ HLDA ◼ Hold Acknowledge ◼ 0: Chấp nhận yêu cầu DMA ở HOLD • Báo cho Bộ điều khiển DMA được phép sử dụng bus hệ thống
  263. Mô tả chân – Min ◼ HOLD ◼ Nhận tín hiệu yêu cầu DMA từ Bộ điều khiển DMA (DMAC) ◼ DMAC muốn sử dụng bus hệ thống
  264. Mô tả chân – Min ◼ SSO ◼ 8088 ◼ Dùng với IO/M và DT/R để xác định trạng thái của chu kỳ bus hiện thời
  265. Các tín hiệu điều khiển ◼ Có thể sử dụng các cổng logic để tạo ra các tín hiệu điều khiển khác từ các tín hiệu điều khiển sẵn có • 3 Tín hiệu: ◼ RD, WR and IO/M RD W IO/M Signal R 0 1 0 MEMR 1 0 0 MEMW 0 1 1 IOR 1 0 1 IOW 0 0 X Never happens
  266. Tạo ra các tín hiêụ điều khiển (Min Mode)
  267. Tạo ra các tín hiêụ điều khiển (Min Mode)
  268. 8088 Bus – Min Mode
  269. 74LS245 A0 B0 A1 B1 A2 B2 A3 B3 A4 B4 A5 74LS245 B5 A6 B6 A7 B7 E DIR
  270. Bus hệ thống của hệ 8088 ở Mode Minimum A7 - A0 B7 - B0 D7 - D0 DEN E Bus dữ liệu DT / R DIR 74LS245 Bus địa chỉ AD7 - AD0 D7 - D0 Q7 - Q0 A7 - A0 A15 - A8 GND OE A19 - A16 LE 74LS373 A15 - A8 D7 - D0 Q7 - Q0 GND OE MEMORY 8088 LE 74LS373 A19/S6 - A16/ D7 - D4 Q7 - Q4 S3 D3 - D0 Q3 - Q0 GND OE ALE LE 74LS373 RD RD MEMR IO / M WR WR MEMW
  271. Minimum Mode 8088 D7 - D0 D7 - D0 A19 - A0 A19 - A0 MEMORY 8088 Minimum Bộ nhớ được chọn khi nào? Mode MEMR RD MEMW WR
  272. Minimum Mode 8088 220 ô nhớ (1MB) D7 - D0 D7 - D0 A19 - A0 A19 - A0 MEMORY 8088 Minimum Mode MEMR RD MEMW WR CS
  273. Không gian địa chỉ bộ nhớ 1M A19 AAAA AAAA AAAA AAAA AAAA đến 1111 1111 1198 7654 3210 A0 9876 5432 1000 (HEX) 00000 0000 0000 0000 0000 0000 FFFFF 1111 1111 1111 1111 1111 Ví dụ: Một địa chỉ bất kỳ 34FD0h 0011 0100 11111 1101 0000
  274. Bộ nhớ đầy đủ 1MB AX 3F1C FFFFF 36 BX 0023 FFFFE 25 CX 0000 FFFFD 19 DX FCA1 : : A19 A19 : : : : CS XXXX 20023 13 A0 A0 SS XXXX 20022 7D DS 2000 20021 12 ES XXXX 20020 29 : : D7 D7 BP XXXX : : : : SP XXXX 10008 8A D0 D0 10007 F4 SI XXXX 10006 07 DI XXXX 10005 88 10004 42 MEMR RD IP XXXX 10003 39 10002 27 10001 98 10000 45 : : MEMW WR : : 00001 95 CS 00000 23
  275. Nếu chỉ cần bộ nhớ có dung lượng nhỏ hơn 1MB thì giải quyết như thế nào? ◼ Phụ thuộc vào các chip nhớ sẵn có ◼ Phụ thuộc yêu cầu phân bố địa chỉ cho các loại bộ nhớ vật lý khác nhau ◼
  276. 512K đầu tiên của không gian địa chỉ bộ nhớ (Các địa chỉ có bit cao nhất A19 = 0) A18 AAAA AAAA AAAA AAAA AAAA đến 1111 1111 1198 7654 3210 A0 9876 5432 1000 (HEX) 00000 0000 0000 0000 0000 0000 7FFFF 0111 1111 1111 1111 1111
  277. 512K tiếp theo của không gian địa chỉ bộ nhớ (Các địa chỉ có bit cao nhất A19 = 1) A18 AAAA AAAA AAAA AAAA AAAA đến 1111 1111 1198 7654 3210 A0 9876 5432 1000 (HEX) 80000 1000 0000 0000 0000 0000 FFFFF 1111 1111 1111 1111 1111
  278. Bộ nhớ 512KB AX 3F1C BX 0023 Làm gì với A19? CX 0000 A19 DX FCA1 A18 A18 7FFFF 36 : : 7FFFE 25 CS XXXX A0 A0 7FFFD 19 SS XXXX : : DS 2000 D7 D7 : : ES XXXX : : 20023 13 D0 D0 20022 7D BP XXXX 20021 12 SP XXXX MEMR RD 20020 29 : : SI XXXX MEMW WR : : DI XXXX 00001 95 CS 00000 23 IP XXXX
  279. Điều gì xảy ra nếu 8088 đọc ô nhớ A0023h? AX 3F1C BX 0023 CX 0000 A19 DX FCA1 A18 A18 7FFFF 36 : : 7FFFE 25 CS XXXX A0 A0 7FFFD 19 SS XXXX : : DS A000 D7 D7 : : ES XXXX : : 20023 13 D0 D0 20022 7D BP XXXX 20021 12 SP XXXX MEMR RD 20020 29 : : SI XXXX MEMW WR : : DI XXXX 00001 95 CS 00000 23 IP XXXX MOV AH, [BX]
  280. Điều gì xảy ra nếu 8088 đọc ô nhớ A0023h? A19 AAAA AAAA AAAA AAAA AAAA đến 1111 1111 1198 7654 3210 A0 9876 5432 1000 (HEX) A0023 1010 0000 0000 0010 0011 A19 không được nối đến bộ nhớ nên nếu 8088 phát logic “1” trên A19 thì bộ nhớ cũng không nhận biết được.
  281. Điều gì xảy ra nếu 8088 đọc ô nhớ 20023h? A18 AAAA AAAA AAAA AAAA AAAA đến 1111 1111 1198 7654 3210 A0 9876 5432 1000 (HEX) 20023 0010 0000 0000 0010 0011 Với bộ nhớ tình hình không có gì khác!
  282. Nếu Bộ nhớ gồm 2 khối 512KB như thế này? AX 3F1C A19 7FFFF 36 BX 0023 A18 A18 7FFFE 25 CX 0000 : : 7FFFD 19 DX FCA1 A0 A0 : : 20023 13 D7 D7 CS XXXX 20022 7D : : SS XXXX 20021 12 D0 D0 DS 2000 20020 29 ES XXXX MEMR RD : : MEMW WR 00001 95 BP XXXX CS 00000 23 SP XXXX SI XXXX 7FFFF 12 DI XXXX A18 7FFFE 98 : 7FFFD 2C IP XXXX A0 : : 20023 33 D7 20022 45 : 20021 92 D0 20020 A3 RD : : WR 00001 D4 CS 00000 97
  283. Có vấn đề !!! ◼ Vấn đề là: Xung đột Bus. Hai khối nhớ sẽ cung cấp dữ liệu cùng một lúc khi 8088 đọc bộ nhớ ◼ Giải pháp: Dùng A19 làm “người phân xử” để giải quyết xung đột trên bus. Nếu A19 ở mức logic “1” thì khối nhớ trên hoạt động (khối nhớ dưới bị cấm) và ngược lại
  284. Bộ nhớ gồm hai khối nhớ 512KB AX 3F1C A19 7FFFF 36 BX 0023 A18 A18 7FFFE 25 CX 0000 : : 7FFFD 19 DX FCA1 A0 A0 : : 20023 13 D7 D7 CS XXXX 20022 7D : : SS XXXX 20021 12 D0 D0 DS 2000 20020 29 ES XXXX MEMR RD : : MEMW WR 00001 95 BP XXXX CS 00000 23 SP XXXX SI XXXX 7FFFF 12 DI XXXX A18 7FFFE 98 : 7FFFD 2C IP XXXX A0 : : 20023 33 D7 20022 45 : 20021 92 D0 20020 A3 RD : : WR 00001 D4 CS 00000 97
  285. Không gian địa chỉ bộ nhớ 1M A19 AAAA AAAA AAAA AAAA AAAA đến 1111 1111 1198 7654 3210 A0 9876 5432 1000 (HEX) 00000 0000 0000 0000 0000 0000 7FFFF 0111 1111 1111 1111 1111 80000 1000 0000 0000 0000 0000 FFFFF 1111 1111 1111 1111 1111
  286. Bộ nhớ gồm hai khối nhớ 512KB AX 3F1C A19 7FFFF 36 BX 0023 A18 A18 7FFFE 25 CX 0000 : : 7FFFD 19 DX FCA1 A0 A0 : : 20023 13 D7 D7 CS XXXX 20022 7D : : SS XXXX 20021 12 D0 D0 DS 2000 20020 29 ES XXXX MEMR RD : : MEMW WR 00001 95 BP XXXX Khi P xuất một địa CS 00000 23 SP XXXX chỉ từ 80000h00000h tođến SI XXXX FFFFFh7FFFFh, Bộ nhớ này 7FFFF 12 DI XXXX A18 7FFFE 98 hoạt động : 7FFFD 2C IP XXXX A0 : : 20023 33 D7 20022 45 : 20021 92 D0 20020 A3 RD : : WR 00001 D4 CS 00000 97
  287. Bộ nhớ gồm hai khối nhớ 512KB AX 3F1C A19 7FFFF 36 BX 0023 A18 A18 7FFFE 25 CX 0000 : : 7FFFD 19 DX FCA1 A0 A0 : : 20023 13 D7 D7 CS XXXX 20022 7D : : SS XXXX 20021 12 D0 D0 DS 2000 20020 29 ES XXXX MEMR RD : : MEMW WR 00001 95 BP XXXX CS 00000 23 SP XXXX SI XXXX 7FFFF 12 DI XXXX A18 7FFFE 98 : 7FFFD 2C IP XXXX A0 : : 20023 33 D7 20022 45 : 20021 92 D0 20020 A3 RD : : WR 00001 D4 CS 00000 97
  288. Thiết kế Bộ nhớ cho Hệ vi xử lý AX 3F1C A19 A19 7FFFF 36 BX 0023 A18 A18 A18 7FFFE 25 CX 0000 : : : 7FFFD 19 DX FCA1 A0 A0 A0 : : 20023 13 D7 D7 D7 CS XXXX 20022 7D : : : SS XXXX 20021 12 D0 D0 D0 DS 2000 20020 29 ES XXXX MEMR RD Ghép nối các chipRD nhớ: : MEMW WR riêng lẽ với BusWR hệ 00001 95 BP XXXX CS 00000 23 SP XXXX thống sao cho không SI XXXX xảy ra xung đột nhờ7FFFF 12 DI XXXX A18 7FFFE 98 mạch giải mã địa: chỉ7FFFD 2C IP XXXX bộ nhớ A0 : : 20023 33 D7 20022 45 : 20021 92 D0 20020 A3 RD : : WR 00001 D4 CS 00000 97
  289. Nếu bỏ đi khối nhớ bên dưới? AX 3F1C A19 7FFFF 36 BX 0023 A18 A18 7FFFE 25 CX 0000 : : 7FFFD 19 DX FCA1 A0 A0 : : 20023 13 D7 D7 CS XXXX 20022 7D : : SS XXXX 20021 12 D0 D0 DS 2000 20020 29 ES XXXX MEMR RD : : MEMW WR 00001 95 BP XXXX CS 00000 23 SP XXXX SI XXXX 7FFFF 12 DI XXXX A18 7FFFE 98 : 7FFFD 2C IP XXXX A0 : : 20023 33 D7 20022 45 : 20021 92 D0 20020 A3 RD : : WR 00001 D4 CS 00000 97
  290. Nếu bỏ đi khối nhớ bên dưới thì AX 3F1C A19 7FFFF 36 BX 0023 A18 A18 7FFFE 25 CX 0000 : : 7FFFD 19 DX FCA1 A0 A0 : : 20023 13 D7 D7 CS XXXX 20022 7D : : SS XXXX 20021 12 D0 D0 DS 2000 20020 29 ES XXXX MEMR RD : : MEMW Khi P xuất ra một địadịa WR 00001 95 BP XXXX chỉ từ 00000h đến CS 00000 23 SP XXXX chỉ từ 80000h đến 7FFFFh, Không có SI XXXX FFFFFh, Chip nhớ DI XXXX nàychip hoạt nhớ độngnào hoạt động! IP XXXX !
  291. Giải mã đầy đủ và không đầy đủ ◼ Giải mã đầy đủ (Full Decoding) • Tất cả các đường địa chỉ có nghĩa đều được sử dụng vào mạch giải mã • Mỗi ô nhớ chỉ có một địa chỉ vật lý duy nhất ◼ Giải mã không đầy đủ (Partial Decoding) • Không phải tất cả các đường địa chỉ có nghĩa đều được sử dụng vào mạch giải mã • Một ô nhớ có hơn một địa chỉ vật lý
  292. Giải mã đầy đủ AX 3F1C A19 7FFFF 36 BX 0023 A18 A18 7FFFE 25 CX 0000 : : 7FFFD 19 DX FCA1 A0 A0 : : 20023 13 D7 D7 CS XXXX 20022 7D : : SS XXXX 20021 12 D0 D0 DS 2000 20020 29 ES XXXX MEMR RD : : MEMW WR 00001 95 BP XXXX CS 00000 23 SP XXXX SI XXXX DI XXXX IP XXXX
  293. Giải mã đầy đủ A19 AAAA AAAA AAAA AAAA AAAA đến 1111 1111 1198 7654 3210 A0 9876 5432 1000 (HEX) 80000 1000 0000 0000 0000 0000 FFFFF 1111 1111 1111 1111 1111 A19 phải ở mức “1” thì chip nhớ mới hoạt động (được chọn)
  294. Giải mã đầy đủ A19 AAAA AAAA AAAA AAAA AAAA đến 1111 1111 1198 7654 3210 A0 9876 5432 1000 (HEX) 00000 0000 0000 0000 0000 0000 7FFFF 0111 1111 1111 1111 1111 Do đó, nếu vi xử lý phát ra một địa chỉ từ 00000h đến 7FFFFh (A19 ở mức logic “0”) chip nhớ sẽ không được chọn.
  295. Giải mã không đầy đủ AX 3F1C BX 0023 CX 0000 A19 DX FCA1 A18 A18 7FFFF 36 : : 7FFFE 25 CS XXXX A0 A0 7FFFD 19 SS XXXX : : DS 2000 D7 D7 : : ES XXXX : : 20023 13 D0 D0 20022 7D BP XXXX 20021 12 SP XXXX MEMR RD 20020 29 : : SI XXXX MEMW WR : : DI XXXX 00001 95 CS 00000 23 IP XXXX
  296. Giải mã không đầy đủ A19 AAAA AAAA AAAA AAAA AAAA đến 1111 1111 1198 7654 3210 A0 9876 5432 1000 (HEX) 00000 0000 0000 0000 0000 0000 7FFFF 0111 1111 1111 1111 1111 80000 1000 0000 0000 0000 0000 FFFFF 1111 1111 1111 1111 1111 A19 không có ý nghĩa với chip nhớ
  297. Giải mã không đầy đủ A19 AAAA AAAA AAAA AAAA AAAA đến 1111 1111 1198 7654 3210 A0 9876 5432 1000 (HEX) 00000 0000 0000 0000 0000 0000 7FFFF 0111 1111 1111 1111 1111 80000 1000 0000 0000 0000 0000 FFFFF 1111 1111 1111 1111 1111 Địa chỉ thực tế
  298. Giải mã không đầy đủ A19 AAAA AAAA AAAA AAAA AAAA đến 1111 1111 1198 7654 3210 A0 9876 5432 1000 (HEX) 00000 0000 0000 0000 0000 0000 7FFFF 0111 1111 1111 1111 1111 80000 1000 0000 0000 0000 0000 FFFFF 1111 1111 1111 1111 1111 Địa chỉ thực tế
  299. Bộ nhớ gồm 2 chip 512Kx8 A19 A18 A18 : : A0 A0 D7 D7 512KB : : #2 D0 D0 MEMR RD MEMW WR 8088 CS Minimum Mode A18 : A0 D7 512KB : #1 D0 RD WR CS
  300. Bộ nhớ chỉ có một chip 512Kx8 (Ver. 1) A19 A18 A18 : : A0 A0 D7 D7 : : 512KB D0 D0 MEMR RD MEMW WR 8088 CS Minimum Mode
  301. Bộ nhớ chỉ có một chip 512Kx8 (Ver. 2) A19 A18 A18 : : A0 A0 D7 D7 : : 512KB D0 D0 MEMR RD MEMW WR 8088 CS Minimum Mode
  302. Bộ nhớ chỉ có một chip 512Kx8 (Ver. 3) A19 A18 A18 : : A0 A0 D7 D7 : : 512KB D0 D0 MEMR RD MEMW WR 8088 CS Minimum Mode
  303. A17 : Bộ nhớ gồm 4 chip 256Kx8 A0 D7 256KB : D0 #4 RD WR A19 CS A18 A17 A17 : : A0 A0 D7 D7 256KB : : D0 D0 #3 MEMR RD MEMW WR 8088 CS Minimum Mode A17 : A0 D7 256KB : D0 #2 RD WR CS A17 : A0 D7 256KB : D0 #1 RD WR CS
  304. A17 : Bộ nhớ gồm 4 chip 256Kx8 A0 D7 256KB : D0 #4 RD WR A19 CS A18 A17 A17 : : A0 A0 D7 D7 256KB : : D0 D0 #3 MEMR RD MEMW WR 8088 CS Minimum Mode A17 : A0 D7 256KB : D0 #2 RD WR CS A17 : A0 D7 256KB : D0 #1 RD WR CS
  305. Dải địa chỉ của chip #1 A19 AAAA AAAA AAAA AAAA AAAA đến 1111 1111 1198 7654 3210 A0 9876 5432 1000 (HEX)
  306. Dải địa chỉ của chip #2 A19 AAAA AAAA AAAA AAAA AAAA đến 1111 1111 1198 7654 3210 A0 9876 5432 1000 (HEX)
  307. Dải địa chỉ của chip #3 A19 AAAA AAAA AAAA AAAA AAAA đến 1111 1111 1198 7654 3210 A0 9876 5432 1000 (HEX)
  308. Dải địa chỉ của chip #4 A19 AAAA AAAA AAAA AAAA AAAA đến 1111 1111 1198 7654 3210 A0 9876 5432 1000 (HEX)
  309. A17 : Bộ nhớ gồm 4 chip 256Kx8 A0 D7 256KB dùng các cổng logic : D0 #4 RD WR A19 CS A18 A17 A17 : : A0 A0 D7 D7 256KB : : D0 D0 #3 MEMR RD MEMW WR 8088 CS Minimum Mode A17 : A0 D7 256KB : D0 #2 RD WR CS A17 : A0 D7 256KB : D0 #1 RD WR CS
  310. A17 : Bộ nhớ gồm 4 chip 256Kx8 A0 D7 256KB dùng các cổng logic : D0 #4 RD WR A19 CS A18 A17 A17 : : A0 A0 D7 D7 256KB : : D0 D0 #3 MEMR RD MEMW WR 8088 CS Minimum Mode A17 : A0 D7 256KB : D0 #2 RD WR CS A17 : A0 D7 256KB : D0 #1 RD WR CS
  311. A17 : Bộ nhớ gồm 4 chip 256Kx8 A0 D7 256KB dùng một chip giải mã 2-4 : D0 #4 RD WR A19 I1 O3 CS A18 I0 A17 A17 : : A0 A0 D7 D7 256KB : : D0 D0 #3 MEMR RD MEMW WR 8088 O2 CS Minimum Mode A17 : A0 D7 256KB : D0 #2 RD WR O1 CS A17 : A0 D7 256KB : D0 #1 RD WR O0 CS
  312. A12 : Ghép nối các chip A0 A19 D7 8KB A18 : #? nhớ 8Kx8 với P A17 D0 A16 RD A15 WR 8088 A14 CS A13 A12 : A0 D7 : : D0 MEMR 8088 MEMW : Minimum Mode A12 : A0 D7 8KB : D0 #2 RD WR CS A12 : A0 D7 8KB : D0 #1 RD WR CS
  313. A12 : A0 A19 D7 8KB Bộ nhớ gồm 128 A18 : A17 D0 #128 chip 8Kx8 A16 RD A15 WR A14 CS A13 A12 : A0 D7 : : D0 MEMR 8088 MEMW : Minimum Mode A12 : A0 D7 8KB : D0 #2 RD WR CS A12 : A0 D7 8KB : D0 #1 RD WR CS
  314. A12 : A0 A19 D7 8KB Bộ nhớ gồm 128 A18 : A17 D0 #128 chip 8Kx8 A16 RD A15 WR A14 CS A13 A12 : A0 D7 : : D0 MEMR 8088 MEMW : Minimum Mode A12 : A0 D7 8KB : D0 #2 RD WR CS A12 : A0 D7 8KB : D0 #1 RD WR CS
  315. Dải địa chỉ của Chip #__ A19 AAAA AAAA AAAA AAAA AAAA đến 1111 1111 1198 7654 3210 A0 9876 5432 1000 (HEX)
  316. A12 : A0 A19 D7 8KB Bộ nhớ gồm 128 A18 : A17 D0 #128 chip 8Kx8 A16 RD A15 WR A14 CS A13 A12 : A0 D7 : : D0 MEMR 8088 MEMW : Minimum Mode A12 : A0 D7 8KB : D0 #2 RD WR CS A12 : A0 D7 8KB : D0 #1 RD WR CS
  317. Phát biểu bài toán ◼ Thiết kế bộ nhớ cho hệ vi xử lý 8088 thoả mãn các yêu cầu: ◼ ROM có dung lượng 2Kx8 chiếm dụng các địa chỉ từ FFFFFh trở xuống ◼ RWM có dung lượng 2Kx8 chiếm dụng các địa chỉ tiếp theo ngay sau ROM ◼ Chỉ được phép sử dụng: EPROM 2716 2Kx8, SRAM 4016 2Kx8 Chip giải mã 74LS138 và các cổng logic
  318. Bước 1: Vẽ bản đồ bộ nhớ cần thiết kế FFFFFh ROM 2K FF800h FF7FFh Các Địa chỉ biên RWM 2K FF000h Chưa sử dụng 00000h
  319. Bước 2: Chuyển các địa chỉ biên từ H sang B A19 AAAA AAAA AAAA AAAA AAAA đến 1111 1111 1198 7654 3210 A0 9876 5432 1000 (HEX) FF800 1111 1111 1000 0000 0000 FFFFF 1111 1111 1111 1111 1111
  320. Bước 2: Chuyển các địa chỉ biên từ H sang B A19 AAAA AAAA AAAA AAAA AAAA đến 1111 1111 1198 7654 3210 A0 9876 5432 1000 (HEX) FF000 1111 1111 0000 0000 0000 FF7FF 1111 1111 0111 1111 1111
  321. Nhận xét ◼ Khi các địa chỉ dành cho ROM được phát lên A-Bus: A19 – A12 = 1 và A11 = 1 ◼ Khi các địa chỉ dành cho RWM được phát lên A-Bus: A19 – A12 = 1 và A11 = 0
  322. Bước 3: Vẽ mạch giải mã địa chỉ bộ nhớ ◼ Ghép các chân dữ liệu của các chip nhớ với D-Bus ◼ Ghép các chân địa chỉ và các chân điều khiển: Khi vi xử lý truy cập các cổng I/O thì các chip nhớ bị cấm (Khi IO/M = 1) Khi vi xử lý truy cập bộ nhớ (IO/M = 0) thì chỉ có một chip nhớ làm việc ◼ Có thể có nhiều lời giải khác nhau
  323. 74LS138: Một chip giải mã 3-8 C Y0 U1 B Y1 74LS138 74LS138 A Y2 A2 Q7 A1 Q6 Y3 A0 Q5 74LS138 Q4 Y4 Q3 E3 Q2 E2 Q1 G1 Y5 E1 Q0 G2A Y6 G2B Y7
  324. Bộ nhớ cần thiết kế A11 : A0 A19 D7 A18 2Kx8 C Y0 : A17 D0 4016 : OE A0 B Y1 WE D7 CS : A Y2 D0 MEMR MEMW 74LS138 Y3 8088 Y4 Minimum Mode G1 Y5 A11 : G2A Y6 A0 D7 2Kx8 : G2B Y7 D0 2716 OE CE
  325. Bài giảng Kỹ thuật Vi xử lý Ngành Điện tử-Viễn thông Đại học Bách khoa Đà Nẵng của Hồ Viết Việt, Khoa ĐTVT Tài liệu tham khảo [1] Kỹ thuật vi xử lý, Văn Thế Minh, NXB Giáo dục, 1997 [2] Kỹ thuật vi xử lý và Lập trình Assembly cho hệ vi xử lý, Đỗ Xuân Tiến, NXB Khoa học & kỹ thuật, 2001
  326. Chương 5 Thiết kế các cổng I/O 5.1 I/O được phân vùng nhớ và I/O tách biệt - I/O được phân vùng nhớ (Memory Mapped I/O) - I/O tách biệt (Isolated I/O) 5.2 Các chip MSI dùng làm cổng I/O - Cổng ra - Cổng vào 5.3 Chip 8255 - Sơ đồ chân, Sơ đồ khối chức năng - Các mode hoạt động - Giải mã địa chỉ - Lập trình cho 8255
  327. 5.1 Cần phân biệt 2 kiểu thiết kế • I/O được phân vùng nhớ (Memory mapped I/O): - 1 cổng được xem như một ô nhớ - 1 cổng có địa chỉ 20-bit - được truy cập khi IO/M = 0 - không cần mạch giải mã địa chỉ riêng • I/O tách biệt (isolated I/O) - 1 cổng được xem đúng là 1 cổng - 1 cổng có địa chỉ 16-bit, 12-bit, 8-bit - được truy cập khi IO/M = 1 - cần mạch giải mã địa chỉ I/O riêng
  328. 5.2 Các chip MSI thường dùng làm cổng I/O • 74LS373 • 74LS374 • 74LS244 • 74LS245 • Khi số lượng cổng ít và cố định • Cách mắc mạch sẽ quyết định cho chip là cổng ra hay cổng vào và địa chỉ của nó
  329. Sử dụng 74LS245 làm cổng ra A19 A18 : A0 D7 A0 B0 D6 A1 B1 D5 A2 B2 D4 A3 B3 D3 A4 B4 D2 A5 74LS245 B5 8088 D1 A6 B6 Minimum D0 A7 B7 Mode E DIR 5V IOR IOW : mov al, 55 mov dx, F000 out dx, al A A A A A A A A A A A A A A A AIOW 1 1 1 1 1 1 9 8 7 6 5 4 3 2 1 0 : 5 4 3 2 1 0
  330. Sử dụng 74LS373 làm cổng ra A19 A18 : A0 D7 D0 Q0 D6 D1 Q1 D5 D2 Q2 D4 D3 Q3 D3 D4 Q4 D2 D5 74LS373 Q5 8088 D1 D6 Q6 Minimum D0 D7 Q7 Mode LE OE IOR IOW : mov al, 55 mov dx, F000 A A A A A A A A A A A A A A A AIOW out dx, al 1 1 1 1 1 1 9 8 7 6 5 4 3 2 1 0 5 4 3 2 1 0 :
  331. Sử dụng 74LS245 làm cổng vào A19 5V A18 : A0 D7 A0 B0 D6 A1 B1 D5 A2 B2 D4 A3 B3 D3 A4 B4 D2 A5 74LS245 B5 8088 D1 A6 B6 Minimum D0 A7 B7 Mode E DIR IOR IOW : mov dx, F000 in al, dx : A A A A A A A A A A A A A A A AIOR 1 1 1 1 1 1 9 8 7 6 5 4 3 2 1 0 5 4 3 2 1 0
  332. Cổng ra
  333. Cổng vào
  334. 5.3 Chip LSI thường dùng làm cổng I/O • PPI 8255 • Khi số lượng cổng I/O nhiều và không cố định • Cách mắc mạch sẽ quyết định địa chỉ cho các cổng còn vai trò của cổng sẽ được quyết định bởi phần mềm
  335. 8255 PPI
  336. Sơ đồ khối chức năng của 8255
  337. Các mode làm việc • Mode 0 - PA, PB, PCH (CU) và PCL (CL) - Có thể là Input hoặc Output - Việc Nhập hoặc Xuất dữ liệu là độc lập • Mode 1 - PA, PB - Có thể là Input hoặc Output - Việc Nhập hoặc Xuất dữ liệu là phụ thuộc vào một số bít của PC (các tín hiệu handshaking) • Mode 2 - PA - PA vừa là Input vừa là Output - Việc Nhập/Xuất dữ liệu với PA là phụ thuộc vào một số bít của PC (các tín hiệu handshaking)
  338. Nhóm làm việc • Nhóm A: PA và PCH • Nhóm B: PB và PCL • Định cấu hình làm việc cho 1 chip 8255: Gửi 1 Từ điều khiển định cấu hình đến thanh ghi điều khiển của chip đó • Lập/xoá một bit của PC: Gửi 1 Từ điều khiển Lập/Xoá bit đến thanh ghi điều khiển của chip đó
  339. Từ điều khiển định cấu hình làm việc cho một chip 8255
  340. Từ điều khiển lập/xoá bit cho một chip 8255
  341. The 8255 Programmable Peripheral Interface • Intel has developed several peripheral controller chips designed to support the 80x86 processor family. The intent is to provide a complete I/O interface in one chip. • 8255 PPI provides three 8 bit input ports in one 40 pin package making it more economical than 74LS373 and 74LS244 • The chip interfaces directly to the data bus of the processor, allowing its functions to be programmed; that is in one application a port may appear as an output, but in another, by reprogramming it as an input. This is in contrast with the 74LS373 and 74LS244 which are hard wired and fixed. 8255 Pins • PA0 - PA7: input, output, or bidirectional port • PB0 - PB7: input or output • PC0 - PC7: This 8 bit port can be all input or output. It can also be split into two parts, CU (PC4 - PC7) and CL (PC0 - PC3). Each can be used for input and output. • RD or WR – IOR and IOW of the system are connected to these two pins • RESET • A0, A1, and CS – CS selects the entire chip whereas A0 and A1 select the specific port (A, B, or C) or Control Register.
  342. Giải mã địa chỉ cho 8255
  343. Mode 0 - Simple input/output • Simple I/O mode: any of the ports A, B, CL, and CU can be programmed as input or output. • Example: Configure port A as input, B as output, and all the bits of port C as output assuming a base address of 50h • Control word should be 1001 0000b = 90h MOV AL, 90h OUT 53h,AL IN AL, 50h OUT 51h, AL OUT 52h, AL Mode 1: I/O with Handshaking Capability • Handshaking refers to the process of communicating back and forth between two intelligent devices • Example. Process of communicating with a printer – a byte of data is presented to the data bus of the printer – the printer is informed of the presence of a byte of data to be printed by activating its strobe signal – whenever the printer receives the data it informs the sender by activating an output signal called ACK – the ACK signal initiates the process of providing another byte of data to the printer • 8255 in mode 1 is equipped with resources to handle handshaking signals
  344. Mode 1 Strobed Output Signals • OBFa (output buffer full for port A) – indicates that the CPU has written a byte of data into port A – must be connected to the STROBE of the receiving equipment • ACKa (acknowledge for port A) – through ACK, 8255 knows that data at port A has been picked up by the receiving device – 8255 then makes OBFa high to indicate that the data is old now. OBFa will not go low until the CPU writes a new byte of data to port A. • INTRa (interrupt request for port A) – it is the rising edge of ACK that activates INTRa by making it high. INTRa is used to get the attention of the microprocessor. – it is important that INTRa is high only if INTEa, OBFa, ACKa are all high – it is reset to zero when the CPU writes a byte to port A
  345. Mode 1 Input Ports with Handshaking Signals • STB – When an external peripheral device provides a byte of data to an input port, it informs the 8255 through the STB pin. STB is of limited duration. • IBF (Input Buffer Full) – In response to STB, the 8255 latches into its internal register the data present at PA0-PA7 or PB0-PB7. – Through IBF it indicates that it has latched the data but it has not been read by the CPU yet. – To get the attention of the CPU, it IBF activates INTR • INTR – Falling edge of RD makes INTR low – The RD signal from the CPU is of limited duration and when it goes high the 8255 in turn makes IBF inactive by setting it low. – IBF in this way lets the peripheral know that the byte of data was latched by the 8255 and read into the CPU as well.
  346. Lập trình cho 8255
  347. Lời giải
  348. Lập trình cho 8255 B A
  349. Lời giải
  350. Tạo chuỗi xung bằng phần mềm
  351. Bài giảng Kỹ thuật Vi xử lý Ngành Điện tử-Viễn thông Đại học Bách khoa Đà Nẵng của Hồ Viết Việt, Khoa ĐTVT Tài liệu tham khảo [1] Kỹ thuật vi xử lý, Văn Thế Minh, NXB Giáo dục, 1997 [2] Kỹ thuật vi xử lý và Lập trình Assembly cho hệ vi xử lý, Đỗ Xuân Tiến, NXB Khoa học & kỹ thuật, 2001
  352. Chương 6 Các kiểu I/O 6.1 Thăm dò (Polling) 6.2 I/O điều khiển bằng ngắt (Interrupt) - 6.3 DMA (Direct Memory Access)
  353. Thăm dò A19 5V A18 : A0 D7 A0 B0 D6 A1 B1 D5 A2 B2 D4 A3 B3 D3 A4 B4 D2 A5 74LS245 B5 8088 D1 A6 B6 Minimum D0 A7 B7 Mode E DIR IOR IOW mov dx, F000 L1: in al, dx cmp al, FF je L1 A A A A A A A A A A A A A A A AIOR : 1 1 1 1 1 1 9 8 7 6 5 4 3 2 1 0 5 4 3 2 1 0 :
  354. A19 5V A18 : The Circuit A0 D7 A0 B0 D6 A1 B1 D5 A2 B2 D4 A3 B3 D3 A4 B4 D2 A5 74LS245 B5 8088 D1 A6 B6 Minimum D0 A7 B7 Mode E DIR D0 Q0 D1 Q1 IOR D2 Q2 IOW D3 Q3 D4 Q4 D574LS373Q5 D6 Q6 D7 Q7 LE OE A A A A A A A A A A A A A A A AIOR 1 1 1 1 1 1 9 8 7 6 5 4 3 2 1 0 5 4 3 2 1 0 AAAAAAAAAAAAAAAAIOW 1111119876543210 543210
  355. Bài toán • Chương trình tạo ra hiệu ứng “LED chạy”: - Ban đầu LED chạy từ trên xuống - Khi nhấn phím thấp nhất thì LED thay đổi hướng chạy - Khi nhấn phím cao nhất thì chương trình kết thúc
  356. Chương trình mov dx, F000 L4: mov bl, al mov ah, 00 in al, dx mov al, 01 cmp al, FF L1: out dx, al je L6 mov cx, FFFF L2: dec cx test al, 01 jnz L2 jnz L5 cmp ah, 00 xor ah, FF jne L3 jmp L6 rol al, 1 L5: test al, 80 cmp al, 01 jz L7 jne L1 L6: mov al, bl jmp L4 jmp L1 L3: ror al, 1 L7: cmp al, 80 jne L1
  357. Khuyết điểm của thăm dò • Tốn nhiều thời gian • NgườI sử dụng có thể nhả phím trước khi lệnh in al, dx được thực hiện, do đó bộ vi xi xử lý sẽ không biết rằng ngườI sử dụng đã nhấn phím • Làm sao để khắc phục các khuyết điểm đó?
  358. Khuyết điểm của thăm dò mov dx, F000 L4: mov bl, al mov ah, 00 in al, dx mov al, 01 cmp al, FF L1: out dx, al je L6 mov cx, FFFF test al, 01 L2: dec cx jnz L5 jnz L2 xor ah, FF cmp ah, 00 jne L3 jmp L6 rol al, 1 L5: test al, 80 cmp al, 01 jz L7 jne L1 L6: mov al, bl jmp L4 jmp L1 L3: ror al, 1 L7: cmp al, 80 jne L1
  359. Ngắt là gì?
  360. Thăm dò instruction While studying, I’ll Input Memory check the bucket every Device 5 minutes to see if it is already full so that I can transfer the content of the bucket to the drum. P THĂM DÒ
  361. Ngắt instruction I’ll just study. When the Input Memory speaker starts playing Device music it means that the bucket is full. I can then transfer the content of the bucket to the drum. Interrupt request P INTERRUPT
  362. Interrupt- Ngắt • Bộ vi xử lý không cần phải kiểm tra tính sẵn sàng của thiết bị I/O. • Các thiết bị I/O sẽ báo cho vi xử lý biết khi chúng đã sẵn sàng • Bộ vi xử lý có thể làm công việc khác khi thiết bị I/O không có nhu cầu trao đổI dữ liệu
  363. Interrupt- Ngắt • Một số thuật ngữ cần nhớ: – Yêu cầu ngắt – Đầu vào ngắt – Đầu ra chấp nhận ngắt – Chương trình con phục vụ ngắt – Vector ngắt – Số ngắt – Bảng các vector ngắt
  364. Interrupt Service Routine (ISR) - Chương trình con phục vụ ngắt Interrupt vector - Vector ngắt • Là chương trình được thực hiện khi có một yêu cầu ngắt được chấp nhận • Kết thúc bằng lệnh IRET • Địa chỉ của chương trình con phục vụ ngắt • Bao gồm 4 byte: – 2 byte cho địa chỉ Offset – 2 byte cho địa chỉ Segment
  365. Interrupt Vector Number Số ngắt • Là một số được dùng để phân biệt các yếu cầu ngắt. Bởi vì có thể có nhiều hơn một thiết bị phát yêu cầu ngắt đến bộ vi xử lý cho nên để cho bộ vi xử lý có thể nhận biết được thiết bị thì mỗI thiết bị sẽ được gán cho một số ngắt • Trong hệ thống 8088, co thể có đến 256 số ngắt (từ 00h đến FFh)
  366. Interrupt Vector Table Bảng các vector ngắt • Là vùng nhớ được dành riêng để lưu trữ các vector ngắt • Có thể xem như là một mảng các vector ngắt – Mảng này có 256 phần tử – Mỗi phần tử gồm 4 byte: 2 byte đầu lưu địa chỉ offset, 2 byte sau lưu địa chỉ segment – Các vector ngắt được lưu trữ theo trật tự tăng dần của số ngắt
  367. Bảng các vector ngắt
  368. Phản ứng của vi xử lý khi không có ngắt • Khi bật công tấc nguồn hoặc nhấn nút reset. 1. Bộ vi xử lý được khởi động: – (IP) = 0000h – (CS) = FFFFh – IF = 0 2. Bộ vi xử lý tìm và lấy 1 byte lệnh. 3. IP tăng lên 1. 4. Bộ vi xử lý giải mã và thực hiện lệnh nếu tất cả các byte lệnh của một lệnh đã được lấy. 5. Quay trỏ lại bước 2.
  369. Phản ứng của vi xử lý khi có ngắt • Thiết bị I/O đưa yêu cầu ngắt đến bộ vi xử lý bằng cách làm cho đầu vào ngắt INTR chuyển sang mức cao. 6. Bộ vi xử lý sẽ hoàn thành lệnh đang thực hiện trước khi chấp nhận ngắt 7. Bộ vi xử lý chấp nhận ngắt bằng cách đưa ra tín hiệu chấp nhận ngắt ở mức thấp từ chân INTA. Lúc này thiết bị I/O sẽ làm cho tín hiệu ở INTR chuyển về mức thấp. 8. Thiết bị I/O sẽ đưa số ngắt được gán cho nó đến bộ vi xử lý thông qua D-Bus. Bộ vi xử lý sẽ lưu trữ số ngắt này vào một thanh ghi tạm thời
  370. Phản ứng của vi xử lý khi có ngắt 9. Bộ vi xử lý lưu giá trị hiện thời của thanh ghi cờ vào stack. 10. Bộ vi xử lý xoá cờ ngắt 11. Bộ vi xử lý lưu giá trị hiện thời của CS vào stack. 12. Bộ vi xử lý lưu giá trị hiện thờI của IP vào stack. 13. Bộ vi xử lý nhân số ngắt với 4. Kết quả này chính là địa chỉ của nơi lưu trữ vector ngắt tương ứng trong bảng các vector ngắt. Hai byte đầu tiên của vector ngắt được copy vào IP và hai byte tiếp theo được copy vào CS. 14. Quay trở về bước 2.
  371. 8088 và một thiết bị ra đơn giản A19 A18 : A0 D7 D0 Q0 D6 D1 Q1 D5 D2 Q2 D4 D3 Q3 D3 D4 Q4 D2 D5 74LS373 Q5 8088 D1 D6 Q6 Minimum D0 D7 Q7 Mode LE OE IOR IOW A A A A A A A A A A A A A A A AIOW 1 1 1 1 1 1 9 8 7 6 5 4 3 2 1 0 5 4 3 2 1 0
  372. 8088 và một thiết bị vào đơn giản A19 5V A18 : A0 D7 A0 B0 D6 A1 B1 D5 A2 B2 D4 A3 B3 D3 A4 B4 D2 A5 74LS245 B5 8088 D1 A6 B6 Minimum D0 A7 B7 Mode E DIR IOR IOW A A A A A A A A A A A A A A A AIOR 1 1 1 1 1 1 9 8 7 6 5 4 3 2 1 0 5 4 3 2 1 0
  373. 8088 và thiết bị vào hoạt động theo cơ chế ngắt A19 5V A18 : A0 D7 A7 B7 D6 A6 B6 D5 A5 B5 D4 A4 B4 D3 A3 B3 D2 A2 74LS245 B2 8088 D1 A1 B1 Minimum D0 A0 B0 Mode E DIR IOR IOW INTR INTA INTR A A A A A A A A A A A A A A A AIOR 1 1 1 1 1 1 9 8 7 6 5 4 3 2 1 0 5 4 3 2 1 0
  374. 8088 và một thiết bị vào hoạt động theo cơ chế ngắt A19 5V A18 : A0 D7 A7 B0 D6 A6 B1 D5 A5 B2 D4 A4 B3 D3 A3 B4 D2 A2 74LS245 B5 8088 D1 A1 B6 Minimum D0 A0 B7 Mode E DIR IOR IOW 5V INTR INTA 5V D set Q INTR clr Q A A A A A A A A A A A A A A A A IOR 1 1 1 1 1 1 9 8 7 6 5 4 3 2 1 0 5 4 3 2 1 0 5V
  375. 8088 và một thiết bị vào hoạt động theo cơ chế ngắt A19 5V A18 : A0 D7 A7 B7 D6 A6 B6 D5 A5 B5 D4 A4 B4 D3 A3 B3 D2 A2 74LS245 B2 8088 D1 A1 B1 Minimum D0 A0 B0 Mode E DIR IOR IOW 5V INTR INTA 5V D set Q INTR clr Q A A A A A A A A A A A A A A A AIOR 1 1 1 1 1 1 9 8 7 6 5 4 3 2 1 0 5 4 3 2 1 0 INTA
  376. 8088 và một thiết bị vào hoạt động theo cơ chế ngắt A19 5V A18 : 5V A0 D7 A7 B7 D7 A7 B7 D6 A6 B6 D6 A6 B6 D5 A5 B5 D5 A5 B5 D4 A4 B4 D4 A4 B4 D3 A3 B3 D3 A3 B3 D2 A2 74LS245 B2 D2 A2 74LS245 B2 D1 A1 B1 8088 D1 A1 B1 D0 A0 B0 Minimum D0 A0 B0 Mode INTA E E DIR DIR IOR IOW 5V INTR INTA 5V D set Q INTR clr Q A A A A A A A A A A A A A A A AIOR 1 1 1 1 1 1 9 8 7 6 5 4 3 2 1 0 5 4 3 2 1 0 INTA
  377. 8088 và một thiết bị vào hoạt động theo cơ chế ngắt A19 5V A18 INT 3 : 5V A0 D7 A7 B7 D7 A7 B7 D6 A6 B6 D6 A6 B6 D5 A5 B5 D5 A5 B5 D4 A4 B4 D4 A4 B4 D3 A3 B3 D3 A3 B3 D2 A2 74LS245 B2 D2 A2 74LS245 B2 D1 A1 B1 8088 D1 A1 B1 D0 A0 B0 Minimum D0 A0 B0 Mode INTA E E DIR DIR IOR IOW 5V INTR INTA 5V D set Q INTR clr Q A A A A A A A A A A A A A A A AIOR 1 1 1 1 1 1 9 8 7 6 5 4 3 2 1 0 5 4 3 2 1 0 INTA RESET
  378. A19 5V A18 : A0 The Circuit D7 A0 B0 D6 A1 B1 D5 A2 B2 D4 A3 B3 D3 A4 B4 D2 A5 74LS245 B5 8088 D1 A6 B6 Minimum D0 A7 B7 Mode E DIR IOR D0 Q0 IOW D1 Q1 D2 Q2 D3 Q3 D4 Q4 D574LS373Q5 D6 Q6 D7 Q7 A A A A A A A A A A A A A A A AIOR 1 1 1 1 1 1 9 8 7 6 5 4 3 2 1 0 LE OE 5 4 3 2 1 0 AAAAAAAAAAAAAAAAIOW 1111119876543210 543210