Bài giảng Điện tử viễn thông - Chương 2: Bộ vi xử lý Intel 8088/8086
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Điện tử viễn thông - Chương 2: Bộ vi xử lý Intel 8088/8086", để 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:
- bai_giang_dien_tu_vien_thong_chuong_2_bo_vi_xu_ly_intel_8088.ppt
Nội dung text: Bài giảng Điện tử viễn thông - Chương 2: Bộ vi xử lý Intel 8088/8086
- © DHBK 2005 1 Nội dung môn học 1. Giới thiệu chung về hệ vi xử lý 2. Bộ vi xử lý Intel 8088/8086 3. Lập trình hợp ngữ cho 8086 4. Tổ chức vào ra dữ liệu 5. Ngắt và xử lý ngắt 6. Truy cập bộ nhớ trực tiếp DMA 7. Các bộ vi xử lý trên thực tế
- © DHBK 2005 2 Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên trong • Sơ đồ chân • Bản đồ bộ nhớ của máy tính IBM-PC • Các chế độ địa chỉ của 8086 • Cách mã hoá lệnh của 8086 • Mô tả tập lệnh của 8086 • Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 80286
- © DHBK 2005 3 Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên trong q Sơ đồ khối q Các thanh ghi đa năng q Các thanh ghi đoạn q Các thanh ghi con trỏ và chỉ số q Thanh ghi cờ q Hàng đợi lệnh • Sơ đồ chân • Bản đồ bộ nhớ của máy tính IBM-PC • Các chế độ địa chỉ của 8086 • Cách mã hoá lệnh của 8086 • Mô tả tập lệnh của 8086 • Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 80286
- © DHBK 2005 4 Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên trong þ Sơ đồ khối q Các thanh ghi đa năng q Các thanh ghi đoạn q Các thanh ghi con trỏ và chỉ số q Thanh ghi cờ q Hàng đợi lệnh • Sơ đồ chân • Bản đồ bộ nhớ của máy tính IBM-PC • Các chế độ địa chỉ của 8086 • Cách mã hoá lệnh của 8086 • Mô tả tập lệnh của 8086 • Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 80286
- © DHBK 2005 5 Sơ đồ khối 8088/8086 bus địa chỉ BIU Các thanh AX EU 20 bit ghi đa năng BX CX DX Bus trong của CPU SP Các thanh ghi CS 16 bit dữ liệu Các thanh ghi BP đoạn và con trỏ DS 20 bit địa chỉ con trỏ SI lệnh SS DI ES và chỉ số IP Bus dữ liệu Logic ALU 16 bit điều khiển Các thanh ghi tạm thời bus Bus ngoài Khối điều khiển ALU của EU Hàng đợi lệnh Thanh ghi cờ
- © DHBK 2005 6 Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên trong q Sơ đồ khối þ Các thanh ghi đa năng q Các thanh ghi đoạn q Các thanh ghi con trỏ và chỉ số q Thanh ghi cờ q Hàng đợi lệnh • Sơ đồ chân • Bản đồ bộ nhớ của máy tính IBM-PC • Các chế độ địa chỉ của 8086 • Cách mã hoá lệnh của 8086 • Mô tả tập lệnh của 8086 • Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 80286
- © DHBK 2005 7 Các thanh ghi đa năng của 8088/8086 8 bit cao 8 bit thấp •8088/8086 đến 80286 : 16 bits AX AH AL •80386 trở lên: 32 bits EAX, BX BH BL EBX, ECX, EDX CX CH CL DX DH DL • Thanh ghi chứa AX (accumulator): chứa kết quả của các phép tính. Kết quả 8 bit được chứa trong AL • Thanh ghi cơ sở BX (base): chứa địa chỉ cơ sở, ví dụ của bảng dùng trong lệnh XLAT (Translate) • Thanh ghi đếm CX (count): dùng để chứa số lần lặp trong các lệnh lặp (Loop). CL được dùng để chứa số lần dịch hoặc quay trong các lệnh dịch và quay thanh ghi • Thanh ghi dữ liệu DX (data): cùng AX chứa dữ liệu trong các phép tính nhân chia số 16 bit. DX còn được dùng để chứa địa chỉ cổng trong các lệnh vào ra dữ liệu trực tiếp (IN/OUT)
- © DHBK 2005 8 Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên trong q Sơ đồ khối q Các thanh ghi đa năng þ Các thanh ghi đoạn q Các thanh ghi con trỏ và chỉ số q Thanh ghi cờ q Hàng đợi lệnh • Sơ đồ chân • Bản đồ bộ nhớ của máy tính IBM-PC • Các chế độ địa chỉ của 8086 • Cách mã hoá lệnh của 8086 • Mô tả tập lệnh của 8086 • Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 80286
- © DHBK 2005 9 Các thanh ghi đoạn • Tổ chức của bộ nhớ 1 Mbytes q ạ ộ ớ Đo n b nh (segment) FFFFFH ð216 bytes =64 KB ðĐoạn 1: địa chỉ đầu 00000 H ðĐoạn 2: địa chỉ đầu 00010 H ðĐoạn cuối cùng: FFFF0 H q Ô nhớ trong đoạn: ðđịa chỉ lệch: offset ðÔ 1: offset: 0000 ðÔ cuối cùng: offset: FFFF q Địa chỉ vật lý: 1FFFFH ðSegment : offset 1F000H Offset=F000 10000H 1 0 0 0 Địa chỉ vật lý=Segment*16 + offset Thanh ghi đoạn Chế độ thực (real mode) 00000H
- © DHBK 2005 10 Các thanh ghi đoạn • Ví dụ: Địa chỉ vật lý 12345H Địa chỉ đoạn Điạ chỉ lệch 1000 H 2345H 1200 H 0345H 1004 H ? 0300 H ? • Ví dụ: Cho địa chỉ đầu của đoạn: 49000 H, xác định địa chỉ cuối
- © DHBK 2005 11 Các thanh ghi đoạn • Các thanh ghi đoạn: chứa địa chỉ đoạn FFFFF 58FFF Đoạn dữ liệu phụ extra segment 49000 4 9 0 0 ES 43FFF Đoạn ngăn xếp Stack segment 34000 3 4 0 0 SS 30000 2FFFF Đoạn mã Code segment 20000 2 0 0 0 CS 1FFFF Đoạn dữ liệu Data segment 10000 1 0 0 0 DS 00000
- © DHBK 2005 12 Các thanh ghi đoạn • Các đoạn chồng nhau FFFFF s t a d c a k 0A480 t 0A47F a c Stack o 0A280 0 A 2 8 SS d 0A27F e Data 0A0F0 0 A 0 F DS 0A0EF Code 090F0 0 9 0 F CS 00000
- © DHBK 2005 13 Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên trong q Sơ đồ khối q Các thanh ghi đa năng q Các thanh ghi đoạn þ Các thanh ghi con trỏ và chỉ số q Thanh ghi cờ q Hàng đợi lệnh • Sơ đồ chân • Bản đồ bộ nhớ của máy tính IBM-PC • Các chế độ địa chỉ của 8086 • Cách mã hoá lệnh của 8086 • Mô tả tập lệnh của 8086 • Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 80286
- © DHBK 2005 14 Các thanh ghi con trỏ và chỉ số • Chứa địa chỉ lệch (offset) q Con trỏ lệnh IP (instruction pointer): chứa địa chỉ lệnh tiếp theo trong đoạn mã lệnh CS. ðCS:IP q Con trỏ cơ sở BP (Base Pointer): chứa địa chỉ của dữ liệu trong đoạn ngăn xếp SS hoặc các đoạn khác ðSS:BP q Con trỏ ngăn xếp SP (Stack Pointer): chứa địa chỉ hiện thời của đỉnh ngăn xếp ðSS:SP q Chỉ số nguồn SI (Source Index): chứa địa chỉ dữ liệu nguồn trong đoạn dữ liệu DS trong các lệnh chuỗi ðDS:SI q Chỉ số đích (Destination Index): chứa địa chỉ dữ liệu đích trong đoạn dữ liệu DS trong các lệnh chuỗi ðDS:DI q SI và DI có thể được sử dụng như thanh ghi đa năng q 80386 trở lên 32 bit: EIP, EBP, ESP, EDI, ESI
- © DHBK 2005 15 Các thanh ghi con trỏ và chỉ số • Thanh ghi đoạn và thanh ghi lệch ngầm định Segment Offset Chú thích CS IP Địa chỉ lệnh SS SP hoặc BP Địa chỉ ngăn xếp DS BX, DI, SI, số 8 bit Địa chỉ dữ liệu hoặc số 16 bit ES DI Địa chỉ chuỗi đích
- © DHBK 2005 16 Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên trong q Sơ đồ khối q Các thanh ghi đa năng q Các thanh ghi đoạn q Các thanh ghi con trỏ và chỉ số þ Thanh ghi cờ q Hàng đợi lệnh • Sơ đồ chân • Bản đồ bộ nhớ của máy tính IBM-PC • Các chế độ địa chỉ của 8086 • Cách mã hoá lệnh của 8086 • Mô tả tập lệnh của 8086 • Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 80286
- © DHBK 2005 17 Thanh ghi cờ (Flag Register) 15 14 2 1 0 O D I T S Z A P C • 9 bit được sử dụng, 6 cờ trạng thái: q C hoăc CF (carry flag)): CF=1 khi có nhớ hoặc mượn từ MSB q P hoặc PF (parity flag): PF=1 (0) khi tổng số bít 1 trong kết quả là chẵn (lẻ) q A hoặc AF (auxilary carry flag): cờ nhớ phụ, AF=1 khi có nhớ hoặc mượn từ một số BCD thấp sang BCD cao q Z hoặc ZF (zero flag): ZF=1 khi kết quả bằng 0 q S hoặc SF (Sign flag): SF=1 khi kết quả âm q O hoặc OF (Overflow flag): cờ tràn OF=1 khi kết quả là một số vượt ra ngoài giới hạn biểu diễn của nó trong khi thực hiện phép toán cộng trừ số có dấu
- © DHBK 2005 18 Thanh ghi cờ (Flag Register) 15 14 2 1 0 O D I T S Z A P C • 3 cờ điều khiển q T hoăc TF (trap flag)): cờ bẫy, TF=1 khi CPU làm việc ở chế độ chạy từng lệnh q I hoặc IF (Interrupt enable flag): cờ cho phép ngắt, IF=1 thì CPU sẽ cho phép các yêu cầu ngắt (ngắt che được) được tác động (Các lệnh: STI, CLI) q D hoặc DF (direction flag): cờ hướng, DF=1 khi CPU làm việc với chuỗi ký tự theo thứ tự từ phải sang trái (lệnh STD, CLD)
- © DHBK 2005 19 Thanh ghi cờ (Flag Register) • Ví dụ: 80h + 80h 100h q SF=0 vì msb trong kết quả =0 q PF=1 vì có 0 bít của tổng bằng 1 q ZF=1 vì kết qủa thu được là 0 q CF=1 vì có nhớ từ bít msb trong phép cộng q OF=1 vì có tràn trong phép cộng 2 số âm
- © DHBK 2005 20 Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên trong q Sơ đồ khối q Các thanh ghi đa năng q Các thanh ghi đoạn q Các thanh ghi con trỏ và chỉ số q Thanh ghi cờ þ Hàng đợi lệnh • Sơ đồ chân • Bản đồ bộ nhớ của máy tính IBM-PC • Các chế độ địa chỉ của 8086 • Cách mã hoá lệnh của 8086 • Mô tả tập lệnh của 8086 • Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 80286
- © DHBK 2005 21 Hàng đợi lệnh • 4 bytes đối với 8088 và 6 bytes đối với 8086 • Xử lý pipeline Không có pipelining F1 D1 E1 F2 D2 E2 F3 D3 E3 F1 D1 E1 Có pipelining F2 D2 E2 F3 D3 E3
- © DHBK 2005 22 Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên trong • Sơ đồ chân • Bản đồ bộ nhớ của máy tính IBM-PC • Các chế độ địa chỉ của 8086 • Cách mã hoá lệnh của 8086 • Mô tả tập lệnh của 8086 • Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 80286
- © DHBK 2005 23 Intel 8088 • 16-bit processor • introduced in 1979 • 3 mm, 5 to 8 MHz, 29 KTOR, 0.33 to 0.66 MIPS
- © DHBK 2005 24 Intel 8088 •Chế độ Min và chế độ Max: MN/MX = 1 chế độ Min = 0 chế độ Max với bus controller 8288
- © DHBK 2005 25 Intel 8086
- © DHBK 2005 26 Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên trong • Sơ đồ chân • Bản đồ bộ nhớ của máy tính IBM-PC • Các chế độ địa chỉ của 8086 • Cách mã hoá lệnh của 8086 • Mô tả tập lệnh của 8086 • Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 80286
- © DHBK 2005 27 Bản đồ bộ nhớ của máy tính IBM PC Vùng nhớ mở rộng FFFFF Vùng nhớ hệ thống A0000 484 Kbytes 1 Mbytes 9FFFF bộ nhớ thực Vùng nhớ chương trình 640 Kbytes 00000
- © DHBK 2005 28 Bản đồ vùng nhớ chương trình 9FFFF MSDOS 9FFF0 Vùng dành cho các chương trình ứng dụng 08E30 COMMAND.COM 08490 Device drivers (mouse.sys) 02530 MSDOS 01160 IO.SYS 00700 Vùng DOS 00500 Vùng BIOS 00400 00000 Các vector ngắt
- © DHBK 2005 29 Bản đồ vùng nhớ hệ thống FFFFF ROM BIOS F0000 ROM BASIC E0000 Vùng để dành C8000 Video BIOS ROM C0000 Video RAM (text) B0000 Video RAM (đồ hoạ) A0000
- © DHBK 2005 30 Các cổng vào ra • Địa chỉ: 0000H –FFFFH, M/IO =0 FFFF Vùng mở rộng COM1 03F8 Điều khiển đĩa mềm 03F0 CGA adapter 03D0 LPT1 0378 Điều khiển ổ cứng 0320 COM2 02F8 8255 0060 Định thời (8253) 0040 Điều khiển ngắt 0020 0000 Điều khiển DMA
- © DHBK 2005 31 Trình tự khởi động • Khi bật nguồn hoặc nhấn Reset q CS=FFFFh và IP=0000 => địa chỉ FFFF0 chứa chỉ thị chuyển điều khiển đến điểm khới đầu của các chương trình BIOS q Các chương trình BIOS kiểm tra hệ thống và bộ nhớ q Các chương trình BIOS khởi tạo bảng vector ngắt và vùng dữ liệu BIOS q BIOS nạp chương trình khởi động (boot program) từ đĩa vào bộ nhớ q Chương trình khởi động nạp hệ điều hành từ đĩa vào bộ nhớ q Hệ điều hành nạp các chương trình ứng dụng
- © DHBK 2005 32 Vùng nhớ dành riêng của 8088/8086 FFFFF Reset Bootstrap FFFF0 program jump 003FF Các vector ngắt 00000
- © DHBK 2005 33 Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên trong • Sơ đồ chân • Bản đồ bộ nhớ của máy tính IBM-PC • Các chế độ địa chỉ của 8086 q Chế độ địa chỉ thanh ghi q Chế độ địa chỉ tức thì q Chế độ địa chỉ trực tiếp q Chế độ địa chỉ gián tiếp qua thanh ghi q Chế độ địa chỉ tương đối cơ sở q Chế độ địa chỉ tương đối chỉ số q Chế độ địa chỉ tương đối chỉ số cơ sở • Cách mã hoá lệnh của 8086 • Mô tả tập lệnh của 8086 • Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 80286
- © DHBK 2005 34 Chế độ địa chỉ thanh ghi (Register Addressing Mode) • Dùng các thanh ghi như là các toán hạng • Tốc độ thực hiện lệnh cao • Ví dụ: q MOV BX, DX ; Copy nội dung DX vào BX q MOV AL, BL ; Copy nội dung BL vào AL q MOV AL, BX ; không hợp lệ vì các thanh ghi có kích thước khác nhau q MOV ES, DS ; không hợp lệ (segment to segment) q MOV CS, AX ; không hợp lệ vì CS không được dùng làm thanh ghi đích q ADD AL, DL ; Cộng nội dung AL và DL rồi đưa vào AL
- © DHBK 2005 35 Chế độ địa chỉ tức thì (Immediate Addressing Mode) • Toán hạng đích là thanh ghi hoặc ô nhớ • Toán hạng nguồn là hằng số • Dùng để nạp hằng số vào thanh thi (trừ thanh ghi đoạn và thanh cờ) hoặc vào ô nhớ trong đoạn dữ liệu DS • Ví dụ: q MOV BL, 44 ; Copy số thập phân 44 vào thanh ghi BL q MOV AX, 44H ; Copy 0044H vào thanh ghi AX q MOV AL, ‘A’ ; Copy mã ASCII của A vào thanh ghi AL q MOV DS, 0FF0H ; không hợp lệ q MOV AX, 0FF0H ; q MOV DS, AX ; q MOV [BX], 10 ; copy số thập phân 10 vào ô nhớ DS:BX
- © DHBK 2005 36 Chế độ địa chỉ trực tiếp (Direct Addressing Mode) • Một toán hạng là địa chỉ ô nhớ chứa dữ liệu • Toán hạng kia chỉ có thể là thanh ghi • Ví dụ: q MOV AL, [1234H] ; Copy nội dung ô nhớ có địa chỉ DS:1234 vào AL q MOV [ 4320H ], CX ; Copy nội dung của CX vào 2 ô nhớ liên tiếp DS: 4320 và DS: 4321
- © DHBK 2005 37 Chế độ địa chỉ gián tiếp qua thanh ghi (Register indirect Addressing Mode) • Một toán hạng là thanh ghi chứa địa chỉ của 1 ô nhớ dữ liệu • Toán hạng kia chỉ có thể là thanh ghi • Ví dụ: q MOV AL, [BX] ; Copy nội dung ô nhớ có địa chỉ DS:BX vào AL q MOV [ SI ], CL ; Copy nội dung của CL vào ô nhớ có địa chỉ DS:SI q MOV [ DI ], AX ; copy nội dung của AX vào 2 ô nhớ liên tiếp DS: DI và DS: (DI +1)
- © DHBK 2005 38 Chế độ địa chỉ tương đối cơ sở (Based relative Addressing Mode) • Một toán hạng là thanh ghi cơ sở BX, BP và các hằng số biểu diễn giá trị dịch chuyển • Toán hạng kia chỉ có thể là thanh ghi • Ví dụ: q MOV CX, [BX]+10 ; Copy nội dung 2 ô nhớ liên tiếp có địa chỉ DS:BX+10 và DS:BX+11 vào CX q MOV CX, [BX+10] ; Cách viết khác của lệnh trên q MOV AL, [BP]+5 ; copy nội dung của ô nhớ SS:BP+5 vào thanh ghi AL
- © DHBK 2005 39 Chế độ địa chỉ tương đối chỉ số (Indexed relative Addressing Mode) • Một toán hạng là thanh ghi chỉ số SI, DI và các hằng số biểu diễn giá trị dịch chuyển • Toán hạng kia chỉ có thể là thanh ghi • Ví dụ: q MOV AX, [SI]+10 ; Copy nội dung 2 ô nhớ liên tiếp có địa chỉ DS:SI+10 và DS:SI+11 vào AX q MOV AX, [SI+10] ; Cách viết khác của lệnh trên q MOV AL, [DI]+5 ; copy nội dung của ô nhớ DS:DI+5 vào thanh ghi AL
- © DHBK 2005 40 ChChếế đđộộ đđịịaa chchỉỉ ttươươngng đđốốii chchỉỉ ssốố ccơơ ssởở (( Based Indexed relative Addressing Mode)) • Ví dụ: q MOV AX, [BX] [SI]+8 ; Copy nội dung 2 ô nhớ liên tiếp có địa chỉ DS:BX+SI+8 và DS:BX+SI+9 vào AX q MOV AX, [BX+SI+8] ; Cách viết khác của lệnh trên q MOV CL, [BP+DI+5] ; copy nội dung của ô nhớ SS:BP+DI+5 vào thanh ghi CL
- © DHBK 2005 41 Tóm tắt các chế độ địa chỉ Chế độ địa chỉ Toán hạng Thanh ghi đoạn ngầm định Thanh ghi Thanh ghi Tức thì Dữ liệu Trực tiếp [offset] DS Gián tiếp qua thanh ghi [BX] DS [SI] DS [DI] DS Tương đối cơ sở [BX] + dịch chuyển DS [BP] + dịch chuyển SS Tương đối chỉ số [DI] + dịch chuyển DS [SI] + dịch chuyển DS Tương đối chỉ số cơ sở [BX] + [DI]+ dịch chuyển DS [BX] + [SI]+ dịch chuyển DS [BP] + [DI]+ dịch chuyển SS [BP] + [SI]+ dịch chuyển SS
- © DHBK 2005 42 Bỏ chế độ ngầm định thanh ghi đoạn (Segment override) • Ví dụ: q MOV AL, [BX]; Copy nội dung ô nhớ có địa chỉ DS:BX vào AL q MOV AL, ES:[BX] ; Copy nội dung ô nhớ có địa chỉ ES:BX vào AL
- © DHBK 2005 43 Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên trong • Sơ đồ chân • Bản đồ bộ nhớ của máy tính IBM-PC • Các chế độ địa chỉ của 8086 • Cách mã hoá lệnh của 8086 • Mô tả tập lệnh của 8086 • Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 80286
- © DHBK 2005 44 Cách mã hoá lệnh của 8086 Opcode MOD-REG-R/M Dịch chuyển Tức thì 1-2 byte 0-1 byte 0-2 byte 0-2 byte • Một lệnh có độ dài từ 1 đến 6 byte D W W=0 dữ liệu 1 byte Opcode W=1 dữ liệu 2 byte D=1 dữ liệu đi đến thanh ghi cho bởi 3 bit REG D=0 dữ liệu đi từ thanh ghi cho bởi 3 bit REG
- © DHBK 2005 45 Cách mã hoá lệnh của 8086 MOD REG R/M MOD <> 11 00 không có dịch chuyển Thanh ghi Mã Mã Chế độ địa chỉ 01 dịch chuyển 8 bit 10 dịch chuyển 16 bit W=1 W=0 000 DS:[BX+SI] 11 R/M là thanh ghi AX AL 000 001 DS:[BX+DI] BX BL 011 010 SS:[BP+SI] CX CL 001 011 SS:[BP+DI] DX DL 010 100 DS:[SI] SP AH 100 101 DS:[DI] DI BH 111 110 SS:[BP] BP CH 101 111 DS:[BX] SI DH 110
- © DHBK 2005 46 Cách mã hoá lệnh của 8086 • Ví dụ: chuyển lệnh MOV CL, [BX] sang mã máy q opcode MOV: 100010 q Dữ liệu là 1 byte: W=0 q Chuyển tới thanh ghi: D=1 q Không có dịch chuyển: MOD=00 q [BX] nên R/M=111 q CL nên REG=001 1 0 0 0 1 0 1 0 0 0 0 0 1 1 1 1 MOV MOD CL [BX] D W Ví dụ 2: chuyển lệnh MOV [SI+F3H], CL sang mã máy
- © DHBK 2005 47 Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên trong • Sơ đồ chân • Bản đồ bộ nhớ của máy tính IBM-PC • Các chế độ địa chỉ của 8086 • Cách mã hoá lệnh của 8086 • Mô tả tập lệnh của 8086 q Các lệnh di chuyển dữ liệu q Các lệnh số học và logic q Các lệnh điều khiển chương trình • Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 80286
- © DHBK 2005 48 Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên trong • Sơ đồ chân • Bản đồ bộ nhớ của máy tính IBM-PC • Các chế độ địa chỉ của 8086 • Cách mã hoá lệnh của 8086 • Mô tả tập lệnh của 8086 þ Các lệnh di chuyển dữ liệu q Các lệnh số học và logic q Các lệnh điều khiển chương trình • Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 80286
- © DHBK 2005 49 Các lệnh di chuyển dữ liệu • MOV, XCHG, POP, PUSH, POPF, PUSHF, IN, OUT • Các lệnh di chuyển chuỗi MOVS, MOVSB, MOVSW • MOV q Dùng để chuyển giữa các thanh ghi, giữa 1 thanh ghi và 1 ô nhớ hoặc chuyển 1 số vào thanh ghi hoặc ô nhớ q Cú pháp: MOV Đích, nguồn q Lệnh này không tác động đến cờ q Ví dụ: ðMOV AX, BX ðMOV AH, ‘A’ ðMOV AL, [1234H]
- © DHBK 2005 50 Các lệnh di chuyển dữ liệu • Khả năng kết hợp toán hạng của lệnh MOV ĐíchThanh Thanh ô nhớ Hằng ghi ghi số ồ Ngu n đa đoạn năng Thanh YES YES YES NO ghi đa năng Thanh YES NO YES NO ghi đoạn Ô nhớ YES YES NO NO Hằng YES NO YES NO số
- © DHBK 2005 51 Các lệnh di chuyển dữ liệu • Lệnh XCHG q Dùng để hoán chuyển nội dung giữa hai thanh ghi, giữa 1 thanh ghi và 1 ô nhớ q Cú pháp: XCHG Đích, nguồn q Giới hạn: toán hạng không được là thanh ghi đoạn q Lệnh này không tác động đến cờ q Ví dụ: ð XCHG AX, BX ð XCHG AX, [BX]
- © DHBK 2005 52 Các lệnh di chuyển dữ liệu • Lệnh PUSH q Dùng để cất 1 từ từ thanh ghi hoặc ô nhớ vào đỉnh ngăn xếp q Cú pháp: PUSH Nguồn q Mô tả: SP=SP-2, Nguồn => {SP} q Giới hạn: thanh ghi 16 bit hoặc là 1 từ nhớ q Lệnh này không tác động đến cờ q Ví dụ: ð PUSH BX ð PUSH PTR[BX] • Lệnh PUSHF q Cất nội dung của thanh ghi cờ vào ngăn xếp
- © DHBK 2005 53 Các lệnh di chuyển dữ liệu • Ví dụ về lệnh PUSH PUSH AX PUSH BX SP 1300A 1300A 1300A 13009 13009 12 13009 12 SP 13008 13008 34 13008 34 13007 13007 13007 78 SP 13006 13006 13006 56 13005 13005 13005 13004 13004 13004 13003 13003 13003 13002 13002 13002 13001 13001 13001 13000 13000 13000 SS 1 3 0 0 SS 1 3 0 0 SS 1 3 0 0 SP 0 0 0 A SP 0 0 0 8 SP 0 0 0 6 AX 1 2 3 4 AX 1 2 3 4 BX 7 8 5 6
- © DHBK 2005 54 Các lệnh di chuyển dữ liệu • Lệnh POP q Dùng để lấy lại 1 từ vào thanh ghi hoặc ô nhớ từ đỉnh ngăn xếp q Cú pháp: POP Đích q Mô tả: {SP} => Đích, SP=SP+2 q Giới hạn: thanh ghi 16 bit (trừ CS) hoặc là 1 từ nhớ q Lệnh này không tác động đến cờ q Ví dụ: ð POP BX ð POP PTR[BX] • Lệnh POPF q Lấy 1 từ từ đỉnh ngăn xếp rồi đưa vào thanh ghi cờ
- © DHBK 2005 55 Các lệnh di chuyển dữ liệu • Ví dụ lệnh POP POP DX 1300A 1300A 13009 12 13009 12 13008 34 13008 34 SP 13007 78 13007 78 SP 13006 56 13006 56 13005 13005 13004 13004 13003 13003 13002 13002 13001 13001 13000 13000 SS 1 3 0 0 SS 1 3 0 0 SP 0 0 0 6 SP 0 0 0 8 DX 3 2 5 4 DX 7 8 5 6
- © DHBK 2005 56 Các lệnh di chuyển dữ liệu • Lệnh IN q Dùng để đọc 1 byte hoặc 2 byte dữ liệu từ cổng vào thanh ghi AL hoặc AX q Cú pháp: IN Acc, Port q Lệnh này không tác động đến cờ q Ví dụ: ð IN AX, 00H ð IN AL, F0H ð IN AX, DX • Lệnh OUT q Dùng để đưa 1 byte hoặc 2 byte dữ liệu từ thanh ghi AL hoặc AX ra cổng q Cú pháp: OUT Port, Acc q Lệnh này không tác động đến cờ q Ví dụ: ð OUT 00H, AX ð OUT F0H, AL ð OUT DX, AX
- © DHBK 2005 57 Các lệnh di chuyển dữ liệu • Các lệnh di chuyển chuỗi MOVS, MOVSB, MOVSW q Dùng để chuyển một phần tử của chuỗi này sang một chuỗi khác q Cú pháp: MOVS chuỗi đích, chuỗi nguồn MOVSB MOVSW q Thực hiện: ðDS:SI là địa chỉ của phần tử trong chuỗi nguồn ðES:DI là địa chỉ của phần tử trong chuỗi đích ðSau mỗi lần chuyển SI=SI +/- 1, DI=DI +/- 1 hoặc SI=SI +/- 2, DI=DI +/- 2 tuỳ thuộc vào cờ hướng DF là 0/1 q Lệnh này không tác động đến cờ q Ví dụ: ðMOVS byte1, byte2
- © DHBK 2005 58 Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên trong • Sơ đồ chân • Bản đồ bộ nhớ của máy tính IBM-PC • Các chế độ địa chỉ của 8086 • Cách mã hoá lệnh của 8086 • Mô tả tập lệnh của 8086 q Các lệnh di chuyển dữ liệu þ Các lệnh số học và logic q Các lệnh điều khiển chương trình • Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 80286
- © DHBK 2005 59 Các lệnh số học và logic • ADD, ADC, SUB, MUL, IMUL, DIV, IDIV, INC, DEC • AND, OR, NOT, NEG, XOR • Lệnh quay và dịch: RCL, RCR, SAL, SAR, SHL, SHR • Lệnh so sánh: CMP, CMPS • Lệnh ADD q Lệnh cộng hai toán hạng q Cú pháp: ADD Đích, nguồn q Thực hiện: Đích=Đích + nguồn q Giới hạn: toán hạng không được là 2 ô nhớ và thanh ghi đoạn q Lệnh này thay đổi cờ: AF, CF, OF, PF, SF, ZF q Ví dụ: ðADD AX, BX ðADD AX, 40H
- © DHBK 2005 60 Các lệnh số học và logic • Lệnh ADC q Lệnh cộng có nhớ hai toán hạng q Cú pháp: ADC Đích, nguồn q Thực hiện: Đích=Đích + nguồn+CF q Giới hạn: toán hạng không được là 2 ô nhớ và thanh ghi đoạn q Lệnh này thay đổi cờ: AF, CF, OF, PF, SF, ZF q Ví dụ: ð ADC AL, 30H • Lệnh SUB q Lệnh trừ q Cú pháp: SUB Đích, nguồn q Thực hiện: Đích=Đích - nguồn q Giới hạn: toán hạng không được là 2 ô nhớ và thanh ghi đoạn q Lệnh này thay đổi cờ: AF, CF, OF, PF, SF, ZF q Ví dụ: ð SUB AL, 30H
- © DHBK 2005 61 Các lệnh số học và logic • Lệnh MUL q Lệnh nhân số không dấu q Cú pháp: MUL nguồn q Thực hiện: ð AX=AL* nguồn8bit ðDXAX=AX*nguồn16bit q Lệnh này thay đổi cờ: CF, OF q Ví dụ: ðMUL BL • Lệnh IMUL q nhân số có dấu
- © DHBK 2005 62 Các lệnh số học và logic • Lệnh DIV q Lệnh chia 2 số không dấu q Cú pháp: DIV nguồn q Thực hiện: ðAL = thương (AX / nguồn8bit) ; AH=dư (AX / nguồn8bit) ðAX = thương (DXAX / nguồn16bit) ; DX=dư (DXAX / nguồn16bit) q Lệnh này không thay đổi cờ q Ví dụ: ðDIV BL • Lệnh IDIV q chia 2 số có dấu
- © DHBK 2005 63 Các lệnh số học và logic • Lệnh INC q Lệnh cộng 1 vào toán hạng là thanh ghi hoặc ô nhớ q Cú pháp: INC Đích q Thực hiện: Đích=Đích + 1 q Lệnh này thay đổi cờ: AF, OF, PF, SF, ZF q Ví dụ: ðINC AX • Lệnh DEC q Lệnh trừ 1 từ nội dung một thanh ghi hoặc ô nhớ q Cú pháp: DEC Đích q Thực hiện: Đích=Đích - 1 q Lệnh này thay đổi cờ: AF, OF, PF, SF, ZF q Ví dụ: ðDEC [BX]
- © DHBK 2005 64 Các lệnh số học và logic • Lệnh AND q Lệnh AND logic 2 toán hạng q Cú pháp: AND Đích, nguồn q Thực hiện: Đích=Đích And nguồn q Giới hạn: toán hạng không được là 2 ô nhớ hoặc thanh ghi đoạn q Lệnh này thay đổi cờ: PF, SF, ZF và xoá cờ CF, OF q Ví dụ: ðAND BL, 0FH • Lệnh XOR, OR: tương tự như lệnh AND • Lệnh NOT: đảo từng bit của toán hạng • Lệnh NEG: xác định số bù 2 của toán hạng
- © DHBK 2005 65 Các lệnh số học và logic • Lệnh CMP q Lệnh so sánh 2 byte hoặc 2 từ q Cú pháp: CMP Đích, nguồn q Thực hiện: ð Đích = nguồn : CF=0 ZF=1 ð Đích> nguồn : CF=0 ZF=0 ð Đích < nguồn : CF=1 ZF=0 q Giới hạn: toán hạng phải cùng độ dài và không được là 2 ô nhớ • Lệnh CMPS q Dùng để so sánh từng phần tử của 2 chuỗi có các phần tử cùng loại q Cú pháp: CMPS chuỗi đích, chuỗi nguồn CMPSB CMPSW q Thực hiện: ð DS:SI là địa chỉ của phần tử trong chuỗi nguồn ð ES:DI là địa chỉ của phần tử trong chuỗi đích ð Sau mỗi lần so sánh SI=SI +/- 1, DI=DI +/- 1 hoặc SI=SI +/- 2, DI=DI +/- 2 tuỳ thuộc vào cờ hướng DF là 0/1 q Cập nhật cờ AF, CF, OF, PF, SF, ZF
- © DHBK 2005 66 Các lệnh số học và logic • Lệnh RCL q Lệnh quay trái thông qua cờ nhớ q Cú pháp: RCL Đích, CL (với số lần quay lớn hơn 1) RCLĐích, 1 RCL Đích, Số lần quay (80286 trở lên) q Thực hiện: quay trái đích CL lần q Đích là thanh ghi (trừ thanh ghi đoạn) hoặc ô nhớ q Lệnh này thay đổi cờ: CF, OF CF MSB LSB • Lệnh RCR q Lệnh quay phải thông qua cờ nhớ
- © DHBK 2005 67 Các lệnh số học và logic • Lệnh ROL q Lệnh quay trái q Cú pháp: ROL Đích, CL (với số lần quay lớn hơn 1) ROL Đích, 1 ROL Đích, Số lần quay (80286 trở lên) q Thực hiện: quay trái đích CL lần q Đích là thanh ghi (trừ thanh ghi đoạn) hoặc ô nhớ q Lệnh này thay đổi cờ: CF, OF CF MSB LSB • Lệnh ROR q Lệnh quay phải
- © DHBK 2005 68 Các lệnh số học và logic • Lệnh SAL q Lệnh dịch trái số học q Cú pháp: SAL Đích, CL (với số lần dịch lớn hơn 1) SAL Đích, 1 SAL Đích, số lần dịch (80286 trở lên) q Thực hiện: dịch trái đích CL bit tương đương với Đích=Đích*2CL q Lệnh này thay đổi cờ SF, ZF, PF CF MSB LSB 0 • Lệnh SHL q Lệnh dịch trái logic tương tự như SAL
- © DHBK 2005 69 Các lệnh số học và logic • Lệnh SAR q Lệnh dịch phải số học q Cú pháp: SAR Đích, CL (với số lần dịch lớn hơn 1) SAR Đích, 1 hoặc SAR Đích, số lần dịch (80286 trở lên) q Thực hiện: dịch phải đích CL bit q Lệnh này thay đổi cờ SF, ZF, PF, CFmang giá trị của MSB MSB LSB CF
- © DHBK 2005 70 Các lệnh số học và logic • Lệnh SHR q Lệnh dịch phải logic q Cú pháp: SHR Đích, CL (với số lần dịch lớn hơn 1) SHR Đích, 1 hoặc SHR Đích, số lần dịch (80286 trở lên) q Thực hiện: dịch phải đích CL bit q Lệnh này thay đổi cờ SF, ZF, PF, CFmang giá trị của LSB MSB LSB CF 0 Chú ý: Trong các lệnh dịch và quay, toán hạng không được là thanh ghi đoạn
- © DHBK 2005 71 Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên trong • Sơ đồ chân • Bản đồ bộ nhớ của máy tính IBM-PC • Các chế độ địa chỉ của 8086 • Cách mã hoá lệnh của 8086 • Mô tả tập lệnh của 8086 q Các lệnh di chuyển dữ liệu q Các lệnh số học và logic þ Các lệnh điều khiển chương trình ð Lệnh nhảy không điều kiện: JMP ð Lệnh nhảy có điều kiện JE, JG, JGE, JL, JLE ð Lệnh lặp LOOP ð Lệnh gọi chương trình con CALL ð Lệnh gọi chương trình con phục vụ ngắt INT và IRET • Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 80286
- © DHBK 2005 72 Lệnh nhảy không điều kiện JMP • Dùng để nhảy tới một địa chỉ trong bộ nhớ • 3 loại: nhảy ngắn, gần và xa q Lệnh nhảy ngắn (short jump) ðĐộ dài lệnh 2 bytes: E B Độ lệch ðPhạm vi nhảy: -128 đến 127 bytes so với lệnh tiếp theo lệnh JMP ðThực hiện: IP=IP + độ lệch ðVí dụ: XOR BX, BX Nhan: MOV AX, 1 ADD AX, BX JMP SHORT Nhan
- © DHBK 2005 73 Lệnh nhảy không điều kiện JMP q Lệnh nhảy gần (near jump) ðPhạm vi nhảy: ± 32 Kbytes so với lệnh tiếp theo lệnh JMP ðVí dụ: XOR BX, BX XOR CX, CX XOR CX, CX Nhan: MOV AX, 1 MOV AX, 1 MOV AX, 1 ADD AX, BX ADD AX, BX ADD AX, BX JMP NEAR Nhan JMP NEAR PTR BX JMP WORD PTR [BX] Thực hiện: IP=IP+ độ lệch IP=BX IP=[BX+1] [BX] E 9 Độ lệchLo Độ lệchHi Nhảy gián tiếp
- © DHBK 2005 74 Lệnh nhảy không điều kiện JMP q Lệnh nhảy xa (far jump) ðĐộ dài lệnh 5 bytes đối với nhảy tới nhãn: E A IP Lo IP Hi CS Lo CS Hi ðPhạm vi nhảy: nhảy trong 1 đoạn mã hoặc nhảy sang đoạn mã khác ðVí dụ: EXTRN Nhan: FAR XOR CX, CX Next: MOV AX, 1 MOV AX, 1 ADD AX, BX ADD AX, BX JMP FAR PTR Next JMP DWORD PTR [BX] JMP FAR Nhan IP = [BX+1][BX] Thực hiện: IP=IP của nhãn CS= [BX+3][BX+2] CS=CS của nhãn
- © DHBK 2005 75 Tóm tắt lệnh JMP FFFFFH Đoạn mã 2 Nhảy xa +127 Đoạn mã 1 Nhảy ngắn JMP Nhảy gần -128 00000H
- © DHBK 2005 76 Lệnh nhảy có điều kiện • JE or JZ, JNE or JNZ, JG, JGE, JL, JLE (dùng cho số có dấu) và JA, JB, JAE, JBE (dùng cho số không dấu) • Nhảy được thực hiện phụ thuộc vào các cờ • Là các lệnh nhảy ngắn • Ví dụ: Nhan1: XOR BX, BX Nhan2: MOV AX, 1 CMP AL, 10H Thực hiện: IP=IP + độ dịch JNE Nhan1 JE Nhan2
- © DHBK 2005 77 Lệnh lặp LOOP • LOOP, LOOPE/LOOPZ, LOOPNE/LOOPNZ • Là lệnh phối hợp giữa DEC CX và JNZ XOR AL, AL XOR AL, AL XOR AL, AL MOV CX, 16 MOV CX, 16 MOV CX, 16 Lap: INC AL Lap: INC AL Lap: INC AL LOOP Lap CMP AL, 10 CMP AL, 10 LOOPE Lap LOOPNE Lap Lặp đến khí CX=0 Lặp đến khí CX=0 Lặp đến khí CX=0 hoặc AL<>10 hoặc AL=10
- © DHBK 2005 78 Lệnh CALL • Dùng để gọi chương trình con • Có 2 loại: CALL gần và CALL xa q CALL gần (near call): tương tự như nhảy gần ðGọi chương trình con ở trong cùng một đoạn mã Tong PROC NEAR Tong PROC NEAR CALL WORD PTR [BX] ADD AX, BX ADD AX, BX ADD AX, CX ADD AX, CX RET Tong ENDP RET Tong ENDP MOV BX, OFFSET Tong CALL BX CALL Tong Cất IP vào ngăn xếp Cất IP vào ngăn xếp Cất IP vào ngăn xếp IP=IP + dịch chuyển IP= BX IP= [BX+1] [BX] RET: lấy IP từ ngăn xếp RET: lấy IP từ ngăn xếp RET: lấy IP từ ngăn xếp
- © DHBK 2005 79 Lệnh CALL q CALL xa (far call): tương tự như nhảy xa ðGọi chương trình con ở ngoài đoạn mã Tong PROC FAR CALL DWORD PTR [BX] ADD AX, BX ADD AX, CX RET Tong ENDP CALL Tong Cất CS vào ngăn xếp Cất CS vào ngăn xếp Cất IP vào ngăn xếp Cất IP vào ngăn xếp IP=IP của Tong IP = [BX+1][BX] CS =CS của Tong CS= [BX+3][BX+2] RET: lấy IP từ ngăn xếp RET: lấy IP từ ngăn xếp lấy CS từ ngăn xếp lấy CS từ ngăn xếp
- © DHBK 2005 80 Lệnh ngắt INT và IRET • INT gọi chương trình con phục vụ ngắt (CTCPVN) • Bảng vector ngắt: 1 Kbytes 00000H đến 003FF H q 256 vector ngắt q 1 vector 4 bytes, chứa IP và CS của CTCPVN q 32 vector đầu dành riêng cho Intel q 224 vector sau dành cho người dùng • Cú pháp: INT Number • Ví dụ: INT 21H gọi CTCPVN của DOS
- © DHBK 2005 81 Lệnh ngắt INT và IRET • Thực hiện INT: q Cất thanh ghi cờ vào ngăn xếp q IF=0 (cấm các ngắt khác tác động), TF=0 (chạy suốt) q Cất CS vào ngăn xếp q Cất IP vào ngăn xếp q IP=[N*4], CS=[N*4+2] • Gặp IRET: q Lấy IP từ ngăn xếp q Lấy CS từ ngăn xếp q Lấy thanh ghi cờ từ ngăn xếp
- © DHBK 2005 82 Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên trong • Sơ đồ chân • Bản đồ bộ nhớ của máy tính IBM-PC • Các chế độ địa chỉ của 8086 • Cách mã hoá lệnh của 8086 • Mô tả tập lệnh của 8086 • Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 80286
- © DHBK 2005 83 Đánh địa chỉ bộ nhớ ở chế độ bảo vệ • Cho phép truy cập dữ liệu và chương trình ở vùng nhớ trên 1M • Thanh ghi lệch chứa địa chỉ lệch • Thanh ghi đoạn chứa từ chọn đoạn (segment selector) q từ chọn đoạn chọn 1 phần tử trong 1 trong 2 bảng mô tả đoạn (descriptor table), mồi bảng có kích thước 64 KB ðBảng mô tả đoạn toàn cục (Global DT): chứa thông tin về các đoạn của bộ nhớ mà tất cả các chương trình có thể truy nhập ðBảng mô tả đoạn cục bộ (Local DT): chứa thông tin về các đoạn của 1 chương trình q Mô tả đoạn chứa thông tin về địa chỉ bắt đầu của đoạn
- © DHBK 2005 84 Đánh địa chỉ bộ nhớ ở chế độ bảo vệ 15 2 1 0 Index TI RPL RPL: mức ưu tiên yêu cầu, 00 cao nhất, 11 thấp nhất TI=0, sử dụng bảng toàn cục, TI=1 sử dụng bảng cục bộ Index: 13 bit chỉ số để chọn 1 trong 8K mô tả đoạn trong bảng mô tả đoạn G D O A Limit 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 Base(B31-B24) 6 V (L19-L16) 6 5 Access rights Base(B23-B16) 4 5 Access rights Base(B23-B16) 4 3 Base(B15-B0) 2 3 Base(B15-B0) 2 1 Limit(L15-L0) 0 1 Limit(L15-L0) 0 mô tả đoạn của 80286 mô tả đoạn từ 80386 Base: xác định địa chỉ bắt đầu của đoạn Limit: giới hạn kích thước tối đa của đoạn
- © DHBK 2005 85 Đánh địa chỉ bộ nhớ ở chế độ bảo vệ • 80286 q Base 24 bit: 000000H đến FFFFFFH (16 MB) q Limit 16 bit: kích thước đoạn: từ 1 đến 64 KB q Địa chỉ vật lý= Base + độ lệch q 1 chương trình có thế sử dụng tối đa: 2*8K*64 K= 1GB bộ nhớ => bộ nhớ ảo (virtual memory) • 80386/486/Pentium q Base 32 bit: 00000000H đến FFFFFFFFH (4 GB) q Limit 20 bit: ð G=0: kích thước đoạn: từ 1 đến 1MB ð G=1: kích thước đoạn từ 4K đến 4 GB q Địa chỉ vật lý= Base + độ lệch q 1 chương trình có thế sử dụng tối đa: 2*8K*4 GB= 64 Terabytes bộ nhớ