Bài giảng Kỹ thuật vi xử lý - 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
í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 Cách mã hoá lệnh của 8086 Một lệnh có độ dài từ 1 đến 6 byte Opcode 1-2 byte MOD-REG-R/M 0-1 byte Dịch chuyển 0-2 byte Tức thì 0-2 byte D W Opcode W=0 dữ liệu 1 byte 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 Cách mã hoá lệnh của 8086 Cách mã hoá lệnh của 8086 Ví dụ: chuyển lệnh MOV CL, [BX] sang mã máy opcode MOV: 100010 Dữ liệu là 1 byte: W=0 Chuyển tới thanh ghi: D=1 Không có dịch chuyển: MOD=00 [BX] nên R/M=111 CL nên REG=001 Ví dụ 2: chuyển lệnh MOV [SI+F3H], CL sang mã máy 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 Các lệnh số học và logic 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 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 Các lệnh số học và logic 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 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 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ớ Cú pháp: MOV Đích, nguồn Lệnh này không tác động đến cờ Ví dụ: MOV AX, BX MOV AH, ‘A’ MOV AL, [1234H] 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 Đích Nguồn Các lệnh di chuyển dữ liệu Lệnh XCHG Dùng để hoán chuyển nội dung giữa hai thanh ghi, giữa 1 thanh ghi và 1 ô nhớ Cú pháp: XCHG Đích, nguồn Giới hạn: toán hạng không được là thanh ghi đoạn Lệnh này không tác động đến cờ Ví dụ: XCHG AX, BX XCHG AX, [BX] Các lệnh di chuyển dữ liệu Lệnh PUSH Dùng để cất 1 từ từ thanh ghi hoặc ô nhớ vào đỉnh ngăn xếp Cú pháp: PUSH Nguồn Mô tả: SP=SP-2, Nguồn => {SP} Giới hạn: thanh ghi 16 bit hoặc là 1 từ nhớ Lệnh này không tác động đến cờ Ví dụ: PUSH BX PUSH PTR[BX] Lệnh PUSHF Cất nội dung của thanh ghi cờ vào ngăn xếp Các lệnh di chuyển dữ liệu Ví dụ về lệnh PUSH 13000 13001 13002 13003 13004 13005 13006 13007 13008 13009 1300A 1 3 0 0 0 0 0 A 1 2 3 4 SS SP AX SP 13000 13001 13002 13003 13004 13005 13006 13007 13008 13009 1300A 1 3 0 0 0 0 0 8 1 2 3 4 SS SP AX PUSH AX 12 34 13000 13001 13002 13003 13004 13005 13006 13007 13008 13009 1300A 1 3 0 0 0 0 0 6 7 8 5 6 SS SP BX PUSH BX 12 34 78 56 Các lệnh di chuyển dữ liệu Lệnh POP Dùng để lấy lại 1 từ vào thanh ghi hoặc ô nhớ từ đỉnh ngăn xếp Cú pháp: POP Đích Mô tả: {SP} => Đích, SP=SP+2 Giới hạn: thanh ghi 16 bit (trừ CS) hoặc là 1 từ nhớ Lệnh này không tác động đến cờ Ví dụ: POP BX POP PTR[BX] Lệnh POPF Lấy 1 từ từ đỉnh ngăn xếp rồi đưa vào thanh ghi cờ Các lệnh di chuyển dữ liệu Ví dụ lệnh POP 13000 13001 13002 13003 13004 13005 13006 13007 13008 13009 1300A 1 3 0 0 0 0 0 6 3 2 5 4 SS SP DX SP 12 34 78 56 13000 13001 13002 13003 13004 13005 13006 13007 13008 13009 1300A 1 3 0 0 0 0 0 8 7 8 5 6 SS SP DX SP 12 34 78 56 POP DX Các lệnh di chuyển dữ liệu Lệnh IN Dùng để đọc 1 byte hoặc 2 byte dữ liệu từ cổng vào thanh ghi AL hoặc AX Cú pháp: IN Acc, Port Lệnh này không tác động đến cờ Ví dụ: IN AX, 00H IN AL, F0H IN AX, DX Lệnh OUT Dùng để đưa 1 byte hoặc 2 byte dữ liệu từ thanh ghi AL hoặc AX ra cổng Cú pháp: OUT Port, Acc Lệnh này không tác động đến cờ Ví dụ: OUT 00H, AX OUT F0H, AL OUT DX, AX Các lệnh di chuyển dữ liệu Các lệnh di chuyển chuỗi MOVS, MOVSB, MOVSW Dùng để chuyển một phần tử của chuỗi này sang một chuỗi khác Cú pháp: MOVS chuỗi đích, chuỗi nguồn MOVSB MOVSW 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 Lệnh này không tác động đến cờ Ví dụ: MOVS byte1, byte2 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 Các lệnh số học và logic 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 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 Lệnh cộng hai toán hạng Cú pháp: ADD Đích, nguồn Thực hiện: Đích=Đích + nguồn Giới hạn: toán hạng không được là 2 ô nhớ và thanh ghi đoạn Lệnh này thay đổi cờ: AF, CF, OF, PF, SF, ZF Ví dụ: ADD AX, BX ADD AX, 40H Các lệnh số học và logic Lệnh ADC Lệnh cộng có nhớ hai toán hạng Cú pháp: ADC Đích, nguồn Thực hiện: Đích=Đích + nguồn+CF Giới hạn: toán hạng không được là 2 ô nhớ và thanh ghi đoạn Lệnh này thay đổi cờ: AF, CF, OF, PF, SF, ZF Ví dụ: ADC AL, 30H Lệnh SUB Lệnh trừ Cú pháp: SUB Đích, nguồn Thực hiện: Đích=Đích - nguồn Giới hạn: toán hạng không được là 2 ô nhớ và thanh ghi đoạn Lệnh này thay đổi cờ: AF, CF, OF, PF, SF, ZF Ví dụ: SUB AL, 30H Các lệnh số học và logic Lệnh MUL Lệnh nhân số không dấu Cú pháp: MUL nguồn Thực hiện: AX=AL* nguồn8bit DXAX=AX*nguồn16bit Lệnh này thay đổi cờ: CF, OF Ví dụ: MUL BL Lệnh IMUL nhân số có dấu Các lệnh số học và logic Lệnh DIV Lệnh chia 2 số không dấu Cú pháp: DIV nguồn 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) Lệnh này không thay đổi cờ Ví dụ: DIV BL Lệnh IDIV chia 2 số có dấu Các lệnh số học và logic Lệnh INC Lệnh cộng 1 vào toán hạng là thanh ghi hoặc ô nhớ Cú pháp: INC Đích Thực hiện: Đích=Đích + 1 Lệnh này thay đổi cờ: AF, OF, PF, SF, ZF Ví dụ: INC AX Lệnh DEC Lệnh trừ 1 từ nội dung một thanh ghi hoặc ô nhớ Cú pháp: DEC Đích Thực hiện: Đích=Đích - 1 Lệnh này thay đổi cờ: AF, OF, PF, SF, ZF Ví dụ: DEC [BX] Các lệnh số học và logic Lệnh AND Lệnh AND logic 2 toán hạng Cú pháp: AND Đích, nguồn Thực hiện: Đích=Đích And nguồn Giới hạn: toán hạng không được là 2 ô nhớ hoặc thanh ghi đoạn Lệnh này thay đổi cờ: PF, SF, ZF và xoá cờ CF, OF 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 Các lệnh số học và logic Lệnh CMP Lệnh so sánh 2 byte hoặc 2 từ Cú pháp: CMP Đích, nguồn Thực hiện: Đích = nguồn : CF=0 ZF=1 Đích> nguồn : CF=0 ZF=0 Đích 10 XOR AL, AL MOV CX, 16 Lap: INC AL CMP AL, 10 LOOPNE Lap Lặp đến khí CX=0 hoặc AL=10 Lệnh CALL Dùng để gọi chương trình con Có 2 loại: CALL gần và CALL xa 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 ADD AX, BX ADD AX, CX RET Tong ENDP ... CALL Tong Tong PROC NEAR ADD AX, BX ADD AX, CX RET Tong ENDP ... MOV BX, OFFSET Tong CALL BX CALL WORD PTR [BX] Cất IP vào ngăn xếp IP=IP + dịch chuyển RET: lấy IP từ ngăn xếp Cất IP vào ngăn xếp IP= BX RET: lấy IP từ ngăn xếp Cất IP vào ngăn xếp IP= [BX+1] [BX] RET: lấy IP từ ngăn xếp Lệnh CALL 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 ADD AX, BX ADD AX, CX RET Tong ENDP ... CALL Tong CALL DWORD PTR [BX] Cất CS vào ngăn xếp Cất IP vào ngăn xếp IP=IP của Tong CS =CS của Tong RET: lấy IP từ ngăn xếp lấy CS từ ngăn xếp Cất CS vào ngăn xếp Cất IP vào ngăn xếp IP = [BX+1][BX] CS= [BX+3][BX+2] RET: lấy IP từ ngăn xếp lấy CS từ ngăn xếp 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 256 vector ngắt 1 vector 4 bytes, chứa IP và CS của CTCPVN 32 vector đầu dành riêng cho Intel 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 Lệnh ngắt INT và IRET Thực hiện INT: Cất thanh ghi cờ vào ngăn xếp IF=0 (cấm các ngắt khác tác động), TF=0 (chạy suốt) Cất CS vào ngăn xếp Cất IP vào ngăn xếp IP=[N*4], CS=[N*4+2] Gặp IRET: Lấy IP từ ngăn xếp Lấy CS từ ngăn xếp Lấy thanh ghi cờ từ ngăn xếp 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 Đá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) 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 Mô tả đoạn chứa thông tin về địa chỉ bắt đầu của đoạn Đánh địa chỉ bộ nhớ ở chế độ bảo vệ 0 1 2 15 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Access rights Base(B23-B16) Base(B15-B0) Limit(L15-L0) 0 1 3 5 7 2 4 6 Base(B31-B24) G D O A Limit V (L19-L16) Access rights Base(B23-B16) Base(B15-B0) Limit(L15-L0) 0 1 3 5 7 2 4 6 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 Đánh địa chỉ bộ nhớ ở chế độ bảo vệ 80286 Base 24 bit: 000000H đến FFFFFFH (16 MB) Limit 16 bit: kích thước đoạn: từ 1 đến 64 KB Địa chỉ vật lý= Base + độ lệch 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 Base 32 bit: 00000000H đến FFFFFFFFH (4 GB) 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 Địa chỉ vật lý= Base + độ lệch 1 chương trình có thế sử dụng tối đa: 2*8K*4 GB= 64 Terabytes bộ nhớ
File đính kèm:
- Bài giảng Kỹ thuật vi xử lý - Chương 2 Bộ vi xử lý Intel 80888086.ppt