Bài giảng Kỹ thuật vi xử lý - Phạm Văn Thuận

pdf 415 trang ngocly 160
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật vi xử lý - Phạm Văn Thuận", để 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:

  • pdfbai_giang_ky_thuat_vi_xu_ly_pham_van_thuan.pdf

Nội dung text: Bài giảng Kỹ thuật vi xử lý - Phạm Văn Thuận

  1. Môn học: KỸ THUẬT VI XỬ LÝ GV: Phạm Văn Thuận Bộ môn Kỹ thuật Máy tính Khoa CNTT- ĐH BKHN email: thuanpv@it-hut.edu.vn 1
  2. Lưu ý của tác giả § Bài giảng có sử dụng một số nội dung và hình ảnh trong “Bài giảng kỹ thuật Vi xử lý” của tác giả Nguyễn Kim Khánh và Nguyễn Phú Bình, bộ môn Kỹ thuật máy tính, Khoa Công nghệ thông tin, Đại học Bách Khoa Hà Nội. § Yêu cầu người học không chỉnh sửa nội dung của bài giảng này nếu chưa được sự cho phép của tác giả. 2 Kỹ thuật Vi xử lý
  3. Mục tiêu môn học § Sau khi kết thúc môn học này, sinh viên có thể • Trình bày được kiến trúc phần cứng và phần mềm của họ vi xử lý 80x86, tập trung chi tiết vào các bộ vi xử lý 8088/8086 của Intel • Lập trình hợp ngữ sử dụng tập lệnh của 8088/8086 • Trình bày được cách phối ghép vi xử lý 8088/8086 với bộ nhớ và hệ thống vào ra 3 Kỹ thuật Vi xử lý
  4. Tài liệu tham khảo chính 1. Văn Thế Minh - Kỹ thuật vi xử lý - 1997. 2. Walter A. Triebel, Avtar Singh - The 8088 and 8086 Microprocessors: Programming, Interfacing, Software, Hardware and Applications - 1997. 3. Ytha Yu, Charles Marut - Assembly Language Programming and Organization of the IBM-PC - 1992. (Bản dịch: Quách Tuấn Ngọc) 4. Địa chỉ download: 4 Kỹ thuật Vi xử lý
  5. Nội dung môn học Chương 1. Giới thiệu chung về vi xử lý và máy vi tính Chương 2. Kiến trúc bộ vi xử lý 8088/8086 Chương 3. Lập trình hợp ngữ trên PC Chương 4. Bộ vi xử lý 8088 và nối ghép với bộ nhớ Chương 5. Nối ghép vào ra với 8088 5 Kỹ thuật Vi xử lý
  6. CHƯƠNG 1 Giới thiệu chung về vi xử lý và máy vi tính 6 Kỹ thuật Vi xử lý
  7. Nội dung chương 1 1.1. Máy tính và phân loại máy tính 1.2. Sự phát triển của vi xử lý 1.3. Kiến trúc chung của một hệ thống máy tính 7 Kỹ thuật Vi xử lý
  8. Máy tính và phân loại máy tính Định nghĩa máy tính: § Thiết bị điện tử thực hiện các công việc sau: • Nhận thông tin vào • Xử lý thông tin theo chương trình được nhớ sẵn bên trong • Đưa thông tin ra § Þ Máy tính hoạt động theo chương trình. 8 Kỹ thuật Vi xử lý
  9. Máy tính và phân loại máy tính Mô hình máy tính cơ bản 9 Kỹ thuật Vi xử lý
  10. Phân loại máy tính Phân loại truyền thống: § Máy vi tính (Microcomputer) § Máy tính nhỏ (Minicomputer) § Máy tính lớn (Mainframe Computer) § Siêu máy tính (Supercomputer) Tiêu chí phân loại: -Hiệu năng tính toán -Kích thước -Giá thành - 10 Kỹ thuật Vi xử lý
  11. Phân loại máy tính Phân loại hiện đại: § Máy tính cá nhân (Personal Computer) § Máy chủ (Server) § Máy tính nhúng (Embedded Computer) Tiêu chí phân loại Phân loại theo chức năng 11 Kỹ thuật Vi xử lý
  12. Máy tính cá nhân § Là loại máy tính phổ biến nhất đối với người dùng thông thường. § Thiết kế theo hướng tối ưu cả về giá thành và hiệu năng § Một số loại: • Máy tính để bàn (Desktop) • Máy tính xách tay (Notebook) • Máy trạm làm việc (Workstation) § Giá thành: từ vài trăm đến vài nghìn USD 12 Kỹ thuật Vi xử lý
  13. Máy tính cá nhân 13 Kỹ thuật Vi xử lý
  14. Máy Server Máy chủ (Server) § Thực chất là máy phục vụ § Dùng trong mạng máy tính theo mô hình Client/Server § Tốc độ và hiệu năng tính toán cao § Dung lượng bộ nhớ lớn § Độ tin cậy cao § Giá thành: từ hàng chục nghìn đến hàng triệu USD. 14 Kỹ thuật Vi xử lý
  15. Máy server 15 Kỹ thuật Vi xử lý
  16. Máy tính nhúng Máy tính nhúng (Embedded Computer) § Được đặt trong thiết bị khác (bao gồm cả phần cứng và các kết cấu cơ khí) để điều khiển thiết bị đó làm việc § Được thiết kế chuyên dụng Ví dụ: • Điện thoại di động • Bộ điều khiển trong máy giặt, điều hòa nhiệt độ • Một số thiết bị mạng: Switch, Router, § Giá thành: từ vài USD đến hàng trăm ngàn USD 16 Kỹ thuật Vi xử lý
  17. Máy tính nhúng 17 Kỹ thuật Vi xử lý
  18. Nội dung chương 1 1.1. Máy tính và phân loại máy tính 1.2. Sự phát triển của vi xử lý 1.3. Kiến trúc chung của một hệ thống máy tính 18 Kỹ thuật Vi xử lý
  19. Sự phát triển của vi xử lý § Bộ vi xử lý (Microprocessor): vi mạch tích hợp thực hiện chức năng của bộ xử lý trung tâm (CPU). § Thế hệ 4 bit (1971÷1973): • Intel 4004 (bộ VXL đầu tiên), 4040 § Thế hệ 8 bit (1974÷1977): • Intel 8080, 8085 • Motorola 6800 • Zilog Z80 19 Kỹ thuật Vi xử lý
  20. Sự phát triển của vi xử lý § Thế hệ 16 bit (1979÷1982): • Intel 8086, 8088, 80186, 80286 • Motorola 68000, 68010 üHãng IBM sử dụng 8088 để thiết kế máy IBM-PC (1981) üHãng Apple sử dụng 68000 để thiết kế máy Macintosh (1983) • Zilog Z8000 20 Kỹ thuật Vi xử lý
  21. Sự phát triển của vi xử lý § Thế hệ 32 bit (1983÷1991): • Intel 80386, 80486, Pentium, PII, PIII và P4 (sau này) • Motorola 68020, 68030, 68040, 68060 • Kiến trúc RISC (máy tính với tập lệnh rút gọn): üPower PC üSPARC • Hiện nay: bộ xử lý lõi kép (Intel Core Duo, ) § Thế hệ 64 bit (1992÷nay): • Intel: Itanium, Pentium D, Xeon, Intel Core 2, • Digital ALPHA • Power PC • Super SPARC 21 Kỹ thuật Vi xử lý
  22. Nội dung chương 1 1.1. Máy tính và phân loại máy tính 1.2. Sự phát triển của vi xử lý 1.3. Kiến trúc chung của một hệ thống máy tính 22 Kỹ thuật Vi xử lý
  23. Kiến trúc phần cứng §Bộ vi xử lý ® CPU §Bộ nhớ bán dẫn (ROM, RAM) ® bộ nhớ chính §Hệ thống vào-ra: gồm mạch nối ghép vào-ra và các thiết bị ngoại vi §Các đường bus truyền thông tin Sơ đồ khối kiến trúc phần cứng 23 Kỹ thuật Vi xử lý
  24. Kiến trúc phần cứng Thiết bị vào-ra không nối trực tiếp với bus hệ thống mà thông qua các cổng vào-ra. 24 Kỹ thuật Vi xử lý
  25. Bộ xử lý trung tâm (CPU) § Chức năng: • Điều khiển hoạt động của toàn bộ hệ thống • Xử lý dữ liệu § Nguyên tắc hoạt động cơ bản: bộ VXL hoạt động theo chương trình nằm trong bộ nhớ bằng cách: • Nhận lần lượt từng lệnh (dưới dạng mã hóa nhị phân) từ bộ nhớ, • Sau đó tiến hành giải mã lệnh và phát các tín hiệu điều khiển thực thi lệnh. • Trong quá trình thực thi lệnh, bộ vi xử lý có thể trao đổi dữ liệu với bộ nhớ hay hệ thống vào-ra. 25 Kỹ thuật Vi xử lý
  26. Các thành phần chính của bộ xử lý trung tâm 26 Kỹ thuật Vi xử lý
  27. Các thành phần của bộ xử lý trung tâm § Đơn vị điều khiển (Control Unit): • Điều khiển nhận lệnh từ bộ nhớ • Giải mã lệnh và phát tín hiệu thực hiện lệnh • Nhận các tín hiệu yêu cầu từ bên ngoài và đáp ứng các yêu cầu đó § Đơn vị số học và logic (Arithmetic and Logic Unit): • Số học: cộng, trừ, nhân, chia, tăng, giảm, đảo dấu, so sánh, • Logic: AND, OR, XOT, NOT, dịch và quay bit 27 Kỹ thuật Vi xử lý
  28. Các thành phần của bộ xử lý trung tâm § Tập thanh ghi (Registers): • Chứa các thông tin tạm thời phục vụ cho hoạt động của bộ vi xử lý üThông tin về địa chỉ üDữ liệu tạm thời üThông tin trạng thái • Mỗi bộ vi xử lý có từ vài chục đến vài trăm thanh ghi § Đơn vị nối ghép bus (Bus Interface Unit): • Nối ghép các thành phần bên trong bộ vi xử lý với bên ngoài. 28 Kỹ thuật Vi xử lý
  29. Bộ nhớ chính § Chức năng: chứa các chương trình và dữ liệu mà bộ vi xử lý có khả năng trao đổi trực tiếp. § Được tổ chức thành các ngăn nhớ (thường theo Byte) • Mỗi ngăn nhớ có một địa chỉ xác định. • Bộ vi xử lý muốn trao đổi thông tin với ngăn nhớ nào thì phải biết địa chỉ của ngăn nhớ đó. 29 Kỹ thuật Vi xử lý
  30. Bộ nhớ chính (tiếp) § Bộ nhớ chính được thiết kế trên cơ sở gồm: • ROM (Read Only Memory): üBộ nhớ không khả biến. üChứa các chương trình và dữ liệu cố định với hệ thống. • RAM (Random Access Memory): üBộ nhớ khả biến. üChứa các thông tin tạm thời. 30 Kỹ thuật Vi xử lý
  31. Hệ thống vào-ra § Chức năng: Trao đổi thông tin giữa hệ vi xử lý với thế giới bên ngoài. § Các thành phần chính: • Các thiết bị ngoại vi: üChuyển đổi dữ liệu giữa bên trong và bên ngoài hệ vi xử lý. • Các mạch nối ghép vào-ra: üNối ghép giữa thiết bị ngoại vi với hệ vi xử lý. üTrên mạch nối ghép vào-ra có các cổng vào-ra (I/O Port). üMỗi cổng vào-ra cũng được đánh một địa chỉ xác định. üThiết bị ngoại vi được kết nối và trao đổi dữ liệu với hệ vi xử lý thông qua các cổng vào-ra. 31 Kỹ thuật Vi xử lý
  32. Bus truyền thông tin § Bus: tập hợp các đường kết nối dùng để vận chuyển thông tin giữa các thành phần. § Độ rộng bus: là số đường dây của bus có thể truyền thông tin đồng thời. Tính bằng bit. § Phân loại bus theo chức năng: • Bus địa chỉ (Address Bus) • Bus dữ liệu (Data Bus) • Bus điều khiển (Control Bus) 32 Kỹ thuật Vi xử lý
  33. Bus địa chỉ § Chức năng: vận chuyển địa chỉ từ bên trong bộ vi xử lý đến bộ nhớ chính hay mạch nối ghép vào-ra để xác định ngăn nhớ hay cổng vào-ra cần trao đổi thông tin. § Độ rộng bus địa chỉ: xác định dung lượng bộ nhớ cực đại của hệ thống. § Nếu độ rộng bus địa chỉ là N bit (gồm N đường dây AN-1, AN-2, , A2, A1, A0) thì: ® có khả năng vận chuyển được N bit địa chỉ đồng thời ® có khả năng đánh địa chỉ tối đa được 2N ngăn nhớ = 2N Byte ® gọi là không gian địa chỉ bộ nhớ. 33 Kỹ thuật Vi xử lý
  34. Ví dụ § Độ rộng bus địa chỉ của một số bộ vi xử lý của Intel • 8088/8086 : N = 20 bit ® KGĐCBN = 220 Byte = 1 MB • 80286 : N = 24 bit ® KGĐCBN = 224 Byte = 16 MB • 80386, 80486, Pentium : N = 32 bit ® KGĐCBN = 232 Byte = 4 GB • Pentium II, III, 4 : N = 36 bit ® KGĐCBN = 236 Byte = 64 GB 34 Kỹ thuật Vi xử lý
  35. Bus dữ liệu § Chức năng: • Vận chuyển lệnh từ bộ nhớ chính đến bộ vi xử lý. • Vận chuyển dữ liệu giữa các thành phần của hệ vi xử lý với nhau. § Độ rộng bus dữ liệu: Xác định số bit dữ liệu có thể được trao đổi đồng thời. • Nếu độ rộng bus dữ liệu là M bit (gồm M đường dây DM-1, DM-2, , D2, D1, D0) thì nghĩa là đường bus dữ liệu đó có thể vận chuyển đồng thời được M bit dữ liệu. • M thường là 8, 16, 32, 64 bit. 35 Kỹ thuật Vi xử lý
  36. Ví dụ § Độ rộng bus dữ liệu của một số bộ vi xử lý của Intel: • 8088 : M = 8 bit • 8086, 80286 : M = 16 bit • 80386, 80486 : M = 32 bit • Các bộ xử lý Pentium : M = 64 bit 36 Kỹ thuật Vi xử lý
  37. Bus điều khiển § Chức năng: vận chuyển các tín hiệu điều khiển § Các loại tín hiệu điều khiển: • Các tín hiệu điều khiển phát ra từ bộ vi xử lý để điều khiển bộ nhớ chính hay mạch nối ghép vào- ra. • Các tín hiệu yêu cầu từ bộ nhớ chính hay mạch nối ghép vào-ra gửi đến bộ vi xử lý. 37 Kỹ thuật Vi xử lý
  38. Kiến trúc phần mềm § Tập lệnh (Instruction Set) § Ngôn ngữ máy § Hợp ngữ (Assembly Language) § Ngôn ngữ lập trình cấp cao 38 Kỹ thuật Vi xử lý
  39. Tập lệnh (Instruction Set) § Mỗi bộ vi xử lý có khả năng thực hiện được một tập hữu hạn các thao tác xác định (gọi là tập lệnh) § Mỗi lệnh là một chuỗi số nhị phân thực hiện một công việc cụ thể § Mỗi lệnh có cấu trúc như sau • Mã lệnh (Operation Code): cho biết chức năng của lệnh • Tham chiếu toán hạng: cho biết nơi chứa toán hạng mà lệnh tác động Mã lệnh Tham chiếu toán hạng 39 Kỹ thuật Vi xử lý
  40. Tập lệnh (tiếp) § Tập lệnh được mô tả thông qua các từ gợi nhớ: ADD (lệnh cộng), SUB (lệnh trừ), INC (lệnh tăng 1) § Ví dụ: • Lệnh hợp ngữ: MOV AH,1 • Mã máy tương ứng: 0000 0001 1011 0100 40 Kỹ thuật Vi xử lý
  41. Ngôn ngữ máy § Ngôn ngữ chương trình duy nhất mà máy tính hiểu được là ngôn ngữ máy (chuỗi số nhị phân mã hóa cho một thao tác nào đó của bộ vi xử lý) ® Lập trình trực tiếp bằng ngôn ngữ máy rất vất vả và dễ xảy ra sai sót. 41 Kỹ thuật Vi xử lý
  42. Hợp ngữ (Assembly Language) § Là ngôn ngữ lập trình gần với ngôn ngữ máy nhất. § Sử dụng các kí hiệu gợi nhớ để biểu diễn các lệnh máy. § Chương trình dịch hợp ngữ sang ngôn ngữ máy gọi là hợp dịch (Assembler). § VD: • Ngôn ngữ máy (của bộ vi xử lý Intel 8088): 00000101 00000100 00000000 ; cộng 4 vào AX • Hợp ngữ: ADD AX, 4 ; cộng 4 vào AX 42 Kỹ thuật Vi xử lý
  43. Ngôn ngữ lập trình bậc cao § Cho phép người lập trình viết các chương trình gần với ngôn ngữ tự nhiên hơn so với hợp ngữ. § Chương trình viết bằng NNLT bậc cao gọi là chương trình nguồn (source code). § Chương trình chuyển từ chương trình nguồn sang ngôn ngữ máy gọi là chương trình dịch. • Chương trình biên dịch (compiler): üDịch toàn bộ chương trình nguồn sang mã máy. üNếu chương trình nguồn có lỗi thì sẽ ngừng việc biên dịch. • Chương trình thông dịch (interpreter): üDịch từng lệnh của chương trình nguồn (và thực hiện) üNếu chương trình nguồn có lỗi thì vẫn thực hiện CT cho đến khi gặp lỗi. § Ngôn ngữ lập trình trực quan (visual programming language): giúp việc xây dựng chương trình nhanh chóng và trực quan hơn. 43 Kỹ thuật Vi xử lý
  44. Phần mềm hệ thống § Là các chương trình điều khiển chung của hệ thống, bao gồm: • Các chương trình điều khiển được cài đặt sẵn trong bộ nhớ ROM của hệ vi xử lý. • Hệ điều hành: tập hợp các chương trình, đảm bảo: üĐiều khiển việc thực thi các chương trình khác. üQuản lý, phân phối tài nguyên của hệ thống. üĐiều khiển các thiết bị và quá trình vào-ra. üCung cấp giao diện người dùng. • Các chương trình tiện ích: hỗ trợ thêm cho hệ điều hành. 44 Kỹ thuật Vi xử lý
  45. Phần mềm ứng dụng § Là các chương trình chạy trên một hệ điều hành cụ thể, phục vụ cho các ứng dụng cụ thể. § Có nhiều loại. § Ví dụ: một số phần mềm ứng dụng chạy trên hệ điều hành Microsoft Windows: • Ứng dụng văn phòng: Microsoft Word, Excel, • Ứng dụng Internet: Internet Explorer, Outlook Express, Opera, • Ứng dụng xử lý ảnh: Photoshop, Corel Draw, 45 Kỹ thuật Vi xử lý
  46. CHƯƠNG 2 Kiến trúc bộ vi xử lý 8088/8086 46 Kỹ thuật Vi xử lý
  47. Nội dung chương 2 2.1. Kiến trúc bên trong của vi xử lý 8088/8086 2.2. Mô hình phần mềm của vi xử lý 8088/8086 2.3. Quản lý bộ nhớ của vi xử lý 8088/8086 2.4. Tập lệnh và các chế độ địa chỉ 47 Kỹ thuật Vi xử lý
  48. Kiến trúc bên trong của 8088/8086 § Hai BXL 8088 và 8086 có cấu tạo tương tự nhau, điểm khác nhau cơ bản là: • 8088: Bus dữ liệu ngoài là 8 bit • 8086: Bus dữ liệu ngoài là 16 bit § Hệ thống máy tính dùng 8088 chậm hơn 8086 nhưng có giá thành rẻ hơn (do dùng bus dữ liệu ngoài 8 bit nên giảm được khá nhiều chip ghép nối và bổ trợ). § Hãng IBM đã sử dụng 8088 để thiết kế máy IBM- PC (1981). 48 Kỹ thuật Vi xử lý
  49. Cấu trúc bên trong của 8088 49 Kỹ thuật Vi xử lý
  50. Cấu trúc bên trong của 8088 § Gồm 2 phần: • Đơn vị nối ghép bus (Bus Interface Unit – BIU) • Đơn vị thực hiện (Execution Unit – EU) § Hai phần này có thể hoạt động đồng thời: trong khi EU đang thực hiện lệnh trước thì BIU đã tìm và nhận lệnh tiếp theo từ bộ nhớ chính. 50 Kỹ thuật Vi xử lý
  51. Bus Interface Unit - BIU § Bao gồm: • Các thanh ghi đoạn • Con trỏ lệnh • Mạch tạo địa chỉ và điều khiển bus • Hàng đợi lệnh (8088: 4 Byte, 8086: 6 Byte) § Nhiệm vụ: • Tạo và phát địa chỉ • Nhận lệnh từ bộ nhớ • Trao đổi dữ liệu với bộ nhớ chính và cổng vào-ra • Phát tín hiệu điều khiển bộ nhớ và mạch vào-ra • Nhận các tín hiệu yêu cầu từ bên ngoài 51 Kỹ thuật Vi xử lý
  52. Execution Unit – EU § Gồm: • Các thanh ghi chung • Các thanh ghi đệm • Đơn vị số học và logic (ALU) • Khối giải mã lệnh § Nhiệm vụ: • Giải mã lệnh • Thực hiện lệnh 52 Kỹ thuật Vi xử lý
  53. Nội dung chương 2 2.1. Kiến trúc bên trong của vi xử lý 8088/8086 2.2. Mô hình phần mềm của vi xử lý 8088/8086 2.3. Quản lý bộ nhớ của vi xử lý 8088/8086 2.4. Tập lệnh và các chế độ địa chỉ 53 Kỹ thuật Vi xử lý
  54. Mô hình phần mềm của 8088/8086 § Là mô hình mà người lập trình có thể can thiệp được. § Bao gồm: • Tập thanh ghi • Không gian nhớ • Không gian vào-ra • Các kiểu dữ liệu 54 Kỹ thuật Vi xử lý
  55. Tập thanh ghi § 4 thanh ghi đoạn: • CS (Code Segment): thanh ghi đoạn lệnh • DS (Data Segment): thanh ghi đoạn dữ liệu • SS (Stack Segment): thanh ghi đoạn ngăn xếp • ES (Extra Segment): thanh ghi đoạn dữ liệu phụ § 3 thanh ghi con trỏ: • IP (Instruction Pointer): thanh ghi con trỏ lệnh • SP (Stack Pointer): con trỏ ngăn xếp • BP (Base Pointer): thanh ghi con trỏ cơ sở § 4 thanh ghi dữ liệu: • AX (Accumulator): thanh chứa - thanh ghi tích lũy • BX (Base): thanh ghi cơ sở • CX (Count): thanh ghi đếm • DX (Data): thanh ghi dữ liệu Mỗi thanh ghi này đều có thể được chia ra thành 2 nửa có khả năng sử dụng độc lập. § Thanh ghi cờ 55 Kỹ thuật Vi xử lý
  56. Tập thanh ghi (tiếp) 56 Kỹ thuật Vi xử lý
  57. Không gian nhớ § 8088 có bus địa chỉ 20 bit Þ 00000h KGĐCBN = 220 byte = 1MB. § 8088 có khả năng truy nhập bộ nhớ 00001h theo: • Từng byte • Từng word: truy nhập theo 2 byte có địa chỉ liên tiếp § 8088 lưu trữ thông tin trong bộ nhớ chính theo kiểu đầu nhỏ (Little- endian) FFFFFh 57 Kỹ thuật Vi xử lý
  58. Không gian vào-ra § 8088 có khả năng quản lý không gian vào-ra 64 KB = 216 Byte, do đó sẽ phải phát ra 16 bit địa chỉ để tìm cổng vào-ra tương ứng trên các chân địa chỉ từ A0 đến A15. § Trong trường hợp phát ra 8 bit địa chỉ từ A0 đến A7 để xác định một cổng vào-ra thì sẽ quản lý được 256 cổng vào-ra. 58 Kỹ thuật Vi xử lý
  59. Các kiểu dữ liệu § Kiểu dữ liệu số nguyên, gồm 2 loại: • Không dấu: ü8 bit (1 byte), biểu diễn các số từ 0 đến 255 ü16 bit (2 byte), biểu diễn các số từ 0 đến 65535 • Có dấu: ü8 bit (1 byte), biểu diễn các số từ -128 đến 127 ü16 bit (2 byte), biểu diễn các số từ -32768 đến 32767 § Kiểu dữ liệu số BCD, gồm 2 dạng: dạng nén và dạng không nén. § Mã ASCII: tổ chức theo từng byte, theo mã 8 bit. 59 Kỹ thuật Vi xử lý
  60. Nội dung chương 2 2.1. Kiến trúc bên trong của vi xử lý 8088/8086 2.2. Mô hình phần mềm của vi xử lý 8088/8086 2.3. Quản lý bộ nhớ của vi xử lý 8088/8086 2.4. Tập lệnh và các chế độ địa chỉ 60 Kỹ thuật Vi xử lý
  61. 2.3. Quản lý bộ nhớ 2.3.1. Các thanh ghi đoạn và phân đoạn bộ nhớ 2.3.2. Đoạn lệnh và thanh ghi con trỏ lệnh 2.3.3. Đoạn dữ liệu và các thanh ghi SI, DI, BX 2.3.4. Đoạn ngăn xếp và các thanh ghi SP, BP 2.3.5. Các thanh ghi AX, BX, CX, DX 2.3.6. Thanh ghi cờ 61 Kỹ thuật Vi xử lý
  62. 2.3.1. Các thanh ghi đoạn và phân đoạn bộ nhớ § 8088 có 4 thanh ghi đoạn 16 bit, do đó tại một thời điểm, 8088 chỉ làm việc được với 4 đoạn nhớ: • CS (Code Segment): quản lý đoạn lệnh • SS (Stack Segment): quản lý đoạn ngăn xếp • DS (Data Segment): quản lý đoạn dữ liệu • ES (Extra Data Segment): quản lý đoạn dữ liệu phụ § 8088 phát ra một địa chỉ của ngăn nhớ = 20 bit, do đó không gian nhớ của nó là 1 MB (=220 Byte) § Các thanh ghi bên trong 8088 đều có độ dài là 16 bit. 62 Kỹ thuật Vi xử lý
  63. Các thanh ghi đoạn 63 Kỹ thuật Vi xử lý
  64. Phân đoạn bộ nhớ § Intel chia không gian nhớ của 8088 thành các đoạn nhớ (segment) có dung lượng 64 KB =216 Byte § Địa chỉ đầu của mỗi đoạn nhớ chia hết cho 16, do đó địa chỉ đầu của một đoạn nào đó sẽ có dạng: xxxx0h (x là chữ số Hexa bất kỳ). § Để quản lý địa chỉ đầu của một đoạn nhớ chỉ cần lưu trữ 4 số Hexa (16 bit cao), đây gọi là địa chỉ đoạn. • VD: nếu địa chỉ đoạn là 1234h thì địa chỉ vật lý của đầu đoạn nhớ đó là 12340h 64 Kỹ thuật Vi xử lý
  65. Phân đoạn bộ nhớ (tiếp) § Giả sử có một đoạn nhớ xác định (dung lượng tối đa = 64 KB), để xác định 1 byte nhớ cụ thể trong đoạn đó, cần biết khoảng cách (offset – độ lệch) giữa byte nhớ đó so với ngăn nhớ đầu đoạn. § Địa chỉ logic có dạng: Địa chỉ đoạn (16 bit): offset (16 bit) § Địa chỉ vật lý (20 bit) = địa chỉ đoạn * 10h + offset § Ví dụ: Có địa chỉ logic 1234h:0076h Þ địa chỉ vật lý = 1234h * 10h + 0076h = 123B6h § Người lập trình chỉ lập trình với địa chỉ logic, còn việc chuyển sang địa chỉ vật lý là do bộ vi xử lý thực hiện. 65 Kỹ thuật Vi xử lý
  66. Phân đoạn bộ nhớ (tiếp) § Địa chỉ đoạn: xxxxh Địa chỉ vật lý đầu đoạn: xxxx0h Địa chỉ vật lý cuối đoạn: xxxx0h + FFFFh § Địa chỉ đoạn do các thanh ghi đoạn quản lý. § Địa chỉ offset do các thanh ghi IP, BX, BP, SP, SI, DI quản lý. § Với một địa chỉ vật lý, có thể tìm ra nhiều địa chỉ logic khác nhau. § Ví dụ: 00070h = 0000h:0070h = 0001h:0060h = 0002h:0050h 66 Kỹ thuật Vi xử lý
  67. 2.3.2. Đoạn lệnh và thanh ghi con trỏ lệnh § Thanh ghi CS sẽ xác định đoạn lệnh. § Đoạn lệnh dùng để chứa lệnh của chương trình. Bộ vi xử lý sẽ nhận lần lượt từng lệnh ở đây để giải mã và thực hiện. § Thanh ghi IP (con trỏ lệnh) chứa địa chỉ offset của lệnh tiếp theo sẽ được nhận vào. Þ CS:IP chứa địa chỉ logic của lệnh tiếp theo sẽ được nhận vào. 67 Kỹ thuật Vi xử lý
  68. 2.3.3. Đoạn dữ liệu và các thanh ghi SI, DI, BX § DS: quản lý một đoạn dữ liệu 64 KB § ES: quản lý một đoạn dữ liệu phụ 64 KB § Offset sẽ được xác định bởi nội dung của các thanh ghi SI, DI, BX. § Sự khác nhau giữa chương trình kiểu EXE và COM: • Trong chương trình EXE: CS, DS và SS quản lý 3 đoạn nhớ khác nhau. Nghĩa là : CS ¹ SS ¹ DS. • Trong chương trình COM: CS, DS và SS có thể quản lý chung một đoạn nhớ (không lớn hơn 64 KB). Nghĩa là CS = DS = SS. 68 Kỹ thuật Vi xử lý
  69. 2.3.4. Đoạn ngăn xếp và các thanh ghi SP, BP § Stack (ngăn xếp): vùng nhớ tổ chức theo cơ chế LIFO, dùng để cất giữ thông tin và có thể khôi phục lại. § Đoạn Stack được quản lý nhờ thanh ghi SS. § Thông tin được trao đổi với Stack theo word (16 bit). § SP chứa địa chỉ offset của ngăn nhớ đỉnh Stack • Nếu cất thêm một thông tin vào Stack thì nội dung của SP giảm đi 2 • Nếu lấy ra một thông tin của Stack thì nội dung của SP tăng lên 2 • Nếu Stack rỗng thì SP trở vào đáy Stack • SS:SP chứa địa chỉ logic của ngăn nhớ đỉnh Stack § BP là thanh ghi chứa địa chỉ offset của một ngăn nhớ nào đó trong Stack Þ địa chỉ logic của ngăn nhớ đó là SS:BP 69 Kỹ thuật Vi xử lý
  70. 2.3.5. Các thanh ghi AX, BX, CX, DX § AX, BX, CX, DX là các thanh ghi 16 bit § AH, AL, BH, BL, CH, CL, DH, DL là các thanh ghi 8 bit § Chức năng chung: chứa dữ liệu tạm thời § Chức năng riêng: • AX: . Dùng cho lệnh nhân chia theo word . Dùng cho vào ra theo word • AL: . Dùng cho lệnh nhân chia theo byte . Dùng cho vào ra theo byte . Dùng cho các lệnh số học với số BCD • AH: . Dùng cho các lệnh nhân chia theo byte • BX: . Dùng để chứa địa chỉ cơ sở • CX: . Dùng để chứa số lần lặp của lệnh LOOP và các lệnh xử lý xâu ký tự • CL: . Dùng để chứa số lần dịch của lệnh dịch, lệnh quay • DX: . Dùng cho lệnh nhân chia theo word . Dùng chứa địa chỉ cổng vào ra 70 Kỹ thuật Vi xử lý
  71. 2.3.6. Thanh ghi cờ § Bao gồm: • Các cờ phép toán: biểu thị trạng thái của kết quả phép toán. • Các cờ điều khiển: đặt chế độ làm việc cho bộ vi xử lý. 71 Kỹ thuật Vi xử lý
  72. Các cờ phép toán § Cờ ZF (Zero - cờ không/cờ rỗng): Được thiết lập (= 1) nếu kết quả phép toán bằng 0 và ngược lại sẽ bị xóa (=0) nếu kết quả phép toán khác 0. § Cờ SF (Sign - cờ dấu): Được thiết lập nếu kết quả phép toán nhỏ hơn 0 và bị xoá nếu kết quả phép toán lớn hơn hoặc bằng 0. § Cờ CF (Carry - cờ nhớ): Nếu phép cộng có nhớ ra khỏi bit cao nhất hay phép toán trừ có mượn ra khỏi bit cao nhất thì CF được thiết lập (báo tràn với số nguyên không dấu). § Cờ OF (Overflow - cờ tràn): Nếu cộng 2 số cùng dấu mà kết quả có dấu ngược lại thì OF được thiết lập (báo tràn với số nguyên có dấu). § Cờ PF (Parity - cờ kiểm tra chẵn lẻ): Nếu tổng số bit 1 của kết quả là chẵn thì cờ PF được thiết lập. § Cờ AF (Auxiliary - cờ nhớ phụ): Nếu phép cộng có nhớ từ bit 3 sang bit 4 hoặc phép trừ có mượn từ bit 3 sang bit 4 thì cờ AF được thiết lập. 72 Kỹ thuật Vi xử lý
  73. Các cờ điều khiển § Cờ TF (Trap - cờ bẫy): • Nếu TF = 1 thì bộ vi xử lý hoạt động theo chế độ thực hiện từng lệnh (chế độ gỡ rối chương trình). § Cờ IF (Interrupt - cờ ngắt): • Nếu IF = 1 thì bộ vi xử lý cho phép ngắt với yêu cầu ngắt đưa đến chân tín hiệu INTR (Interrupt Request) của bộ vi xử lý. • Nếu IF = 0 thì cấm ngắt. § Cờ DF (Director - cờ hướng): chỉ hướng xử lý xâu ký tự. • Nếu DF = 0, xử lý từ trái sang phải. • Nếu DF = 1, xử lý từ phải sang trái. 73 Kỹ thuật Vi xử lý
  74. 2.4. Tập lệnh và các chế độ địa chỉ § Tập lệnh: Tập lệnh của 8088 có khoảng 120 lệnh, chia thành các nhóm như sau: • Các lệnh chuyển dữ liệu (copy) • Các lệnh số học • Các lệnh logic, dịch, quay • Các lệnh xử lý xâu ký tự (string) • Các lệnh điều khiển hệ thống • Các lệnh chuyển điều khiển (rẽ nhánh) • Các lệnh xử lý đặc biệt • Các lệnh vào-ra trực tiếp 74 Kỹ thuật Vi xử lý
  75. Tập lệnh và các chế độ địa chỉ (tiếp) § Các chế độ địa chỉ (Addressing modes): • Chế độ địa chỉ là cách xác định toán hạng của lệnh • Toán hạng gồm: toán hạng nguồn và toán hạng đích üHọ Intel x86: nếu trong lệnh có 2 toán hạng thì toán hạng đích được viết ở bên trái. • Toán hạng có thể là: üHằng số (được cho ngay trong lệnh) üNội dung của thanh ghi (trong lệnh cần cho biết tên thanh ghi) üNội dung của ngăn nhớ üNội dung của cổng vào-ra 75 Kỹ thuật Vi xử lý
  76. Các chế độ địa chỉ § Chế độ địa chỉ tức thì: • Toán hạng là một giá trị hằng số nằm ngay trong lệnh. • Ví dụ: MOV CX, 5 ; nạp giá trị 5 vào thanh ghi CX MOV 5, CX ; chú ý: không tồn tại lệnh này !!! § Chế độ địa chỉ thanh ghi: • Toán hạng là nội dung của 1 thanh ghi mà tên thanh ghi được cho biết ở trong lệnh. • Ví dụ: MOV AX, BX ; chuyển nội dung của BX vào AX 76 Kỹ thuật Vi xử lý
  77. Các chế độ địa chỉ (tiếp) § Chế độ địa chỉ trực tiếp: • Toán hạng là nội dung của ngăn nhớ mà địa chỉ của ngăn nhớ đó được cho ở trong lệnh. • Ví dụ: MOV AX, [1234h] ; khác với MOV AX, ES:[1234h] ü1234h là địa chỉ offset của ngăn nhớ üNếu không chỉ định địa chỉ đoạn thì ngầm định thanh ghi đoạn tương ứng là DS üLệnh này chuyển 1 word nằm trong bộ nhớ bắt đầu từ địa chỉ DS:1234h vào thanh ghi AX 77 Kỹ thuật Vi xử lý
  78. Minh họa chế độ địa chỉ trực tiếp 78 Kỹ thuật Vi xử lý
  79. Các chế độ địa chỉ (tiếp) § Chế độ địa chỉ gián tiếp qua thanh ghi: • Toán hạng là nội dung của ngăn nhớ có địa chỉ offset nằm trong 1 trong các thanh ghi sau: BX, SI, DI. • Chú ý: nếu không chỉ định địa chỉ đoạn thì ngầm định thanh ghi đoạn tương ứng là DS. • Ví dụ: MOV AL, [SI] ; tương đương MOV AL, DS:[SI] Lệnh này chuyển 1 byte nhớ ở địa chỉ DS:SI vào thanh ghi AL 79 Kỹ thuật Vi xử lý
  80. Minh họa 80 Kỹ thuật Vi xử lý
  81. Các chế độ địa chỉ (tiếp) § Chế độ địa chỉ cơ sở: • Toán hạng là nội dung của ngăn nhớ có địa chỉ offset bằng tổng nội dung của một thanh ghi cơ sở (BX hoặc BP) + hằng số. • Nếu không chỉ định thanh ghi đoạn thì ngầm định thanh ghi đoạn đó là: üDS nếu thanh ghi cơ sở là BX üSS nếu thanh ghi cơ sở là BP • Ví dụ: MOV AL, [BX+3] ; tương đương MOV AL, [BX]+3 ; tương đương MOV AL, 3[BX] 81 Kỹ thuật Vi xử lý
  82. Minh họa 82 Kỹ thuật Vi xử lý
  83. Các chế độ địa chỉ (tiếp) § Chế độ địa chỉ chỉ số: • Toán hạng là nội dung của ngăn nhớ có địa chỉ offset bằng tổng nội dung của một thanh ghi chỉ số (SI hoặc DI) + hằng số. • Nếu không chỉ định thanh ghi đoạn thì ngầm định thanh ghi đoạn đó là DS. • Ví dụ: MOV AX, [SI+3] ; tương đương MOV AX, [SI]+3 ; tương đương MOV AX, 3+[SI] ; tương đương MOV AX, 3[SI] 83 Kỹ thuật Vi xử lý
  84. Minh họa 84 Kỹ thuật Vi xử lý
  85. Các chế độ địa chỉ (tiếp) § Chế độ địa chỉ chỉ số cơ sở: • Toán hạng là ngăn nhớ có địa chỉ offset bằng tổng của nội dung một thanh ghi cơ sở (BX, BP) với một thanh ghi chỉ số (SI, DI) và một hằng số. • Ví dụ: MOV AL, [BX][SI]+4 ; Û MOV AL, [BX+SI+4] 85 Kỹ thuật Vi xử lý
  86. Tổng kết chế độ địa chỉ 86 Kỹ thuật Vi xử lý
  87. Các cặp thanh ghi đoạn:lệch ngầm định 87 Kỹ thuật Vi xử lý
  88. CHƯƠNG 3 Lập trình hợp ngữ với 8088/8086 88 Kỹ thuật Vi xử lý
  89. Nội dung chương 3 3.1. Mở đầu về lập trình hợp ngữ 3.2. Các cấu trúc lập trình với hợp ngữ 3.3. Các lệnh logic, lệnh dịch và lệnh quay 3.4. Ngăn xếp và thủ tục 3.5. Các lệnh nhân, chia 3.6. Các lệnh thao tác chuỗi 3.7. Một số ví dụ 89 Kỹ thuật Vi xử lý
  90. Mở đầu về lập trình hợp ngữ § Các loại ngôn ngữ lập trình § Cú pháp của hợp ngữ § Dữ liệu của chương trình § Một số lệnh cơ bản § Cấu trúc chương trình § Chương trình EXE và COM § Vào-ra đơn giản § Các ví dụ § Dịch và chạy chương trình 90 Kỹ thuật Vi xử lý
  91. Các loại ngôn ngữ lập trình § Ngôn ngữ máy: • Chỉ được biểu diễn bằng số nhị phân. • Bộ vi xử lý chỉ hiểu được các chương trình mã máy. • Con người rất khó khăn để tạo lập hay đọc hiểu chương trình ngôn ngữ máy. § Hợp ngữ (Assembly Language): • Là ngôn ngữ lập trình bậc thấp (gần ngôn ngữ máy nhất). • Được xây dựng trên cơ sở ký hiệu tập lệnh của bộ vi xử lý tương ứng. • Phụ thuộc hoàn toàn vào bộ vi xử lý cụ thể. § Ngôn ngữ lập trình bậc cao: • Gần với ngôn ngữ tự nhiên hơn. • Được xây dựng độc lập với cấu trúc của máy tính. 91 Kỹ thuật Vi xử lý
  92. Lập trình với hợp ngữ § Ưu điểm: • Can thiệp sâu vào cấu trúc hệ thống. • Hiểu sâu hơn về hệ thống. • Chương trình mã máy tương ứng sẽ ngắn hơn, thường nhanh hơn và tốn ít bộ nhớ hơn. § Nhược điểm: • Khó học vì gần với mã máy. • Chương trình nguồn dài, không thích hợp để xây dựng những chương trình lớn. Þ Kết hợp ngôn ngữ lập trình bậc cao với hợp ngữ. 92 Kỹ thuật Vi xử lý
  93. Chương trình dịch hợp ngữ § Được gọi là ASSEMBLER § Một số chương trình dịch hợp ngữ cho IBM-PC: • MASM – Microsoft Marco Assembler: üCác tệp: MASM.EXE, LINK.EXE, EXE2BIN.EXE • TASM – Turbo Assembler: üCác tệp: TASM.EXE, TLINK.EXE • 8086 Emulator 93 Kỹ thuật Vi xử lý
  94. Các bước lập trình § Bước 1: Phát biểu bài toán § Bước 2: Xây dựng thuật giải § Bước 3: Viết mã chương trình § Bước 4: Dịch và sửa lỗi cú pháp § Bước 5: Chạy thử và hiệu chỉnh chương trình 94 Kỹ thuật Vi xử lý
  95. Cú pháp của hợp ngữ § Chương trình hợp ngữ gồm các dòng lệnh, mỗi lệnh viết trên một dòng, mỗi dòng có thể là: • Lệnh của bộ vi xử lý (instruction) • Chỉ dẫn của chương trình dịch ASSEMBLER § Các lệnh hợp ngữ không phân biệt chữ hoa, chữ thường. § Khi dịch thành mã máy thì chỉ có các lệnh của bộ vi xử lý mới được dịch. § Cấu trúc của một dòng lệnh : Tên Thao tác Toán hạng Chú thích (Name Operation Operand Comment ) § Giữa các trường phải có ít nhất một dấu cách (hoặc TAB) § Ví dụ: MAIN PROC BAT_DAU: MOV CX, 50 ; khoi tao bo dem 95 Kỹ thuật Vi xử lý
  96. Ý nghĩa các trường trong lệnh § Trường tên: • Sử dụng cho: nhãn lệnh, tên thủ tục, tên biến • Quy ước đặt tên: dài từ 1 đến 31 ký tự, cho phép sử dụng: üChữ cái (không phân biệt chữ hoa và chữ thường) üChữ số (không được dùng làm ký tự đầu tiên) üCác ký tự khác: ?, @, $, %, . (dấu . chỉ được dùng khi nó là ký tự đầu tiên). 96 Kỹ thuật Vi xử lý
  97. Ý nghĩa các trường trong lệnh (tiếp) § Trường thao tác: • Nếu là lệnh của vi xử lý thì đó chính là mã lệnh (MOV, CALL, ADD, ). • Nếu là chỉ dẫn thì đó là lệnh giả của chương trình dịch (Pseudo-op). 97 Kỹ thuật Vi xử lý
  98. Ý nghĩa các trường trong lệnh (tiếp) § Trường toán hạng: • Đối với lệnh thì toán hạng xác định dữ liệu bị tác động bởi mã lệnh. • Một lệnh có thể có 0, 1, 2 toán hạng. • Ví dụ: üMOV CX,5 ; 2 toán hạng üINC AX ; 1 toán hạng üNOP ; 0 toán hạng • Đối với lệnh giả thì toán hạng cho thêm thông tin cho lệnh giả đó. § Trường chú thích: • Bắt đầu bằng dấu ";" theo sau đó là lời giải thích. 98 Kỹ thuật Vi xử lý
  99. Dữ liệu của chương trình § Hợp ngữ cho phép biểu diễn dưới dạng: • Số nhị phân: 1011b, 1011B, • Số thập phân: 35, 35d, 35D, • Số Hexa: 4Ah, 0ABCDh, 0FFFFH, • Kí tự: "A", 'HELLO', "Bach Khoa", § Tất cả các kiểu dữ liệu trên sau đó đều được trình dịch Assembler dịch ra mã nhị phân. § Mỗi kí tự được dịch thành mã ASCII tương ứng • Chương trình không phân biệt 'A' với 41h hay 65 99 Kỹ thuật Vi xử lý
  100. Các chỉ thị giả định số liệu Chỉ thị giả Biểu diễn DB Định nghĩa byte DW Định nghĩa word (2 byte) DD Định nghĩa double word (4 byte) DQ Định nghĩa quadword (8 byte liên tiếp) DT Định nghĩa tenbyte (10 byte liên tiếp) 100 Kỹ thuật Vi xử lý
  101. Khai báo biến § Biến Byte: • Khai báo: Ten_bien DB Gia_tri_khoi_dau Ten_bien DB ? • Ví dụ: Age DB 25 ; Khởi tạo giá trị ban đầu Age = 25 Alpha DB ? ; Ban đầu Alpha không xác định • Khoảng xác định của biến Byte: üSố không dấu: [0, 255] üSố có dấu: [-128, 127] 101 Kỹ thuật Vi xử lý
  102. Khai báo biến (tiếp) § Biến Word: • Khai báo: Ten_bien DW Gia_tri_khoi_dau Ten_bien DW ? • Ví dụ: Test DW -5 ; -5 = 1111111111111011b Beta DW 1234h ; 1234h = 0001001000110100b XYZ DW ? • Khoảng xác định của biến Word: üSố không dấu: [0, 65535] üSố có dấu: [-32768, 32767] 102 Kỹ thuật Vi xử lý
  103. Khai báo biến (tiếp) § Biến mảng: • Mảng Byte: MangB DB 10h, 20h, 30h, 40h Buffer DB 100 dup (?) • Mảng Word: MangW DW -12, 127, 0A48Bh • Mảng kí tự: üThực chất là mảng Byte üVí dụ: 2 cách viết sau là tương đương M DB 'ABC' M DB 41h, 42h, 43h 103 Kỹ thuật Vi xử lý
  104. Khai báo hằng § Cú pháp: Ten_hang EQU Gia_tri § Ví dụ: TenTruong EQU 'BACH KHOA' CR EQU 13 LF EQU 10 ThongBao DB 'DAI HOC', CR, LF, TenTruong DoDaiChuoi EQU $ - offset ThongBao § Hằng không được cấp phát ngăn nhớ 104 Kỹ thuật Vi xử lý
  105. Một số lệnh cơ bản § Lệnh MOV (Move): MOV đích, nguồn • Copy dữ liệu từ toán hàng nguồn sang toán hạng đích • Kích thước của 2 toán hạng phải giống nhau Ví dụ: MOV AX, BX MOV AL, 'A' MOV BH, 120 ; MOV DS, 0A000h ; SAI MOV AX, 0A000h MOV DS, AX ; MOV Bien_2, Bien_1; SAI MOV AL, Bien_1 MOV Bien_2, AL 105 Kỹ thuật Vi xử lý
  106. Một số lệnh cơ bản (tiếp) § Lệnh XCHG (Exchange):XCHG đích, nguồn • Hoán đổi nội dung 2 toán hạng cho nhau • Kích thước của 2 toán hạng phải giống nhau Ví dụ: XCHG AX, BX XCHG AH, Byte_1 XCHG Word_1, BX ; XCHG Word_1, Word_2 ; SAI MOV AX, Word_1 MOV BX, Word_2 MOV Word_1, BX MOV Word_2, AX 106 Kỹ thuật Vi xử lý
  107. Các lệnh ADD và SUB § Cú pháp: ADD đích, nguồn ; đích Ü đích + nguồn SUB đích, nguồn ; đích Ü đích - nguồn Ví dụ: MOV AX, 50 MOV BX, 30 ADD BX, 10 ; BX = 40 SUB AX, BX ; AX = 10 ; ADD Byte_1, Byte_2 ; SAI MOV AL, Byte_1 ADD AL, Byte_2 MOV Byte_1, AL 107 Kỹ thuật Vi xử lý
  108. Các lệnh INC, DEC và NEG § Cú pháp: INC đích ; đích Ü đích + 1 DEC đích ; đích Ü đích – 1 NEG đích ; đích Ü- đích (lấy bù 2 của đích) Toán hạng đích là thanh ghi hoặc ngăn nhớ § Ví dụ: MOV AX, 20 ; AX = 20 INC AX ; AX = 21 = 0000000000010101b NEG AX ; AX = 1111111111101011b DEC AX ; AX = FFEAh 108 Kỹ thuật Vi xử lý
  109. Bài tập Giả sử A và B là các biến kiểu Word, hãy thực hiện các phép gán sau đây bằng hợp ngữ: 1.A := B 2.A := 10 – A; 3.A := B – A * 2; 109 Kỹ thuật Vi xử lý
  110. Cấu trúc chương trình § Chương trình mã máy khi được thực thi sẽ chiếm 3 vùng nhớ cơ bản trong bộ nhớ chính: • Vùng nhớ lệnh (Code) • Vùng dữ liệu (Data) • Vùng ngăn xếp (Stack) § Chương trình hợp ngữ cũng được tổ chức tương tự như vậy. § Mã lệnh, dữ liệu và ngăn xếp được cấu trúc như các đoạn chương trình. 110 Kỹ thuật Vi xử lý
  111. Các chế độ bộ nhớ § Kích thước của đoạn mã và dữ liệu trong chương trình được chỉ định bằng cách chỉ ra chế độ bộ nhớ nhờ chỉ thị biên dịch .MODEL § Cú pháp: .Model Kieu_bo_nho § Chế độ bộ nhớ thường dùng khi lập trình hợp ngữ là SMALL. 111 Kỹ thuật Vi xử lý
  112. Các chế độ bộ nhớ (tiếp) 112 Kỹ thuật Vi xử lý
  113. Đoạn dữ liệu (Data Segment) § Đoạn dữ liệu chứa tất cả các khai báo biến. § Các khai báo hằng cũng thường để ở đây. § Để khai báo đoạn dữ liệu ta dùng chỉ thị .DATA § Ví dụ: .Data Bien_1 db 10 Bien_2 dw 0FEDCh TBao db 'Xin chao ban', '$' Nam equ 2006 113 Kỹ thuật Vi xử lý
  114. Đoạn ngăn xếp (Stack Segment) § Cú pháp: .STACK Kich_thuoc § Kich_thuoc: là số Byte của Stack (nếu không chỉ định Kich_thuoc thì ngầm định là 1KB) § Ví dụ: .Stack 100h 114 Kỹ thuật Vi xử lý
  115. Đoạn mã lệnh (Code Segment) § Đoạn mã lệnh được khai báo với chỉ thị .CODE § Bên trong đoạn mã, các dòng lệnh được tổ chức dưới dạng 1 chương trình chính và các chương trình con (nếu cần). § Ví dụ: .Code Main Proc ; các lệnh của CT chính Main EndP 115 Kỹ thuật Vi xử lý
  116. Cấu trúc chương trình thông dụng .Model Small .Stack 100h .Data ; khai báo biến, hằng ở đây .Code Main Proc ; các lệnh của chương trình chính ở đây Main EndP ; các chương trình con khác ở đây End Main 116 Kỹ thuật Vi xử lý
  117. Chương trình EXE và COM § Có 2 loại chương trình mã máy có thể thực thi được trong DOS, đó là chương trình .EXE và .COM • Chương trình EXE: üỞ đầu file chương trình có 1 vùng thông tin gọi là Header üKhi thực thi, CS, DS và SS trỏ đến 3 phân đoạn khác nhau • Chương trình COM: üFile chương trình có kích thước nhỏ gọn (< 64KB), chứa cả mã lệnh và dữ liệu üKhi thực thi, CS, DS và SS trỏ đến cùng 1 phân đoạn § DOS sẽ chọn 1 địa chỉ phân đoạn gọi là PSP (Program Segment Prefix) làm địa chỉ cơ sở để tải chương trình. § PSP thường có kích thước là 256 Byte (=100h), chứa các thông tin liên quan đến chương trình được thực thi. 117 Kỹ thuật Vi xử lý
  118. Khung chương trình EXE .Model Small .Stack 100h .Data ; khai báo biến và hằng ở đây .Code Main Proc mov ax, @Data mov ds, ax ; khởi tạo DS trỏ đến đoạn Data ; mov es, ax ; bỏ dấu ; để khởi tạo ES = DS ; thân chương trình mov ah, 4Ch ; hàm thoát về DOS int 21h Main EndP End Main 118 Kỹ thuật Vi xử lý
  119. Khung chương trình COM .Model Tiny Offset 0000h .Code Đoạn đầu chương trình (PSP) Org 100h 0100h JMP CONTINUE IP Start: jmp Continue Dữ liệu thường nằm ở đây ; khai báo dữ liệu ở đây CONTINUE: Continue: (chiều tiến của lệnh và dữ liệu) Main Proc ; thân chương trình FFFEh (chiều tiến của ngăn xếp) SP int 20h ; Về DOS Main EndP End Start 119 Kỹ thuật Vi xử lý
  120. Vào-ra đơn giản § CPU có thể trao đổi dữ liệu với các thiết bị ngoại qua các cổng vào-ra nhờ các lệnh IN và OUT. § Cách vào-ra đơn giản hơn là dùng các dịch vụ ngắt có sẵn của BIOS hoặc DOS. § Ta thường cần thực hiện các thao tác trao đổi dữ liệu với bàn phím và màn hình Þ dùng hàm DOS. § Lệnh INT (Interrupt): INT N • Là lệnh gọi CTC phục vụ ngắt số hiệu N (N từ 0 ÷ 255) • Dịch vụ ngắt số 21h chứa nhiều hàm tiện ích của DOS. 120 Kỹ thuật Vi xử lý
  121. Lệnh nạp địa chỉ hiệu dụng § Lệnh LEA (Load Effective Address): LEA thanh_ghi_chung, ngan_nho • Lấy địa chỉ offset của ngăn nhớ nạp vào thanh ghi • Ví dụ: LEA DX, Thong_Bao MOV DX, offset Thong_Bao ; lệnh cùng chức năng 121 Kỹ thuật Vi xử lý
  122. Một số hàm vào-ra của DOS § Khi gọi dịch vụ ngắt của DOS bằng lệnh Int 21h thì AH chứa số hiệu dịch vụ hàm. § Hàm 01h (chờ người sử dụng vào 1 phím) • Vào: üAH = 01h • Ra: üAL = mã ASCII nếu 1 phím kí tự được nhấn = 0 nếu 1 phím điều khiển hay chức năng được nhấn • Ví dụ: MOV AH, 1 INT 21h 122 Kỹ thuật Vi xử lý
  123. Một số hàm vào-ra của DOS (tiếp) § Hàm 02h (hiện 1 kí tự hay điều khiển) • Vào: üAH = 02h üDL = mã ASCII của kí tự hiển thị hay điều khiển • Ra: üAL = mã ASCII của kí tự hiển thị hay điều khiển • Ví dụ: MOV AH, 2 MOV DL, 'A' ; viết ra kí tự 'A' INT 21h MOV DL, 10 ; điều khiển con trỏ xuống dòng INT 21h MOV DL, 13 ; điều khiển con trỏ về đầu dòng INT 21h 123 Kỹ thuật Vi xử lý
  124. Một số hàm vào-ra của DOS (tiếp) § Hàm 09h (hiện 1 chuỗi kí tự) • Vào: üAH = 09h üDS:DX = địa chỉ của chuỗi kí tự có kí tự kết thúc là '$' • Ra: không • Ví dụ: ThongBao DB 'Chao cac ban$' ; giả sử DS = địa chỉ đoạn của ThongBao MOV AH, 9 LEA DX, ThongBao ; hoặc MOV DX, OFFSET ThongBao INT 21h 124 Kỹ thuật Vi xử lý
  125. Các ví dụ § Ví dụ 1: Chương trình "Hello World" bằng hợp ngữ. § Ví dụ 2: Lập trình thực hiện các công việc sau: • Hiển thị thông báo : ' Hãy gõ vào một chữ cái thường: ' • Vào chữ cái thường • Xuống dòng, về đầu dòng • Hiển thị thông báo : 'Chữ cái hoa tương ứng là: ' • Hiển thị chữ cái hoa tương ứng • Thoát về DOS. 125 Kỹ thuật Vi xử lý
  126. Ví dụ 1 .Model Small .Stack 100h .Data TBao db 'Hello World$' ; kết thúc bằng '$' .Code Main Proc mov ax, @Data mov ds, ax ; DS trỏ đến đoạn Data HienTB: mov ah, 9 ; hàm hiện chuỗi lea dx, TBao ; DS:DX Þ chuỗi TBao int 21h ; gọi hàm Thoat: mov ah,4Ch ; hàm thoát về DOS int 21h Main EndP End Main 126 Kỹ thuật Vi xử lý
  127. Ví dụ 2 127 Kỹ thuật Vi xử lý
  128. Dịch và chạy chương trình § Nếu dùng MASM: • Viết chương trình nguồn, ghi ra file .ASM (chẳng hạn là BAITAP.ASM) • Dịch mã nguồn: MASM BAITAP.ASM üNếu không có lỗi thì ta có file BAITAP.OBJ üNếu có lỗi thì xem thông báo lỗi và đến dòng xuất hiện lỗi để sửa • Liên kết: LINK BAITAP.OBJ üNếu không có lỗi thì ta có file BAITAP.EXE • Nếu mã nguồn viết theo dạng .COM thì cần chuyển từ file .EXE sang dạng COM bằng lệnh: EXE2BIN BAITAP.EXE BAITAP.COM • Thực hiện file BAITAP.EXE (hoặc BAITAP.COM) 128 Kỹ thuật Vi xử lý
  129. Nội dung file TEXE.BAT @echo off if not "A%1"=="A" goto ok echo Syntax: TEXE Filename goto End :OK if not exist %1.asm goto End echo NPB's Assembly Compiler echo Compiling : %1.asm tasm %1.asm if not exist %1.obj goto End tlink %1.obj /x if not ErrorLevel 0 goto End del %1.obj :End 129 Kỹ thuật Vi xử lý
  130. Sử dụng file TEXE.BAT § File TEXE.BAT chứa các lệnh gọi 2 file TASM.EXE và TLINK.EXE để dịch 1 chương trình .ASM ra dạng file .EXE § Giả sử ta có file chương trình BAITAP.ASM § Gõ lệnh sau: TEXE BAITAP (Chú ý: không gõ "BAITAP.ASM") § Nếu chương trình viết không có lỗi thì ta sẽ có file BAITAP.EXE 130 Kỹ thuật Vi xử lý
  131. Bài tập 1 § Dữ liệu của 1 chương trình hợp ngữ được khai báo dưới dạng: .data mem1 dw 500 mem2 dw -50 vec2 db 10, 20, -10, -20, -30, -40 § Hãy xác định nội dung của AX (Hexa) sau khi thực hiện đoạn lệnh sau: mov bx, 1 mov ax, SEG vec2 mov es, ax mov ax, es:[bx] a) 01F4 b) 0A14 c) F4FF d) 14F6 e) CE01 131 Kỹ thuật Vi xử lý
  132. Bài tập 1 (tiếp) 132 Kỹ thuật Vi xử lý
  133. Bài tập 2 § Dữ liệu của 1 chương trình hợp ngữ được khai báo dưới dạng: .data mem1 dw 500 mem2 dw -50 vec1 db 1, 2, 3, 4, 8, 7 vec2 db 10, 20, -10, -20, -30, -40 § Hãy xác định nội dung của CX (Hexa) sau khi thực hiện đoạn lệnh sau: mov bx, OFFSET vec1 mov cx, 3[bx] a) 0304 b) 0408 c) F3F4 d) 0203 e) 0804 133 Kỹ thuật Vi xử lý
  134. Bài tập 2 (tiếp) 134 Kỹ thuật Vi xử lý
  135. Nội dung chương 3 3.1. Mở đầu về lập trình hợp ngữ 3.2. Các cấu trúc lập trình với hợp ngữ 3.3. Các lệnh logic, lệnh dịch và lệnh quay 3.4. Ngăn xếp và thủ tục 3.5. Các lệnh nhân, chia 3.6. Các lệnh thao tác chuỗi 3.7. Một số ví dụ 135 Kỹ thuật Vi xử lý
  136. 3.2. Các cấu trúc lập trình với hợp ngữ 3.2.1. Các lệnh liên quan 3.2.2. Cấu trúc điều kiện 3.2.3. Cấu trúc lặp 136 Kỹ thuật Vi xử lý
  137. 3.2.1. Các lệnh liên quan § Các cấu trúc lập trình: • Tuần tự • Điều kiện • Lặp § Các cấu trúc điều kiện và lặp trong hợp ngữ được tạo bởi phần lớn là các lệnh sau: • Lệnh so sánh CMP • Lệnh nhảy không điều kiện JMP • Các lệnh nhảy có điều kiện • Các câu lệnh lặp 137 Kỹ thuật Vi xử lý
  138. Lệnh so sánh CMP § Cú pháp: CMP đích, gốc § Đích và gốc không đồng thời là ngăn nhớ, ngoài ra đích không được là hằng số. § Lệnh CMP sẽ thực hiện trừ thử đích cho gốc (hơi giống lệnh SUB) nhưng không thay đổi giá trị của đích mà chỉ cập nhật thanh ghi cờ. § Theo sau lệnh CMP thường là các lệnh nhảy có điều kiện. 138 Kỹ thuật Vi xử lý
  139. Lệnh nhảy không điều kiện JMP § Cú pháp: JMP Target § Chuyển điều khiển không điều kiện đến Target § Target có thể là nhãn lệnh, tên thanh ghi hoặc nội dung ngăn nhớ. § Các dạng của lệnh nhảy: • Nhảy ngắn (short): IP Ü IP + (giá trị có dấu 8 bit thay cho Target) üJMP SHORTNhanLenh • Nhảy gần (near): IP Ü IP + (giá trị có dấu 16 bit thay cho Target) üJMP NEAR NhanLenh • Nhảy xa (far): IP Ü Target_Ofs; CS Ü Target_Seg üNhanLenh LABEL FAR üJMP FAR NhanLenh • Gián tiếp: IP Ü thanh ghi / bộ nhớ (và CS Ü thanh ghi / bộ nhớ) üJMP NEAR PTR BX ; IP Ü BX üJMP WORD PTR [BX] ; IP Ü [BX] üJMP DWORD PTR [BX] ; IP Ü [BX] và CS Ü [BX+2] 139 Kỹ thuật Vi xử lý
  140. Các lệnh nhảy có điều kiện § Có nhiều lệnh nhảy có điều kiện với cú pháp chung là: JMPđk NhanLenh § Nhảy trong phạm vi khoảng cách từ -128 ÷ 127 byte. § Các kí hiệu cần nhớ: • J : Jump (nhảy) • N : Not (không ) • Z : cờ ZF; C : cờ CF; O : cờ OF; S : cờ SF; P : cờ PF • A : Above (lớn hơn – so sánh số không dấu) • B : Below (nhỏ hơn – so sánh số không dấu) • G : Greater (lớn hơn – so sánh số có dấu) • L : Less (lớn hơn – so sánh số có dấu) • E : Equal (bằng) 140 Kỹ thuật Vi xử lý
  141. Nhảy hai bước § Các lệnh nhảy có điều kiện có bước nhảy rất ngắn (khoảng cách từ -128 đến 127 byte) § Muốn nhảy đến nhãn lệnh ở xa thì cần thực hiện qua 2 bước: • Bước 1: nhảy đến một nhãn lệnh trung gian ở gần đó. • Bước 2: từ nhãn lệnh trung gian này sử dụng lệnh JMP để nhảy đến nhãn lệnh ở xa. 141 Kỹ thuật Vi xử lý
  142. Các lệnh nhảy so sánh số có dấu 142 Kỹ thuật Vi xử lý
  143. Các lệnh nhảy so sánh số không dấu 143 Kỹ thuật Vi xử lý
  144. Các lệnh nhảy điều kiện đơn Ký hiệu Chức năng Điều kiện nhảy Nhảy nếu bằng JE / JZ ZF=1 Nhảy nếu bằng 0 Nhảy nếu không bằng JNE / JNZ ZF=0 Nhảy nếu khác 0 JC Nhảy nếu có nhớ CF=1 JNC Nhảy nếu không có nhớ CF=0 JO Nhảy nếu tràn OF=1 JNO Nhảy nếu không tràn OF=0 JS Nhảy nếu kết quả âm SF=1 JNS Nhảy nếu kết quả không SF=0 JP / JPE Nhảy nếu cờ chẵn PF=1 JNP / JPO Nhảy nếu cờ lẻ PF=0 JCXZ Nhảy nếu thanh ghi CX = 0 CX=0 144 Kỹ thuật Vi xử lý
  145. Các câu lệnh lặp § Lệnh LOOP: • Cú pháp: LOOP NhanLenh • Lặp lại các lệnh từ NhanLenh đến hết lệnh LOOP cho đến khi CX = 0 • Sau mỗi lần lặp CX tự động giảm 1 • NhanLenh cách xa lệnh LOOP không quá -128 byte • Thông thường CX được gán bằng số lần lặp trước khi vào vòng lặp. • Ví dụ: MOV AL, 0 ; gán AL = 0 MOV CX, 16 ; số lần lặp LAP: INC AL ; tăng AL thêm 1 LOOP LAP ; lặp 16 lần, AL = 16 145 Kỹ thuật Vi xử lý
  146. Các câu lệnh lặp (tiếp) § Lệnh LOOPE / LOOPZ: • Cú pháp: LOOPE NhanLenh LOOPZ NhanLenh • Lặp lại các lệnh từ NhanLenh đến hết lệnh LOOPE / LOOPZ cho đến khi CX = 0 hoặc ZF = 0 • Phạm vi tác dụng và điều kiện CX: giống lệnh LOOP § Lệnh LOOPNE / LOOPNZ: • Cú pháp: LOOPNE NhanLenh LOOPNZ NhanLenh • Lặp lại các lệnh từ NhanLenh đến hết lệnh LOOPNE / LOOPNZ cho đến khi CX = 0 hoặc ZF = 1 • Phạm vi tác dụng và điều kiện CX: giống lệnh LOOP 146 Kỹ thuật Vi xử lý
  147. Ví dụ 1 § Nhận các kí tự '0' từ bàn phím cho đến khi nhận đủ 20 lần hoặc kí tự nhập vào khác '0'. § Mã lệnh: MOV AH, 1 ; hàm nhập kí tự MOV CX, 20 ; lặp tối đa 20 lần DocKiTu: INT 21h ; nhận 1 kí tự CMP AL, '0' ; so sánh với '0' LOOPZ DocKiTu ; lặp lại DocKiTu 147 Kỹ thuật Vi xử lý
  148. Ví dụ 2 § Nhận các kí tự từ bàn phím cho đến khi nhận đủ 20 kí tự hoặc kí tự nhập vào là ENTER. § Mã lệnh: MOV AH, 1 ; hàm nhập kí tự MOV CX, 20 ; lặp tối đa 20 lần DocKiTu: INT 21h ; nhận 1 kí tự CMP AL, 13 ; so sánh với ENTER LOOPNZ DocKiTu ; lặp lại DocKiTu 148 Kỹ thuật Vi xử lý
  149. 3.2.2. Cấu trúc điều kiện § Các cấu trúc điều kiện thông dụng: • IF THEN • IF THEN ELSE • CASE OF : : : Else END 149 Kỹ thuật Vi xử lý
  150. Cấu trúc IF THEN § IF THEN § Dạng lệnh: CMP ; suy ra từ JMPđksai BoQua ; các lệnh thực hiện BoQua: 150 Kỹ thuật Vi xử lý
  151. Ví dụ lệnh IF THEN § Gán BX = giá trị tuyệt đối của AX § Thuật giải: BX := AX If BX < 0 Then BX := -BX EndIf § Mã lệnh: MOV BX, AX CMP BX, 0 JNL BoQua NEG BX BoQua: 151 Kỹ thuật Vi xử lý
  152. Cấu trúc IF THEN ELSE § IF THEN ELSE § Dạng lệnh: CMP ; suy ra từ JMPđksai Viec2 ; các lệnh thực hiện JMP TiepTuc Viec2: ; các lệnh thực hiện TiepTuc: 152 Kỹ thuật Vi xử lý
  153. Ví dụ lệnh IF THEN ELSE § AL và BL đang chứa mã ASCII của 2 kí tự. Hãy hiển thị ra màn hình kí tự có mã ASCII nhỏ hơn. 153 Kỹ thuật Vi xử lý
  154. Cấu trúc CASE OF CMP ; suy ra từ = JMPđkđúng Viec_1 CMP ; suy ra từ = JMPđkđúng Viec_2 CMP ; suy ra từ = JMPđkđúng Viec_N ; trường hợp còn lại => thực hiện việc N+1 JMP TiepTuc Viec_1: ; thực hiện việc 1 JMP TiepTuc Viec_2: ; thực hiện việc 2 JMP TiepTuc Viec_N: ; thực hiện việc N TiepTuc: 154 Kỹ thuật Vi xử lý
  155. Ví dụ lệnh CASE OF § Kiểm tra nếu AX 0 thì gán BX = 1 155 Kỹ thuật Vi xử lý
  156. Điều kiện chứa AND § If AND Then § Dạng lệnh: CMP ; suy ra từ JMPđksai BoQua CMP ; suy ra từ JMPđksai BoQua ; thực hiện BoQua: 156 Kỹ thuật Vi xử lý
  157. Ví dụ § Đọc 1 kí tự, nếu là chữ cái hoa thì hiển thị. 157 Kỹ thuật Vi xử lý
  158. Điều kiện chứa OR § If OR Then § Dạng lệnh: CMP ; suy ra từ JMPđkđúng ThucHien CMP ; suy ra từ JMPđkđúng ThucHien JMP BoQua ThucHien: ; thực hiện BoQua: 158 Kỹ thuật Vi xử lý
  159. Ví dụ § Đọc 1 kí tự, nếu là 'y' hoặc 'Y' thì hiển thị lại, nếu không phải thì thoát chương trình. 159 Kỹ thuật Vi xử lý
  160. Ví dụ (tiếp) 160 Kỹ thuật Vi xử lý
  161. 3.2.3. Cấu trúc lặp § Các cấu trúc lặp thông dụng: • FOR DO • REPEAT UNTIL • WHILE DO 161 Kỹ thuật Vi xử lý
  162. Lệnh lặp FOR § FOR DO § Dạng lệnh: ; JCXZ BoQua ; nếu CX = 0 thì không lặp VongLap: LOOP VongLap BoQua: 162 Kỹ thuật Vi xử lý
  163. Ví dụ § Hiển thị ra màn hình 80 dấu '*' § Mã lệnh: MOV CX, 80 ; số kí tự cần hiện MOV AH, 2 ; hàm hiện kí tự MOV DL, '*' ; kí tự cần hiện là * HienSao: INT 21h ; hiện kí tự LOOP HienSao ; lặp lại 80 lần 163 Kỹ thuật Vi xử lý
  164. Lệnh lặp REPEAT UNTIL § REPEAT UNTIL § Dạng lệnh: VongLap: ; thân vòng lặp CMP ; suy ra từ JMPđksai VongLap 164 Kỹ thuật Vi xử lý
  165. Ví dụ 1 § Đọc vào các kí tự cho đến khi gặp ENTER § Mã lệnh: MOV AH, 1 ; hàm đọc kí tự DocKiTu: INT 21h ; đọc 1 kí tự vào AL CMP AL, 13 ; kí tự là ENTER ? JNE DocKiTu ; sai => lặp tiếp 165 Kỹ thuật Vi xử lý
  166. Ví dụ 2 – REPEAT lồng với FOR § Hiển thị ra 5 dòng, mỗi dòng gồm 50 dấu '*' § Mã lệnh: MOV BL, 5 ; số dòng cần hiện HienDong: MOV CX, 50 ; hiện 50 dấu * trên 1 dòng MOV AH, 2 ; hàm hiện kí tự MOV DL, '*' ; DL = kí tự cần hiện VietSao: INT 21h ; gọi hàm hiện kí tự trong DL LOOP VietSao ; lặp lại cho đến khi đủ 50 '*' MOV DL, 10 ; xuống dòng INT 21h MOV DL, 13 ; về đầu dòng INT 21h DEC BL ; giảm số dòng cần phải hiện tiếp JNZ HienDong ; chưa hết 5 dòng => quay lại 166 Kỹ thuật Vi xử lý
  167. Lệnh lặp WHILE DO § WHILE DO § Dạng lệnh: VongLap: CMP ; suy ra từ JMPđksai DungLap ; sai thì dừng ; thực hiện JMP VongLap ; lặp lại DungLap: 167 Kỹ thuật Vi xử lý
  168. Ví dụ § Nhập 1 dòng kết thúc bằng ENTER. Đếm số kí tự đã được nhập. § Mã lệnh: MOV DX, 0 ; khởi tạo bộ đếm = 0 MOV AH, 1 ; hàm đọc kí tự DocKiTu: INT 21h ; đọc 1 kí tự vào AL CMP AL, 13 ; kí tự đó là ENTER ? JE DungLap ; đúng => DungLap INC DX ; sai => tăng bộ đếm lên 1 JMP DocKiTu ; lặp lại DungLap: 168 Kỹ thuật Vi xử lý
  169. Nội dung chương 3 3.1. Mở đầu về lập trình hợp ngữ 3.2. Các cấu trúc lập trình với hợp ngữ 3.3. Các lệnh logic, lệnh dịch và lệnh quay 3.4. Ngăn xếp và thủ tục 3.5. Các lệnh nhân, chia 3.6. Các lệnh thao tác chuỗi 3.7. Một số ví dụ 169 Kỹ thuật Vi xử lý
  170. 3.3. Các lệnh logic, dịch và quay 3.3.1. Các lệnh logic 3.3.2. Các lệnh dịch 3.3.3. Các lệnh quay 3.3.4. Vào-ra số nhị phân và Hexa 170 Kỹ thuật Vi xử lý
  171. 3.3.1. Các lệnh logic § Các phép toán logic: § Các lệnh logic: AND, OR, XOR, NOT, TEST 171 Kỹ thuật Vi xử lý
  172. Các lệnh AND, OR và XOR § Cú pháp: • AND đích, nguồn ; đích Ü đích AND nguồn • OR đích, nguồn ; đích Ü đích OR nguồn • XOR đích, nguồn ; đích Ü đích XOR nguồn • TEST đích, nguồn ; Phép AND nhưng không thay đổi đích § Chú ý: • Toán hạng nguồn: hằng số, thanh ghi hay ngăn nhớ • Toán hạng đích: thanh ghi hay ngăn nhớ • Hai toán hạng không được đồng thời là ngăn nhớ § Ảnh hưởng tới các cờ: • SF, ZF, PF phản ánh kết quả của lệnh • AF không xác định • CF = OF = 0 172 Kỹ thuật Vi xử lý
  173. Các ví dụ § VD 1: Đổi mã ASCII của 1 chữ số thành số tương ứng. • Giả sử AL chứa kí tự (chẳng hạn '5' – mã ASCII là 35h) • Cần chuyển AL về giá trị chữ số (là 5) • Thực hiện: SUB AL, 30h hoặc AND AL, 0Fh § VD 2: Đổi chữ thường thành chữ hoa. • Giả sử DL chứa kí tự chữ thường, cần chuyển về chữ hoa. • Thực hiện: SUB DL, 20h hoặc AND DL, 0DFh § VD 3: Xóa thanh ghi AX về 0. • Thực hiện: XOR AX, AX § VD 4: Kiểm tra xem AX có bằng 0 hay không? • Thực hiện: OR AX, AX ; AX = 0 Û ZF = 1 173 Kỹ thuật Vi xử lý
  174. Lệnh NOT § Cú pháp: NOT đích § Lệnh này không ảnh hưởng đến cờ 174 Kỹ thuật Vi xử lý
  175. Lệnh TEST § Cú pháp: TEST đích, nguồn § Thực hiện phép toán AND nhưng không thay đổi đích mà chỉ cập nhật các cờ. § Các cờ bị tác động: • SF, ZF, PF phản ánh kết quả của lệnh • AF không xác định • CF = OF = 0 § Ví dụ: Kiểm tra tính chẵn lẻ của AL • AL chẵn Û bit LSB của = 0 • Thực hiện: TEST AL, 1 ; AL chẵn Û ZF = 1 175 Kỹ thuật Vi xử lý
  176. 3.3.2. Các lệnh dịch § Các lệnh dịch và quay có 2 dạng: • Dịch (hoặc quay) 1 vị trí: Lệnh đích, 1 • Dịch (hoặc quay) N vị trí: Lệnh đích, CL ; với CL = N 176 Kỹ thuật Vi xử lý
  177. Các lệnh dịch trái § Dịch trái số học (SAL – Shift Arithmetically Left) và dịch trái logic (SHL – Shift (Logically) Left): • SAL đích, 1 hoặc SAL đích, CL • SHL đích, 1 hoặc SHL đích, CL § Lệnh SAL và SHL là tương đương § Tác động vào các cờ: • SF, PF, ZF phản ánh kết quả • AF không xác định • CF chứa bit cuối cùng được dịch ra khỏi đích • OF = 1 nếu kết quả bị thay đổi dấu trong phép dịch cuối cùng 177 Kỹ thuật Vi xử lý
  178. Các lệnh dịch phải § Dịch phải logic: SHR – Shift (Logically) Right • Cú pháp: SHR đích, 1 SHR đích, CL • Các cờ bị tác động như là lệnh dịch trái • Minh họa: 178 Kỹ thuật Vi xử lý
  179. Các lệnh dịch phải (tiếp) § Dịch phải số học: SAR – Shift Arithmetically Right • Cú pháp: SAR đích, 1 SAR đích, CL • Các cờ bị tác động như là lệnh SHR • Minh họa: 179 Kỹ thuật Vi xử lý
  180. 3. Các lệnh quay § Các dạng lệnh quay: • ROL : quay trái • ROR : quay phải • RCL : quay trái qua cờ nhớ • RCR : quay phải qua cờ nhớ § Tác động vào các cờ: • SF, PF, ZF phản ánh kết quả • AF không xác định • CF chứa bit cuối cùng bị dịch ra khỏi toán hạng • OF = 1 nếu kết quả bị thay đổi dấu trong lần quay cuối cùng 180 Kỹ thuật Vi xử lý
  181. Minh họa các lệnh quay 181 Kỹ thuật Vi xử lý
  182. Ví dụ § Xác định giá trị của AX và BX dưới dạng Hexa sau khi thực hiện đoạn chương trình sau: MOV CX, 16 MOV AX, 5A6Bh LAP: ROL AX, 1 RCR BX, 1 LOOP LAP 182 Kỹ thuật Vi xử lý
  183. 3.3.4. Vào-ra số nhị phân và Hexa § Các thao tác: • Nhập số nhị phân • In số nhị phân • Nhập số Hexa • In số Hexa 183 Kỹ thuật Vi xử lý
  184. Nhập số nhị phân § Đọc các bit nhị phân từ bàn phím (kết thúc nhập bằng ENTER), chuyển thành số nhị phân rồi lưu vào BX. § Thuật giải: Xóa BX (là thanh ghi chứa kết quả) FOR 16 lần DO Đọc ký tự (‘0’ hoặc ‘1’) Nếu phím Enter được nhấn -> break Chuyển ký tự sang mã nhị phân Dịch trái BX Chèn mã nhị phân vào bit LSB của BX 184 Kỹ thuật Vi xử lý
  185. In số nhị phân § In giá trị ở BX ra màn hình dưới dạng số nhị phân. § Thuật giải: FOR 16 lần DO Quay trái BX (bit MSB của BX được đưa ra CF) IF CF = 1 THEN Đưa ra '1' ELSE Đưa ra '0' END IF END FOR § Có thể dùng lệnh ADC: ADC đích, nguồn đích Ü đích + nguồn + CF 185 Kỹ thuật Vi xử lý
  186. Nhập số Hexa § Đọc các kí tự Hexa từ bàn phím (tối đa 4 chữ số, chỉ nhập các chữ số và các chữ cái hoa, kết thúc nhập bằng ENTER). Chuyển thành số Hexa tương ứng rồi lưu vào BX. § Thuật giải: Xóa BX (là thanh ghi chứa kết quả) FOR 4 lần DO Nhập ký tự (0 đến 9, A đến F) Phím Enter được nhấn ->break Đổi kí tự ra nhị phân Dịch trái BX 4 lần Chèn giá trị mới vào 4 bit thấp nhất của BX 186 Kỹ thuật Vi xử lý
  187. In số Hexa § Đưa giá trị Hexa 4 chữ số trong BX ra màn hình. § Thuật giải: FOR 4 lần DO Chuyển BH vào DL (giá trị cần in nằm trong BX) Dịch phải DL 4 vị trí IF DL < 10 THEN Đổi thành kí tự '0' '9' ELSE Đổi thành kí tự 'A' 'F' END IF Đưa kí tự ra Quay trái BX 4 vị trí END FOR 187 Kỹ thuật Vi xử lý
  188. Nội dung chương 3 3.1. Mở đầu về lập trình hợp ngữ 3.2. Các cấu trúc lập trình với hợp ngữ 3.3. Các lệnh logic, lệnh dịch và lệnh quay 3.4. Ngăn xếp và thủ tục 3.5. Các lệnh nhân, chia 3.6. Các lệnh thao tác chuỗi 3.7. Một số ví dụ 188 Kỹ thuật Vi xử lý
  189. 3.4. Ngăn xếp và thủ tục 3.4.1. Ngăn xếp 3.4.2. Thủ tục 3.4.3. Các ví dụ 189 Kỹ thuật Vi xử lý
  190. 3.4.1. Ngăn xếp § Ngăn xếp (Stack): • Vùng nhớ tổ chức theo cấu trúc LIFO dùng để cất giữ thông tin. • Chiều của Stack từ đáy lên đỉnh ngược với chiều tăng của địa chỉ. § Khai báo ngăn xếp: .STACK kich_thuoc § Ví dụ: .Stack 100h • Khi chương trình được thực thi thì: üSS : chứa địa chỉ đoạn ngăn xếp üSP : chứa địa chỉ offset của đỉnh ngăn xếp. Ban đầu ngăn xếp rỗng nên 0100h cũng là địa chỉ của đáy ngăn xếp (=0100h). 190 Kỹ thuật Vi xử lý
  191. Lệnh PUSH và PUSHF § Lệnh PUSH dùng để cất 1 dữ liệu 16 bit vào trong ngăn xếp. § Cú pháp: PUSH nguồn • nguồn là 1 thanh ghi 16 bit hoặc 1 từ nhớ (2 Byte) § Các bước thực hiện: • SP Ü SP – 2 • Một bản sao của toán hạng nguồn được chuyển vào địa chỉ xác định bởi SS:SP (toán hạng nguồn không đổi) § Lệnh PUSHF cất nội dung của thanh ghi cờ vào trong ngăn xếp. 191 Kỹ thuật Vi xử lý
  192. Ví dụ về lệnh PUSH § Xác định nội dung các Byte nhớ trong Stack. .Stack 100h Start: ; lệnh đầu tiên của chương trình MOV AX, 1234h MOV BX, 5678h PUSH AX PUSH BX 192 Kỹ thuật Vi xử lý
  193. Ví dụ (tiếp) 193 Kỹ thuật Vi xử lý
  194. Lệnh POP và POPF § Lệnh POP dùng để lấy ra 1 từ dữ liệu bắt đầu từ đỉnh ngăn xếp. § Cú pháp: POP đích • đích là 1 thanh ghi 16 bit (trừ IP) hoặc 1 từ nhớ § Các bước thực hiện: • Nội dung của từ nhớ ở địa chỉ xác định bởi SS:SP được chuyển tới toán hạng đích. • SP Ü SP + 2 § Lệnh POPF đưa vào thanh ghi cờ nội dung của từ nhớ ở đỉnh ngăn xếp. 194 Kỹ thuật Vi xử lý
  195. Ví dụ về lệnh POP § Xác định nội dung các Byte nhớ trong Stack. .Stack 100h Start: ; lệnh đầu tiên của chương trình MOV AX, 1234h MOV BX, 5678h PUSH AX PUSH BX POP CX POP DX 195 Kỹ thuật Vi xử lý
  196. Ví dụ (tiếp) 196 Kỹ thuật Vi xử lý
  197. Một số lưu ý § Các lệnh PUSH, PUSHF, POP và POPF không ảnh hưởng đến các cờ. § Các lệnh trên chỉ thao tác với các WORD. § Các lệnh sau là không hợp lệ: • PUSH AH ; thanh ghi 8 bit • POP DL ; thanh ghi 8 bit 197 Kỹ thuật Vi xử lý
  198. Bài tập § Dữ liệu của 1 chương trình hợp ngữ được khai báo dưới dạng: .Data mem1 dw 500 mem2 dw -50 vec1 db 1, 2, 3, 4, 8, 7 vec2 db 10, 20, -10, -20, -30, -40 § Hãy xác định nội dung của DX (Hexa) sau khi thực hiện đoạn lệnh sau: push mem1 push mem2 mov bp, sp mov dx, [bp]+2 a) FFCE b) 0000 c) 01F4 d) FFFF 198 Kỹ thuật Vi xử lý
  199. 3.4.2. Thủ tục § Ngoài thủ tục chính, ta có thể khai báo và sử dụng các thủ tục khác. § Khai báo thủ tục: Tên_thủ_tục PROC Kiểu_thủ_tục RET Tên_thủ_tục ENDP § Trong đó: • Tên_thủ_tục: do người lập trình định nghĩa • Kiểu_thủ_tục: üNEAR : gọi thủ tục ở trong cùng 1 đoạn üFAR : gọi thủ tục ở đoạn khác 199 Kỹ thuật Vi xử lý
  200. Lệnh CALL § Là lệnh gọi chương trình con (thủ tục) § Thông dụng: CALL Tên_thủ_tục § Các bước thực hiện: • Thủ tục NEAR üSP ¬ SP – 2 üCất nội dung của IP (địa chỉ quay về) vào Stack üNạp địa chỉ của lệnh đầu tiên của chương trình con vào IP • Thủ tục FAR üSP ¬ SP – 2 üCất nội dung của CS vào Stack üSP ¬ SP – 2 üCất nội dung của IP vào Stack üNạp vào CS và IP địa chỉ đầu của chương trình con 200 Kỹ thuật Vi xử lý
  201. Lệnh RET § Là lệnh trở về từ chương trình con § Các bước thực hiện: • Trở về kiểu NEAR üIP ¬ word nhớ đỉnh Stack üSP ¬ SP + 2 • Trở về kiểu FAR (RETF) üIP ¬ word nhớ đỉnh Stack üSP ¬ SP + 2 üCS ¬ word nhớ tiếp üSP ¬ SP + 2 201 Kỹ thuật Vi xử lý
  202. Truyền dữ liệu giữa các thủ tục § Các thủ tục của hợp ngữ không có danh sách tham số đi kèm như các ngôn ngữ lập trình bậc cao. § Người lập trình phải nghĩ ra cách truyền dữ liệu giữa các thủ tục. § Các cách truyền dữ liệu thông dụng: • Truyền qua thanh ghi • Sử dụng biến toàn cục • Truyền địa chỉ của dữ liệu • Sử dụng ngăn xếp (thường dùng trong các NNLT bậc cao) 202 Kỹ thuật Vi xử lý
  203. 3.4.3. Các ví dụ § VD1: Nhập 1 chuỗi kí tự kết thúc bởi ENTER. Hiện chuỗi kí tự viết theo thứ tự ngược lại ở dòng tiếp theo. § VD2: Cài đặt các thủ tục viết số nhị phân và số Hexa ra màn hình. 203 Kỹ thuật Vi xử lý
  204. Nội dung chương 3 3.1. Mở đầu về lập trình hợp ngữ 3.2. Các cấu trúc lập trình với hợp ngữ 3.3. Các lệnh logic, lệnh dịch và lệnh quay 3.4. Ngăn xếp và thủ tục 3.5. Các lệnh nhân, chia 3.6. Các lệnh thao tác chuỗi 3.7. Một số ví dụ 204 Kỹ thuật Vi xử lý
  205. 3.5. Các lệnh nhân, chia 3.5.1. Các lệnh MUL và IMUL 3.5.2. Các lệnh DIV và IDIV 3.5.3. Vào-ra số thập phân 205 Kỹ thuật Vi xử lý
  206. 3.5.1. Các lệnh MUL và IMUL § Có sự khác nhau giữa phép nhân các số không dấu với phép nhân các số có dấu. § Lệnh nhân cho các số không dấu: MUL nguồn § Lệnh nhân cho các số có dấu: IMUL nguồn § Các lệnh trên làm việc với byte (cho KQ là 1 word) hoặc word (cho KQ là 1 double word) § nguồn (thanh ghi / ngăn nhớ) được coi là số nhân, nếu nguồn là giá trị: • 8 bit: AX Ü AL x nguồn üSố bị nhân là số 8 bit chứa trong AL üTích là số 16 bit chứa trong AX • 16 bit: DXAX Ü AX x nguồn üSố bị nhân là số 16 bit chứa trong AX üTích là số 32 bit chứa trong DXAX 206 Kỹ thuật Vi xử lý
  207. Ảnh hưởng đến các cờ § SF, ZF, AF, PF : không xác định § Sau lệnh MUL: • CF = OF = 0 nếu nửa cao của kết quả = 0 • CF = OF = 1 trong các trường hợp còn lại § Sau lệnh IMUL: • CF = OF = 0 nếu nửa cao của kết quả chỉ chứa các giá trị của dấu • CF = OF = 1 trong các trường hợp còn lại § Nói cách khác, CF = OF = 1 nghĩa là kết quả quá lớn để chứa trong nửa thấp (AL hoặc AX) của tích. 207 Kỹ thuật Vi xử lý
  208. 3.5.2. Các lệnh DIV và IDIV § Phép chia không dấu: DIV số_chia § Phép chia có dấu: IDIV số_chia § Chia số 16 bit (trong AX) cho số chia 8 bit hoặc chia số 32 bit (trong DXAX) cho số chia 16 bit. § Thương và số dư có cùng kích thước với số chia. • Số chia 8 bit: AL chứa thương, AH chứa số dư • Số chia 16 bit: AX chứa thương, DX chứa số dư § Số dư và số chia trái dấu. § Nếu số chia = 0 hoặc thương nằm ngoài khoảng xác định thì BXL thực hiện INT 0 (lỗi chia cho 0). § Các cờ không xác định sau phép chia. 208 Kỹ thuật Vi xử lý
  209. Sự mở rộng dấu của số bị chia § Trong phép chia cho Word, số bị chia được đặt trong DXAX ngay cả khi nó có thể chứa vừa trong AX. Khi đó DX phải được chuẩn bị như sau: • Với lệnh DIV, DX phải được xóa về 0. • Với lệnh IDIV, DX được lấp đầy bằng bit dấu của AX. Phép biến đổi này được thực hiện bởi lệnh CWD. § Trong phép chia cho Byte, số bị chia được đặt trong AX ngay cả khi nó có thể chứa vừa trong AL. Khi đó AH phải được chuẩn bị như sau: • Với lệnh DIV, AH phải được xóa về 0. • Với lệnh IDIV, AH được lấp đầy bằng bit dấu của AL. Phép biến đổi này được thực hiện bởi lệnh CBW. 209 Kỹ thuật Vi xử lý
  210. Ví dụ § Phép chia cho word: chia -1250 cho 7 MOV AX,-1250 ;AX chứa số bị chia CWD ;Mở rộng dấu vào DX MOV BX,7 ;BX chứa số chia IDIV BX ;AX chứa thương số ;DX chứa số dư 210 Kỹ thuật Vi xử lý
  211. Ví dụ § Phép chia cho byte: chia 122 cho -7 MOV AL,122 ;AL chứa số bị chia CBW ;Mở rộng dấu vào AH MOV BL,-7 ;BL chứa số chia IDIV BL ;AL chứa thương, ;AH chứa số dư 211 Kỹ thuật Vi xử lý
  212. 3.5.3 Vào-ra số thập phân § Các thao tác: • In số thập phân • Nhập số thập phân 212 Kỹ thuật Vi xử lý
  213. In số thập phân § In số nguyên có dấu trong AX ra màn hình dưới dạng số thập phân. § Thuật giải: IF AX < 0 THEN In ra dấu '-' AX := số bù 2 của AX END IF Lấy dạng thập phân của từng chữ số trong AX Đổi các chữ số này ra kí tự rồi in ra màn hình 213 Kỹ thuật Vi xử lý
  214. In số thập phân (tiếp) § Lấy dạng thập phân của từng chữ số trong AX: Đếm := 0 REPEAT Chia số bị chia cho 10 ; số bị chia ban đầu = AX Cất số dư vào trong Stack Đếm := Đếm + 1 UNTIL Thương = 0 § Đổi các chữ số ra kí tự rồi in ra màn hình: FOR Đếm lần DO Lấy từng chữ số từ Stack Đổi ra kí tự In kí tự đó ra màn hình END FOR 214 Kỹ thuật Vi xử lý
  215. Nhập số thập phân § Thuật giải (đơn giản): Tổng := 0 Đọc 1 kí tự ASCII REPEAT Đổi kí tự ra giá trị nhị phân Tổng := Tổng * 10 + giá trị nhận được Đọc kí tự UNTIL kí tự vừa nhận = Enter 215 Kỹ thuật Vi xử lý
  216. Nội dung chương 3 3.1. Mở đầu về lập trình hợp ngữ 3.2. Các cấu trúc lập trình với hợp ngữ 3.3. Các lệnh logic, lệnh dịch và lệnh quay 3.4. Ngăn xếp và thủ tục 3.5. Các lệnh nhân, chia 3.6. Mảng và các chế độ địa chỉ 3.7. Các lệnh thao tác chuỗi 216 Kỹ thuật Vi xử lý
  217. 3.6. Mảng và các chế độ địa chỉ 3.6.1. Mảng một chiều 3.6.2. Các chế độ địa chỉ 3.6.3. Sắp xếp một mảng 3.6.4. Mảng hai chiều 217 Kỹ thuật Vi xử lý
  218. 3.6.1. Mảng một chiều § Mảng một chiều là một dãy có thứ tự các phần tử có cùng một kiểu § Khai báo mảng • MSG DB “abcdef” • W DW 10,20,30,40,50 218 Kỹ thuật Vi xử lý
  219. Mảng một chiều (tiếp) § Địa chỉ của biến mảng gọi là địa chỉ cơ sở của mảng (base address) § Địa chỉ offset của mảng W=0200h -> phân bố mảng trong bộ nhớ 219 Kỹ thuật Vi xử lý
  220. Mảng một chiều (tiếp) § Xác định vị trí phần tử trong mảng • Cộng một hằng số vào địa chỉ cơ sở • Giả sử: mảng A là mảng các phần tử có kích thước S byte, vị trí các phần tử của mảng A 220 Kỹ thuật Vi xử lý
  221. Mảng một chiều (tiếp) § Hoán chuyển các phần tử của mảng • Hoán chuyển phần tử thứ 2 và thứ 4 của mảng W (mảng W) üW[2]: địa chỉ W+2 üW[4]: địa chỉ W+6 MOV AX,W+2 ;AX chứa W[2] XCHG W+6,AX ;AX chứa W[4], W[4]=W[2] MOV W+2,AX ;W[2]=W[4] 221 Kỹ thuật Vi xử lý
  222. 3.6.2. Các chế độ địa chỉ § Chế độ địa chỉ gián tiếp thanh ghi • Địa chỉ offset của toán hạng được chứa trong thanh ghi -> thanh ghi đóng vai trò con trỏ trỏ đến ô nhớ • Khuôn dạng toán hạng [register] • Các thanh ghi có thể: BX,SI,DI,BP üBX,SI,DI -> DS là thanh ghi đoạn üBP -> SS là thanh ghi đoạn 222 Kỹ thuật Vi xử lý
  223. Chế độ địa chỉ gián tiếp thanh ghi § Giả sử: • BX chứa 1000h offset 1000h chứa 1BACh • SI chứa 2000h offset 2000h chứa 20FEh • DI chứa 3000h offset 3000h chứa 031Dh § Kiểm tra tính hợp lệ và kết quả của các lệnh sau a. MOV BX,[BX] b. MOV CX,[SI] c. MOV BX,[AX] d. ADD [SI],[DI] e. INC [DI] 223 Kỹ thuật Vi xử lý
  224. Chế độ địa chỉ cơ sở và địa chỉ chỉ số § Địa chỉ offset=độ dịch + nội dung một thanh ghi • Độ dịch có thể là: üĐịa chỉ offset của một biến üMột hằng số (âm hoặc dương) üĐịa chỉ offset của một biến cộng hoặc trừ với một hằng số • Toán hạng [thanh ghi + độ dịch] [độ dịch + thanh ghi] [thanh ghi]+độ dịch Độ dịch + [thanh ghi] Độ dịch[Thanh ghi] 224 Kỹ thuật Vi xử lý
  225. Chế độ địa chỉ cơ sở và địa chỉ chỉ số § Giả sử mảng A được khai báo A DW 0123h, 0456h, 0789h, 0ABCh BX=2 Offset 0002 chứa 1084h SI=4 Offset 0004 chứa 2BACh DI chứa 1 § Kiểm tra tính hợp lệ của các lệnh sau đây và kết quả của các lệnh a. MOV AX,[A+BX] b. MOV BX,[BX+2] c. MOV CX,A[SI] d. MOV AX,-2[SI] e. MOV BX,[A+3+DI] 225 Kỹ thuật Vi xử lý
  226. Truy nhập ngăn xếp § Sử dụng thanh ghi cơ sở BP -> truy nhập đoạn ngăn xếp SS:BP § Ví dụ: MOV BP,SP ;SP trỏ đến đỉnh ngăn xếp MOV AX,[BP] ;chuyển đỉnh ngăn xếp vào AX MOV AX,[BP+2] ;chuyển từ thứ hai vào AX 226 Kỹ thuật Vi xử lý
  227. 3.6.3. Sắp xếp mảng Thuật toán: mảng A có N phần tử For i=1 to N-1 { For j=i+1 to N { if A[j] < A[i] { swap (A[i], A[j]); } } } § Yêu cầu: viết chương trình con sắp xếp một chuỗi ký tự (mảng byte) theo thứ tự tăng dần của mã ASCII. Tham số đầu vào cho chương trình con là địa chỉ mảng và số phần tử của mảng 227 Kỹ thuật Vi xử lý
  228. 3.6.4. Mảng hai chiều § Mảng hai chiều là mảng của các mảng: một mảng một chiều mà mỗi phần tử của nó lại là một mảng một chiều § Các phần tử được xếp vào các hàng và cột § Mảng hai chiều có thể được lưu trữ theo • Thứ tự hàng: các phần tử hàng 1 được lưu trữ, tiếp đến là hàng 2 • Thứ tự cột: các phần tử cột 1 được lưu trữ, tiếp đến là cột 2 228 Kỹ thuật Vi xử lý
  229. Mảng hai chiều (tiếp) § Xác định vị trí một phần tử trong mảng hai chiều • Giả sử: mảng A kích thước M*N lưu theo thứ tự hàng, kích thước mỗi phần tử là S, để tìm A[i,j] ta xác định: üVị trí bắt đầu hàng i: A + (i-1)*N*S üVị trí của phần tử thứ j trong hàng: (j-1)*S Thứ tự hàng A[I,j]=A+((i-1)*N + (j-1))*S Thứ tự cột A[I,j]=A+((i-1)+(j-1)*M)*S 229 Kỹ thuật Vi xử lý
  230. Chế độ địa chỉ chỉ số cơ sở § Địa chỉ Offset của toán hạng là tổng của: • Nội dung của thanh ghi cơ sở (BX hay BP) • Nội dung của một thanh ghi chỉ số (SI hay DI) • (có thể) Địa chỉ offset của một biến byte • (có thể) Một hằng số (âm hay dương) VD: MOV AX,[BX+SI+W] 230 Kỹ thuật Vi xử lý
  231. 3.7. Các lệnh thao tác chuỗi 3.7.1. Cờ định hướng 3.7.2. Chuyển một chuỗi 3.7.3. Lưu kí tự vào chuỗi 3.7.4. Nạp kí tự của chuỗi 3.7.5. Tìm kí tự trong chuỗi 3.7.6. So sánh chuỗi 3.7.7. Tổng kết thao tác chuỗi 231 Kỹ thuật Vi xử lý
  232. 3.7.1. Cờ định hướng § Cờ định hướng DF (Direction Flag) xác định hướng cho các thao tác chuỗi. § Các thao tác chuỗi được thực hiện thông qua 2 thanh ghi chỉ số SI và DI. § Nếu DF = 0 thì SI và DI được xử lý theo chiều tăng của địa chỉ bộ nhớ (từ trái qua phải trong chuỗi). § Nếu DF = 1 thì SI và DI được xử lý theo chiều giảm của địa chỉ bộ nhớ (từ phải qua trái trong chuỗi). 232 Kỹ thuật Vi xử lý
  233. Các lệnh CLD và STD § Lệnh CLD (Clear Direction Flag): xóa cờ hướng CLD ; xóa DF = 0 § Lệnh STD (Set Direction Flag): thiết lập cờ hướng STD ; thiết lập DF = 1 § Các lệnh này không ảnh hưởng đến các cờ khác. 233 Kỹ thuật Vi xử lý
  234. 3.7.2. Chuyển một chuỗi § Bài toán: giả sử có 2 chuỗi được định nghĩa như sau: .DATA STRING1 DB 'BACH KHOA' STRING2 DB 9 DUP (?) § Cần chuyển nội dung của chuỗi STRING1 (chuỗi nguồn) sang chuỗi STRING2 (chuỗi đích). 234 Kỹ thuật Vi xử lý
  235. Các lệnh liên quan § Lệnh: MOVSB (Move String Byte) • Chuyển 1 phần tử 1 byte của chuỗi gốc (trỏ bởi DS:SI) sang 1 phần tử của chuỗi đích (trỏ bởi ES:DI). • Sau khi thực hiện: üSI và DI tăng thêm 1 nếu cờ hướng DF = 0 (dùng lệnh CLD) üSI và DI giảm đi 1 nếu cờ hướng DF = 1 (dùng lệnh STD) § Lệnh: MOVSW (Move String Word) • Chuyển 1 phần tử 1 word (2 byte) của chuỗi gốc (trỏ bởi DS:SI) sang 1 phần tử của chuỗi đích (trỏ bởi ES:DI). • Sau khi thực hiện: üSI và DI tăng thêm 2 nếu cờ hướng DF = 0 (dùng lệnh CLD) üSI và DI giảm đi 2 nếu cờ hướng DF = 1 (dùng lệnh STD) 235 Kỹ thuật Vi xử lý
  236. Các lệnh liên quan (tiếp) § Để chuyển nhiều kí tự ta cần sử dụng các lệnh lặp. § Lệnh: REP • Lặp lại lệnh viết sau đó cho đến khi CX = 0 • Mỗi lần lặp CX giảm đi 1 Þ số lần lặp phải gán trước vào CX. Ví dụ: MOV CX, 5 REP MOVSB ; chuyển 5 byte từ chuỗi nguồn đến chuỗi đích § Lệnh: REPE/REPZ • Lặp lại lệnh viết sau đó cho đến khi CX = 0 hoặc ZF = 0 § Lệnh: REPNE/REPNZ • Lặp lại lệnh viết sau đó cho đến khi CX = 0 hoặc ZF = 1 236 Kỹ thuật Vi xử lý
  237. Ví dụ MOV AX, @DATA MOV DS, AX ; khởi tạo DS MOV ES, AX ; và ES đều trỏ đến đoạn dữ liệu DATA LEA SI, STRING1 ; SI trỏ đến chuỗi nguồn LEA DI, STRING2 ; DI trỏ đến chuỗi đích CLD ; Xóa cờ hướng MOV CX, 9 ; Số byte cần chuyển REP MOVSB ; Chuyển 9 byte từ STRING1 sang STRING2 237 Kỹ thuật Vi xử lý
  238. Giải thích ví dụ 238 Kỹ thuật Vi xử lý
  239. 3.7.3. Lưu kí tự vào chuỗi § Lệnh: STOSB (Store String Byte from AL) • Chuyển nội dung thanh ghi AL sang 1 phần tử (1 byte) được trỏ bởi ES:DI của chuỗi đích. • Sau khi thực hiện: üDI tăng thêm 1 nếu cờ hướng DF = 0 (dùng lệnh CLD) üDI giảm đi 1 nếu cờ hướng DF = 1 (dùng lệnh STD) § Lệnh: STOSW (Store String Word from AX) • Chuyển nội dung thanh ghi AX sang 1 phần tử (2 byte) được trỏ bởi ES:DI của chuỗi đích. • Sau khi thực hiện: üDI tăng thêm 2 nếu cờ hướng DF = 0 (dùng lệnh CLD) üDI giảm đi 2 nếu cờ hướng DF = 1 (dùng lệnh STD) 239 Kỹ thuật Vi xử lý
  240. Ví dụ 1 § Lưu 5 kí tự 'A' vào đầu chuỗi STRING2 MOV AX, @DATA MOV ES, AX ; ES trỏ đến đoạn dữ liệu DATA LEA DI, STRING2; ES:DI trỏ đến đầu chuỗi STRING2 CLD ; Xóa cờ hướng MOV CX, 5 ; Số kí tự cần lưu MOV AL, 'A' ; Kí tự cần lưu vào chuỗi REP STOSB ; Lặp lưu 5 lần kí tự 'A' vào STRING2 240 Kỹ thuật Vi xử lý
  241. Ví dụ 2 § Nhập các kí tự từ bàn phím rồi lưu vào chuỗi STRING cho đến khi nhập đủ 20 kí tự hoặc gặp phím ENTER. MOV AX, @DATA MOV ES, AX ; ES trỏ đến đoạn dữ liệu DATA LEA DI, STRING ; ES:DI trỏ đến đầu chuỗi STRING CLD ; Xóa cờ hướng MOV CX, 20 ; Số kí tự tối đa được nhập từ bàn phím XOR BX, BX ; Khởi tạo số kí tự được nhập ban đầu = 0 MOV AH, 1 ; Hàm nhập kí tự từ bàn phím DocKiTu: INT 21h ; Nhập 1 kí tự Þ AL chứa mã ASCII của kí tự CMP AL, 13 ; Là phím ENTER ? JZ DungNhap ; Þ Dừng nhập STOSB ; Nếu không phải thì lưu AL vào chuỗi string INC BX ; Tăng số đếm số kí tự được nhập LOOP DocKiTu ; Lặp lại (tối đa 20 lần) DungNhap: 241 Kỹ thuật Vi xử lý
  242. 3.7.4. Nạp kí tự của chuỗi § Lệnh: LODSB (Load String Byte into AL) • Chuyển 1 phần tử (1 byte) được trỏ bởi DS:SI của chuỗi nguồn vào thanh ghi AL. • Sau khi thực hiện: üSI tăng thêm 1 nếu cờ hướng DF = 0 (dùng lệnh CLD) üSI giảm đi 1 nếu cờ hướng DF = 1 (dùng lệnh STD) § Lệnh: LODSW (Load String Word into AX) • Chuyển 1 phần tử (2 byte) được trỏ bởi DS:SI của chuỗi nguồn vào thanh ghi AX. • Sau khi thực hiện: üSI tăng thêm 2 nếu cờ hướng DF = 0 (dùng lệnh CLD) üSI giảm đi 2 nếu cờ hướng DF = 1 (dùng lệnh STD) 242 Kỹ thuật Vi xử lý
  243. Ví dụ § Giả sử STR1 và STR2 là các chuỗi có độ dài là 40 kí tự. Viết đoạn chương trình chuyển các kí tự chữ hoa từ STR1 sang STR2. MOV AX, @DATA MOV DS, AX ; khởi tạo DS MOV ES, AX ; và ES đều trỏ đến đoạn dữ liệu DATA LEA SI, STR1 ; SI trỏ đến chuỗi nguồn STR1 LEA DI, STR2 ; DI trỏ đến chuỗi đích STR2 CLD ; Xóa cờ hướng MOV CX, 40 ; Số kí tự của STR1 cần xét (độ dài xâu STR1) XOR BX, BX ; Khởi tạo số kí tự thực sự được chuyển ban đầu = 0 VongLap: LODSB ; Nạp 1 kí tự của STR1 vào AL CMP AL, 'A' ; Nếu AL 'Z' Þ không phải là chữ hoa JA LapTiep ; thì xét kí tự tiếp theo STOSB ; Nếu AL là chữ cái hoa thì cất vào chuỗi STR2 INC BX ; Tăng số đếm số chữ cái hoa LapTiep: LOOP VongLap ; Lặp lại, xét kí tự tiếp theo của STR1 243 Kỹ thuật Vi xử lý
  244. 3.7.5. Tìm kí tự trong chuỗi § Lệnh: SCASB (Scan String Byte) • Trừ thử nội dung của AL cho 1 byte đích đang được trỏ bởi ES:DI, không thay đổi giá trị AL mà chỉ cập nhật cờ. • Sau khi thực hiện: üDI tăng thêm 1 nếu cờ hướng DF = 0 (dùng lệnh CLD) üDI giảm đi 1 nếu cờ hướng DF = 1 (dùng lệnh STD) § Lệnh: SCASW (Scan String Word) • Trừ thử nội dung của AX cho 1 word đích đang được trỏ bởi ES:DI, không thay đổi giá trị AX mà chỉ cập nhật cờ. • Sau khi thực hiện: üDI tăng thêm 2 nếu cờ hướng DF = 0 (dùng lệnh CLD) üDI giảm đi 2 nếu cờ hướng DF = 1 (dùng lệnh STD) 244 Kỹ thuật Vi xử lý
  245. Ví dụ 1 § Cho 1 chuỗi được khai báo như sau: .DATA STRING1 DB 'ABC' § Khảo sát đoạn chương trình sau: MOV AX, @DATA MOV ES, AX CLD LEA DI, STRING1 MOV AL, 'B' SCASB SCASB 245 Kỹ thuật Vi xử lý
  246. Ví dụ 1 (tiếp) 246 Kỹ thuật Vi xử lý
  247. Ví dụ 2 § Tìm chữ cái 'A' đầu tiên trong chuỗi STRING2 có độ dài 40 kí tự. § Đoạn chương trình: MOV AX, @DATA MOV ES, AX ; ES trỏ đến đoạn dữ liệu CLD ; Xóa cờ hướng LEA DI, STRING2 ; ES:DI trỏ đến chuỗi đích STRING2 MOV CX, 40 ; Độ dài chuỗi STRING2 MOV AL, 'A' ; AL chứa kí tự cần tìm REPNE SCASB ; Tìm cho đến khi thấy hoặc CX=0 § Ra khỏi đoạn chương trình: • Nếu ZF = 1 thì ES:[DI-1] là kí tự 'A' đầu tiên tìm thấy • Nếu ZF = 0 thì trong chuỗi STRING2 không chứa kí tự 'A' 247 Kỹ thuật Vi xử lý
  248. 3.7.6. So sánh chuỗi § Lệnh: CMPSB (Compare String Byte) • Trừ thử 1 byte ở địa chỉ DS:SI cho 1 byte ở địa chỉ ES:DI, kết quả không được lưu lại mà chỉ cập nhật cờ. • Sau khi thực hiện: üSI, DI tăng thêm 1 nếu cờ hướng DF = 0 (dùng lệnh CLD) üSI, DI giảm đi 1 nếu cờ hướng DF = 1 (dùng lệnh STD) § Lệnh: CMPSW (Compare String Word) • Trừ thử 1 word ở địa chỉ DS:SI cho 1 word ở địa chỉ ES:DI, kết quả không được lưu lại mà chỉ cập nhật cờ. • Sau khi thực hiện: üSI, DI tăng thêm 2 nếu cờ hướng DF = 0 (dùng lệnh CLD) üSI, DI giảm đi 2 nếu cờ hướng DF = 1 (dùng lệnh STD) 248 Kỹ thuật Vi xử lý
  249. Ví dụ § Cho 2 chuỗi được khai báo như sau: .DATA STRING1 DB 'ABC' STRING2 DB 'ACB' § Khảo sát đoạn chương trình sau: MOV AX, @DATA MOV DS, AX MOV ES, AX CLD LEA SI, STRING1 LEA DI, STRING2 CMPSB CMPSB CMPSB 249 Kỹ thuật Vi xử lý
  250. Ví dụ (tiếp) 250 Kỹ thuật Vi xử lý
  251. 3.7.7. Tổng kết thao tác chuỗi 251 Kỹ thuật Vi xử lý
  252. Ví dụ VD1: cho phep nguoi dung nhap mot chuoi tu ban phim (luu vao str1), chuoi co chieu dai toi da 20 ky tu, qua trinh nhap cung co the ket thuc khi nguoi dung bam phim Enter. Luu chuoi str1 theo chieu nguoc lai vao chuoi str2 va hien thi chuoi str2 VD2: Viet chuong trinh con dem so ky tu hoa trong mot chuoi (co ket thuc bang ‘$’). Dau vao la thanh ghi BX chua dia chi co so cua chuoi, dau ra la thanh ghi CX chua so ky tu hoa 252 Kỹ thuật Vi xử lý
  253. CHƯƠNG 4 Bộ vi xử lý 8088/8086 và nối ghép với bộ nhớ 253 Kỹ thuật Vi xử lý
  254. Nội dung chương 4 4.1. Bộ vi xử lý 8088 4.2. Các mạch phụ trợ cho 8088 4.3. Các chu kỳ bus 4.4. Bộ nhớ bán dẫn 4.5. Giải mã địa chỉ cho bộ nhớ 254 Kỹ thuật Vi xử lý
  255. 4.1. Bộ vi xử lý 8088 Vi xử lý 8088 §40 chân §Hoạt động ở mức điện áp TTL üLogic 0: 0V üLogic 1: 5V §Có hai chế độ làm việc §Chế độ MIN: cho các hệ thống đơn giản, chỉ sử dụng một vi xử lý §Chế độ MAX: cho các hệ thống sử dụng nhiều vi xử lý 255 Kỹ thuật Vi xử lý
  256. Sơ đồ chân của 8088 256 Kỹ thuật Vi xử lý
  257. Chế độ MIN § Bus dồn kênh dữ liệu/ địa chỉ/ trạng thái § ADO->AD7: địa chỉ/ dữ liệu § Trong đó o A0->A7: 8 bit thấp của địa chỉ (1 chiều ra) o D0->D7: bus dữ liệu (2 chiều) § Chân ALE là chân chốt o ALE=1: chốt địa chỉ A0->A7 o ALE=0: chốt dữ liệu D0->D7 § A8->A15: 8 bit địa chỉ tiếp theo 257 Kỹ thuật Vi xử lý
  258. Chế độ MIN (tiếp) § A16/S3 -> A19/S6: 4 chân địa chỉ, trạng thái dồn kênh § Chân ALE là chân chốt o ALE=1: chốt địa chỉ A16- >A19 o ALE=0: chốt trạng thái S3- >S6 üS6 = 0 üS5 giá trị của cờ IF üS3-S4: xác định đoạn nhớ đang được truy nhập 258 Kỹ thuật Vi xử lý
  259. Chế độ MIN (tiếp) 259 Kỹ thuật Vi xử lý
  260. Chế độ MIN (tiếp) 260 Kỹ thuật Vi xử lý
  261. Chế độ MIN (tiếp) 261 Kỹ thuật Vi xử lý
  262. Chế độ MIN (tiếp) 262 Kỹ thuật Vi xử lý
  263. Chế độ MIN (tiếp) Các chân tín hiệu điều khiển nối ghép DMA § HOLD: tín hiệu vào từ mạch điều khiển bên ngoài báo cho bộ xử lý để yêu cầu chuyển quyền điều khiển bus § HLDA (Hold Acknowledge): tín hiệu ra báo cho mạch điều khiển bên ngoài biết bộ xử lý chấp nhận chuyển quyền điều khiển bus 263 Kỹ thuật Vi xử lý
  264. Nội dung chương 4 4.1. Bộ vi xử lý 8088 4.2. Các mạch phụ trợ cho 8088 4.3. Các chu kỳ bus 4.4. Bộ nhớ bán dẫn 4.5. Giải mã địa chỉ cho bộ nhớ 264 Kỹ thuật Vi xử lý
  265. 4.2. Các mạch phụ trợ cho 8088 Mạch tạo xung nhịp 8284 - 8088 có thể hoạt động ở hai tần số là 5Mhz và 8Mhz - 8284 được thiết kế chuyên dụng,tạo xung nhịp điều khiển cho 8088 - Khối Reset đưa tín hiệu RESET tới vi xử lý 8088 265 Kỹ thuật Vi xử lý
  266. Các mạch phụ trợ cho 8088 (tiếp) § Mạch chốt 74LS373: dùng để chốt địa chỉ và trạng thái • Chân OC (Output Control): tích cực mức thấp, điều khiển cho phép/ cấm dữ liệu ra • Chân G: chân chốt (Khi OC=0) üG=0 -> đầu ra là dữ liệu trước đó üG=1 -> đầu ra = đầu vào Bảng thật của 74LS373 266 Kỹ thuật Vi xử lý
  267. Các mạch phụ trợ cho 8088 (tiếp) § Mạch khuếch đại & đệm một chiều 74HC244 • Có thể đệm từng nibble (4bit) hoặc đệm một byte (8bit) • Điều khiển bởi hai chân 1OE và 2OE (Output Enable) 267 Kỹ thuật Vi xử lý
  268. Các mạch phụ trợ cho 8088 (tiếp) § Mạch khuếch đại, đệm 2 chiều 74HC245 • Đệm từng byte theo cả hai chiều • Điều khiển dữ liệu qua chân OE (Output Enable) • Điều khiển chiều truyền qua chân DIR (Direction) 268 Kỹ thuật Vi xử lý
  269. Nội dung chương 4 4.1. Bộ vi xử lý 8088 4.2. Các mạch phụ trợ cho 8088 4.3. Các chu kỳ bus 4.4. Bộ nhớ bán dẫn 4.5. Giải mã địa chỉ cho bộ nhớ 269 Kỹ thuật Vi xử lý
  270. 4.3. Chu kỳ bus của 8088 § Một chu kỳ bus (bus cycle) định nghĩa một thao tác cơ bản của bộ vi xử lý để giao tiếp với thiết bị bên ngoài. Ví dụ: đọc/ghi bộ nhớ, đọc/ghi cổng vào ra § Chu kỳ bus của 8088 gồm tối thiểu bốn chu kỳ đồng hồ, được đặt tên là T1, T2, T3 và T4 § Nếu không có chu kỳ bus nào, bộ vi xử lý chuyển sang trạng thái idle (idle state) § Trạng thái chờ (Wait state) cũng có thể chèn vào một chu kỳ bus 270 Kỹ thuật Vi xử lý
  271. Chu kỳ đọc dữ liệu T1: 8088 phát địa chỉ lên bus địa chỉ T2: 8088 phát tín hiệu điều khiển đọc T3: Dữ liệu từ bên ngoài được chuyển lên bus dữ liệu 271 Kỹ thuật Vi xử lý
  272. 4.4. Bộ nhớ bán dẫn § Gồm 2 loại chính: ROM và RAM § ROM (Read Only Memory): bộ nhớ chỉ đọc § Đặc điểm: • Bộ nhớ chủ yếu dùng để đọc thông tin • Bộ nhớ không khả biến • Chứa các chương trình và dữ liệu cố định với hệ thống 272 Kỹ thuật Vi xử lý
  273. ROM (tiếp) § Các loại bộ nhớ ROM: • Maskable ROM (ROM mặt nạ): thông tin được ghi khi chế tạo • PROM (Programmable ROM): üKhi chế tạo chưa có thông tin üCho phép ghi thông tin được 1 lần bằng thiết bị chuyên dụng • EPROM (Erasable PROM): üCho phép xóa bằng tia cực tím üGhi lại bằng thiết bị nạp EPROM • EEPROM (Electrically Erasable PROM): üCó thể xóa bằng tín hiệu điện và ghi lại thông tin ngay trong mạch làm việc (không cần thiết bị ghi riêng) üCó thể xóa và ghi lại ở mức từng Byte üDung lượng nhỏ • Flash Memory: giống EEPROM nhưng: üĐọc/ghi theo từng block üTốc độ rất nhanh üDung lượng lớn 273 Kỹ thuật Vi xử lý
  274. RAM (Random Access Memory) § RAM (Random Access Memory): bộ nhớ truy cập ngẫu nhiên § Đặc điểm: • Là bộ nhớ đọc/ghi (Read/Write Memory – RWM) • Bộ nhớ khả biến • Chứa các thông tin tạm thời 274 Kỹ thuật Vi xử lý
  275. RAM (tiếp) § Các loại bộ nhớ RAM: • SRAM (Static): RAM tĩnh üMỗi phần tử nhớ là một mạch lật 2 trạng thái ổn định → thông tin trên SRAM ổn định üTốc độ nhanh üDung lượng chip nhớ nhỏ üGiá thành đắt üThường dùng làm bộ nhớ Cache • DRAM (Dynamic): RAM động üMỗi phần tử nhớ là một tụ điện rất nhỏ → cứ sau một khoảng thời gian thì điện tích trên tụ điện sẽ bị mất, cho nên thông tin trên DRAM không ổn định → khắc phục bằng mạch làm tươi (refresh) DRAM üTốc độ chậm (do mất thời gian làm tươi DRAM) üDung lượng chip nhớ lớn üGiá thành rẻ 275 üThường dùng làm bộ nhớ chính Kỹ thuật Vi xử lý
  276. Mô hình cơ bản của chip nhớ Tõ nhí 0 Tõ nhí 1 A0 D0 Bé Tõ nhí 2 A1 . Bé D1 gi¶i A2 Ma trËn nhí ®Öm m· . . . 2n x m bit d÷ . ®Þa liÖu . . chØ . . An-1 Dm-1 Tõ nhí 2n-1 §iÒu khiÓn ®äc/ghi CS WE OE 276 Kỹ thuật Vi xử lý
  277. Mô hình cơ bản của chip nhớ (tiếp) § Có n chân địa chỉ (An-1 ÷ A0) : vận chuyển vào chip nhớ được n bit địa chỉ đồng thời → trong chip nhớ có 2n từ nhớ. § Có m chân dữ liệu: (Dm-1 ÷ D0) : cho phép vận chuyển đồng thời được m bit dữ liệu → độ dài từ nhớ là m bit. → Dung lượng của chip nhớ là: 2n x m bit § Các chân tín hiệu điều khiển: • CS (Chip Select): tín hiệu điều khiển chọn chip nhớ làm việc • OE (Output Enable): tín hiệu điều khiển đọc dữ liệu của 1 từ nhớ đã được xác định. • WE (Write Enable): tín hiệu điều khiển ghi dữ liệu vào 1 từ nhớ đã được xác định. 277 Kỹ thuật Vi xử lý
  278. Hoạt động của chip nhớ § Hoạt động đọc: • Các bit địa chỉ được đưa đến các chân địa chỉ. • Tín hiệu điều khiển chọn chip nhớ làm việc được đưa đến CS • Tín hiệu điều khiển đọc đưa đến OE • Dữ liệu từ ngăn nhớ tương ứng với địa chỉ đã có sẽ được đưa ra các chân dữ liệu. 278 Kỹ thuật Vi xử lý
  279. Hoạt động của chip nhớ (tiếp) § Hoạt động ghi: • Các bit địa chỉ được đưa đến các chân địa chỉ • Dữ liệu cần ghi được đưa đến các chân dữ liệu • Tín hiệu điều khiển chọn chip được đưa đến CS • Tín hiệu điều khiển ghi được đưa đến WE • Dữ liệu từ các chân dữ liệu sẽ được ghi vào ngăn nhớ tương ứng. 279 Kỹ thuật Vi xử lý
  280. Một số chip nhớ thông dụng § EPROM • EPROM 2716 2K x 8bit • EPROM 2732 4K x 8bit • EPROM 2764 8K x 8bit • EPROM 27128 16K x 8bit • EPROM 27256 32K x 8bit • EPROM 27512 64K x 8bit • EPROM 27010 128K x 8bit § RAM • SRAM 4361 64K x 1bit • SRAM 4363 16K x 4bit • SRAM 43254 64K x 4bit • SRAM 43256A 32K x 8bit 280 Kỹ thuật Vi xử lý
  281. Mở rộng dung lượng cho bộ nhớ bán dẫn § Mỗi IC nhớ có một dung lượng nhớ xác định: một IC có n bit địa chỉ và m bit dữ liệu sẽ có dung lượng là 2n x m bit § Để tăng dung lượng nhớ -> phải ghép nối nhiều IC với nhau nhằm • Tăng độ dài ngăn nhớ • Tăng số lượng ngăn nhớ • Thiết kế kết hợp 281 Kỹ thuật Vi xử lý
  282. Mở rộng dung lượng cho bộ nhớ bán dẫn Tăng độ dài ngăn nhớ Yêu cầu tổng quát § Cho các chip nhớ 2n x m bit § Thiết kế môđun nhớ 2n x (k.m) bit Sử dụng k chip nhớ 282 Kỹ thuật Vi xử lý
  283. Tăng độ dài ngăn nhớ Ví dụ: • Cho chip nhớ SRAM 4K x 4 bit • Thiết kế môđun nhớ 4K x 8 bit Giải § Dung lượng chip nhớ 212 x 4 bit • Số chân địa chỉ của chip nhớ: 12 chân • Số chân dữ liệu của chip nhớ: 4 chân § Dung lượng môđun nhớ 212 x 8 bit • Số chân địa chỉ của môđun nhớ: 12 chân • Số chân dữ liệu của môđun nhớ: 8 chân -> Cần 2 chip nhớ để thiết kế môđun 283 Kỹ thuật Vi xử lý
  284. Tăng độ dài ngăn nhớ Môđun nhớ 4K x 8 bit 284 Kỹ thuật Vi xử lý
  285. Mở rộng dung lượng cho bộ nhớ bán dẫn Tăng số lượng ngăn nhớ Yêu cầu tổng quát § Cho các chip nhớ 2n x m bit § Thiết kế môđun nhớ 2k x 2n x m bit §Sử dụng 2k chip nhớ §n+k: số đường địa chỉ 285 Kỹ thuật Vi xử lý
  286. Tăng độ dài ngăn nhớ Ví dụ: • Cho các chip nhớ SRAM 4K x 8 bit • Thiết kế môđun nhớ 8K x 8 bit Giải § Dung lượng chip nhớ 212 x 8 bit • Số chân địa chỉ của chip nhớ: 12 chân • Số chân dữ liệu của chip nhớ: 8 chân § Dung lượng môđun nhớ 213 x 8 bit • Số chân địa chỉ của môđun nhớ: 13 chân • Số chân dữ liệu của môđun nhớ: 8 chân -> Cần 2 chip nhớ để thiết kế môđun 286 Kỹ thuật Vi xử lý
  287. Tăng độ dài ngăn nhớ 287 Kỹ thuật Vi xử lý
  288. Mở rộng dung lượng cho bộ nhớ bán dẫn § Một số ví dụ khác • Thiết kế môđun nhớ 16k x 8 bit từ các chip nhớ 4k x 8 bit • Thiết kế môđun nhớ 32k x 8 bit từ các chip nhớ 4k x 8 bit • Thiết kế môđun nhớ 8k x 8 bit từ các chip nhớ 4k x 4 bit 288 Kỹ thuật Vi xử lý
  289. Nội dung chương 4 4.1. Bộ vi xử lý 8088 4.2. Các mạch phụ trợ cho 8088 4.3. Các chu kỳ bus 4.4. Bộ nhớ bán dẫn 4.5. Giải mã địa chỉ cho bộ nhớ 289 Kỹ thuật Vi xử lý
  290. 4.5. Giải mã địa chỉ cho bộ nhớ § Mỗi IC cần được ánh xạ vào không gian nhớ ở một vị trí xác định, như vậy mỗi IC nhớ chiếm một vùng địa chỉ nhất định § Mạch cho phép mỗi IC chiếm một vùng nhớ xác định gọi là mạch giải mã địa chỉ 290 Kỹ thuật Vi xử lý
  291. Giải mã địa chỉ cho bộ nhớ § Có ba phương pháp thiết kế mạch giải mã địa chỉ • Dùng mạch NAND • Dùng bộ giải mã có sẵn • Dùng PROM 291 Kỹ thuật Vi xử lý
  292. Thiết kế mạch giải mã dùng mạch NAND § Ví dụ 1: Thiết kế mạch giải mã địa chỉ cho IC SRAM dung lượng 4k x 8 bit, có địa chỉ bắt đầu là 0x00000 Giải: - Dung lượng 4k x 8 bit ü Địa chỉ bắt đầu : 0x00000 ü Địa chỉ kết thúc : 0x00FFF -> phần ko đổi: 8 bit cao tương ứng tín hiệu từ các chân địa chỉ A12->A19 -> phần thay đổi: 12 bit thấp (A0->A11) 292 Kỹ thuật Vi xử lý
  293. Thiết kế mạch giải mã dùng mạch NAND Mạch giải mã thiết kế theo ví dụ 1 293 Kỹ thuật Vi xử lý
  294. Thiết kế mạch giải mã dùng mạch NAND § Ví dụ 2: Thiết kế mạch giải mã địa chỉ cho IC EPROM dung lượng 8k x 8 bit, có địa chỉ bắt đầu là 0xFE000 Giải: - Dung lượng 8k x 8 bit ü Địa chỉ bắt đầu : 0xFE000 ü Địa chỉ kết thúc : 0xFFFFF -> phần ko đổi: 7 bit cao tương ứng tín hiệu từ các chân địa chỉ A13->A19 -> phần thay đổi: 13 bit thấp (A0->A12) 294 Kỹ thuật Vi xử lý
  295. Thiết kế mạch giải mã dùng mạch NAND Mạch giải mã thiết kế theo ví dụ 2 295 Kỹ thuật Vi xử lý
  296. Thiết kế mạch giải mã dùng mạch NAND § Một số ví dụ: • Thiết kế mạch giải mã địa chỉ cho IC SRAM dung lượng 32k x 8bit, có địa chỉ bắt đầu là 0x00000 • Thiết kế mạch giải mã địa chỉ cho IC EPROM dung lượng 64k x 8bit, có địa chỉ bắt đầu là 0xF0000 296 Kỹ thuật Vi xử lý
  297. Thiết kế dùng bộ giải mã có sẵn § Một số bộ giải mã thông dụng • 74LS138: bộ giải mã 3 đầu vào, 8 đầu ra đảo • 74LS139: bộ giải mãi 2 đầu vào, 4 đầu ra đảo 297 Kỹ thuật Vi xử lý
  298. Bộ giải mã 74LS139 Bộ giải mã 74LS139 § 2 đầu vào (A, B), 4 đầu ra đảo (y0, y1, y2, y3) § Điều khiển bằng chân G 298 Kỹ thuật Vi xử lý
  299. Bộ giải mã 74LS138 Bộ giải mã 74LS138 § 3 đầu vào (A, B, C), 8 đầu ra đảo (y0 -> y7) § 3 tín hiệu điều khiển (G2A, G2B, G1) 299 Kỹ thuật Vi xử lý
  300. Thiết kế dùng bộ giải mã có sẵn § Ví dụ 1: Cho các IC SRAM 2k x 8bit, hãy thiết kế bộ giải mã địa chỉ cho môđun nhớ 8k x 8bit có địa chỉ bắt đầu là 0x00000 Giải: • Xác định số IC SRAM cần thiết: 4 IC • Xác định phân vùng địa chỉ cho từng IC • Thiết kế mạch giải mã địa chỉ và nối ghép các IC nhớ 300 Kỹ thuật Vi xử lý
  301. Phân vùng địa chỉ cho từng IC 301 Kỹ thuật Vi xử lý
  302. Thiết kế mạch giải mã và nối ghép các IC nhớ 302 Kỹ thuật Vi xử lý
  303. Thiết kế dùng bộ giải mã có sẵn § Ví dụ 2: Cho các IC EPROM 16k x 8bit, hãy thiết kế bộ giải mã địa chỉ cho môđun nhớ EPROM 32k x 8bit có địa chỉ bắt đầu là 0xF8000 (Yêu cầu sử dụng bộ giải mãi 74LS138) Giải: • Xác định số IC EPROM cần thiết: 2 IC • Xác định phân vùng địa chỉ cho từng IC • Thiết kế mạch giải mã địa chỉ và nối ghép các IC nhớ 303 Kỹ thuật Vi xử lý
  304. Phân vùng địa chỉ cho từng IC 304 Kỹ thuật Vi xử lý
  305. Thiết kế mạch giải mã và nối ghép các IC nhớ 305 Kỹ thuật Vi xử lý
  306. CHƯƠNG 5 Nối ghép vào ra với 8088 306 Kỹ thuật Vi xử lý
  307. Nội dung chương 5 5.1. Định địa chỉ cổng vào-ra 5.2. Giải mã địa chỉ cho cổng vào-ra 5.3. Nguyên lý bit cổng 5.4. Mạch nối ghép ngoại vi lập trình được 8255A (Programable Peripheral Interface - PPI 8255A) 5.5. Nối ghép truyền dữ liệu nối tiếp 307 Kỹ thuật Vi xử lý
  308. 5.1. Định địa chỉ cổng vào-ra • Nối ghép vào ra là nối ghép giữa bộ VXL với các cổng vào-ra. • Mỗi cổng vào-ra sẽ có 1 địa chỉ xác định. • Thiết bị ngoại vi sẽ được nối ghép và trao đổi dữ liệu thông qua các cổng vào-ra. cæng TBNV IO Bé cæng TBNV vi xö lý IO cæng TBNV IO 308 Kỹ thuật Vi xử lý
  309. Định địa chỉ cổng vào-ra § Hai kiểu định địa chỉ cổng vào-ra. 1. Vào-ra cách biệt (Isolated IO) 2. Vào-ra theo bản đồ bộ nhớ (Memory mapped IO) 309 Kỹ thuật Vi xử lý
  310. Vào-ra cách biệt (Isolated IO) 1. Vào-ra cách biệt (Isolated IO) ü Không gian địa chỉ của bộ nhớ và cổng là riêng biệt ü 8088 có khả năng quản lý không gian nhớ = 1MB (= 220 bytes) ü Quản lý không gian vào-ra = 64KB (= 216 bytes) K G ®Þa chØ bé nhí ¸A K ®Þa chØ vµo r a A ¸A A 19 0 15 0 00000H 0000H 00001H 0001H 00002H FFFFH FFFFFH 310 Kỹ thuật Vi xử lý
  311. Vào-ra cách biệt (Isolated IO) § Để phân biệt truy nhập cổng IO hay bộ nhớ, 8088 có 1 tín hiệu: ì1 ® truy nhËp cæng IO IO/M = í î0 ® truy nhËp bé nhí § Cổng vào ® được điều khiển bằng tín hiệu (đọc) § Cổng ra ® được điều khiển bằng tín hiệu (ghi) § Cổng vào ra (2 chiều) 311 Kỹ thuật Vi xử lý
  312. Vào-ra cách biệt (Isolated IO) § Các lệnh vào ra trực tiếp: • Được dùng để trao đổi dữ liệu với cổng trong trường hợp cổng được thiết kế theo kiểu vào-ra cách biệt. • Lệnh IN: IN AL, địa chỉ cổng (8 bit) (1) cổng cố định, quản IN AX, địa chỉ cổng (16 bit) (2) lý 256 byte cổng (1) : nhận dữ liệu từ cổng 8 bit với địa chỉ được cho trong lệnh ® AL VD : IN AL, 3Ah hay IN AL, 00111010b (2) : nhận dữ liệu từ cổng 16 bit với địa chỉ được cho trong lệnh ® AX VD : IN AX, 40h ® nhận dữ liệu từ 2 cổng 8 bit ( cổng byte) với địa chỉ là 40h và 41h 312 Kỹ thuật Vi xử lý
  313. Vào-ra cách biệt (Isolated IO) IN AL, DX (8 bit) (3) cổng IN AX, DX (16 bit) (4) thay đổi (3) : nhận dữ liệu từ cổng byte ® AL (4) : nhận dữ liệu từ cổng word ® AX DX : thanh ghi chứa địa chỉ cổng, địa chỉ 16 bit (quản lý 65535 byte cổng). VD : Muốn nhận dữ liệu từ cổng 03F8h ® AL ? MOV DX, 03F8h IN AL, DX 313 Kỹ thuật Vi xử lý
  314. Vào-ra cách biệt (Isolated IO) § Lệnh OUT: • OUT địa chỉ cổng, AL (đưa dữ liệu từ AL ra cổng byte) • OUT địa chỉ cổng, AX (đưa dữ liệu từ AX ra cổng word) • VD: OUT DX, AL OUT DX, AX 314 Kỹ thuật Vi xử lý
  315. Vào-ra cách biệt (Isolated IO) § VD1: Giả sử có 1 hệ thống VXL 8088 có 2 cổng vào với địa chỉ tương ứng là 3Ah, 3Bh, và 1 cổng ra có địa chỉ là 40h. Hãy viết 1 đoạn chương trình nhận 100 cặp dữ liệu từ 2 cổng vào, cộng lần lượt từng cặp rồi đưa kết quả ra cổng ra (giả thiết số liệu đủ nhỏ để không bị tràn). 315 Kỹ thuật Vi xử lý
  316. Vào-ra cách biệt (Isolated IO) Giải: MOV CX,100 ; số cặp dữ liệu cần nhận LAP: IN AL, 3Ah ; nhận dữ liệu từ cổng 3Ah MOV BL, AL ; đưa dữ liệu AL ? BL IN AL, 3Bh ; nhận dữ liệu từ cổng 3Bh ADD AL, BL ; cộng 2 dữ liệu với nhau OUT 40h, AL ; đưa ra cổng 40h LOOP LAP ; lặp lại 316 Kỹ thuật Vi xử lý
  317. Vào-ra cách biệt (Isolated IO) Thêm: Nếu tổng > 10 ® 40h tổng £ 10 ® 41h MOV CX, 100 LAP: IN AL, 3Ah MOV BL, AL IN AL, 3Bh ADD AL, BL CMP AL ,10 ; AL £ 10 ? JNG NHAY ; đúng ® nhảy OUT 40H, AL ; sai ® đưa AL ra địa chỉ 40h JMP TOP ; nhảy qua NHAY: OUT 41H, AL ; đưa AL ra địa chỉ cổng 41h TOP: LOOP LAP ; lặp lại 317 Kỹ thuật Vi xử lý
  318. Định địa chỉ cổng vào-ra § Hai kiểu định địa chỉ cổng vào-ra. 1. Vào-ra cách biệt (Isolated IO) 2. Vào-ra theo bản đồ bộ nhớ (Memory mapped IO) 318 Kỹ thuật Vi xử lý
  319. Vào-ra theo bản đồ bộ nhớ § Vào-ra theo bản đồ bộ nhớ (Memory mapped IO) • Cổng vào ra được đánh địa chỉ theo không gian địa chỉ bộ nhớ (cổng vào ra được ánh xạ từ không gian nhớ) ® Số bit địa chỉ để đánh cho mỗi cổng = số bit địa chỉ dành cho ngăn nhớ. ® CPU dùng các lệnh trao đổi với ngăn nhớ để trao đổi dữ liệu cổng. 319 Kỹ thuật Vi xử lý
  320. Vào-ra theo bản đồ bộ nhớ VD : Lệnh MOV MOV BL, [2000h] K G ®Þa chØ BN • Lưu ý: Trong thực tế 1 00000H số bộ VXL không có không gian vào- ra cách biệt, vd:Motorola 680x0. cæng IO FFFFFH = cæng IO 320 Kỹ thuật Vi xử lý
  321. Nội dung chương 5 5.1. Định địa chỉ cổng vào-ra 5.2. Giải mã địa chỉ cho cổng vào-ra 5.3. Nguyên lý bit cổng 5.4. Mạch nối ghép ngoại vi lập trình được 8255A (Programable Peripheral Interface - PPI 8255A) 5.5. Nối ghép truyền dữ liệu nối tiếp 321 Kỹ thuật Vi xử lý
  322. Giải mã địa chỉ cho cổng vào-ra § Mỗi cổng IO cần phải có 1 địa chỉ xác định. § Với 8088 cổng có thể được thiết kế theo không gian nhớ, không gian vào-ra 64KB hoặc không gian vào-ra 256 byte. § Có 2 phương pháp giải mã địa chỉ cổng phổ biến: • Giải mã địa chỉ dùng các cổng logic cơ bản • Giải mã địa chỉ dùng các bộ giải mã có sẵn 322 Kỹ thuật Vi xử lý
  323. Giải mã địa chỉ dùng các cổng logic § Giải mã địa chỉ dùng các cổng logic cơ bản: Ví dụ 1: Thiết kế giải mã địa chỉ cho 1 CỔNG VÀO định địa chỉ theo kiểu vào ra riêng biệt có địa chỉ là 5Fh. __ IO/M = 1 ( truy nhập IO) __ RD =0; A7 A6 A5 A4 A3 A2 A1 A0 5fh 0 1 0 1 1 1 1 1 323 Kỹ thuật Vi xử lý
  324. Giải mã địa chỉ dùng các cổng logic 324 Kỹ thuật Vi xử lý
  325. Giải mã địa chỉ dùng các cổng logic § Ví dụ 2: Thiết kế giải mã địa chỉ cho 1 cổng ra có địa chỉ 39h. __ IO/M = 1 ( truy nhập IO) ___ WR =0; A7 A6 A5 A4 A3 A2 A1 A0 39h 0 0 1 1 1 0 0 1 325 Kỹ thuật Vi xử lý
  326. Giải mã địa chỉ dùng các cổng logic 326 Kỹ thuật Vi xử lý
  327. Giải mã địa chỉ cho cổng vào-ra Giải mã địa chỉ dùng các bộ giải mã có sẵn: • Mạch giải mã 74LS139 (vào 2 ra 4) • Mạch giải mã 74LS138 (vào 3 ra 8) 327 Kỹ thuật Vi xử lý
  328. Giải mã dùng bộ giải mã có sẵn § Ví dụ 1: Thiết kế giải mã địa chỉ cho 8 cổng vào có địa chỉ từ 00 ¸ 07h 328 Kỹ thuật Vi xử lý