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
85 trang |
Chia sẻ: Mr Hưng | Lượt xem: 1098 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Kĩ thuật viễn thông - Chương 2: Bộ vi xử lý Intel 8088/8086, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Nội dung môn họcGiới thiệu chung về hệ vi xử lýBộ vi xử lý Intel 8088/8086Lập trình hợp ngữ cho 8086Tổ chức vào ra dữ liệuNgắt và xử lý ngắtTruy cập bộ nhớ trực tiếp DMACác bộ vi xử lý trên thực tế1Chương 2: Bộ vi xử lý Intel 8088/8086Cấu trúc bên trongSơ đồ chânBản đồ bộ nhớ của máy tính IBM-PCCác chế độ địa chỉ của 8086Cách mã hoá lệnh của 8086Mô tả tập lệnh của 8086Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 802862Chương 2: Bộ vi xử lý Intel 8088/8086Cấu trúc bên trongSơ đồ khốiCác thanh ghi đa năngCác thanh ghi đoạnCác thanh ghi con trỏ và chỉ sốThanh ghi cờHàng đợi lệnhSơ đồ chânBản đồ bộ nhớ của máy tính IBM-PCCác chế độ địa chỉ của 8086Cách mã hoá lệnh của 8086Mô tả tập lệnh của 8086Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 802863Chương 2: Bộ vi xử lý Intel 8088/8086Cấu trúc bên trongSơ đồ khốiCác thanh ghi đa năngCác thanh ghi đoạnCác thanh ghi con trỏ và chỉ sốThanh ghi cờHàng đợi lệnhSơ đồ chânBản đồ bộ nhớ của máy tính IBM-PCCác chế độ địa chỉ của 8086Cách mã hoá lệnh của 8086Mô tả tập lệnh của 8086Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 802864Sơ đồ khối 8088/8086CSDSESIPBXAXCXDXSPBPDISISSALUKhối điều khiểncủa EULogic điều khiển busCác thanh ghi đa năngCác thanh ghicon trỏvà chỉ sốCác thanh ghiđoạn và con trỏlệnhCác thanh ghi tạm thờiThanh ghi cờHàng đợi lệnhBus ngoàiBus trong của CPU16 bit dữ liệu20 bit địa chỉbus địa chỉ 20 bitEUBIUBus dữ liệu ALU 16 bit5Chương 2: Bộ vi xử lý Intel 8088/8086Cấu trúc bên trongSơ đồ khốiCác thanh ghi đa năngCác thanh ghi đoạnCác thanh ghi con trỏ và chỉ sốThanh ghi cờHàng đợi lệnhSơ đồ chânBản đồ bộ nhớ của máy tính IBM-PCCác chế độ địa chỉ của 8086Cách mã hoá lệnh của 8086Mô tả tập lệnh của 8086Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 802866Các thanh ghi đa năng của 8088/8086Thanh 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 ALThanh 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 ghiThanh 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)AXALAHBXBLBHCXCLCHDXDLDH8 bit cao8 bit thấp8088/8086 đến 80286 : 16 bits80386 trở lên: 32 bits EAX, EBX, ECX, EDX7Chương 2: Bộ vi xử lý Intel 8088/8086Cấu trúc bên trongSơ đồ khốiCác thanh ghi đa năngCác thanh ghi đoạnCác thanh ghi con trỏ và chỉ sốThanh ghi cờHàng đợi lệnhSơ đồ chânBản đồ bộ nhớ của máy tính IBM-PCCác chế độ địa chỉ của 8086Cách mã hoá lệnh của 8086Mô tả tập lệnh của 8086Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 802868Các thanh ghi đoạnTổ chức của bộ nhớ 1 MbytesĐoạn bộ nhớ (segment)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Ô nhớ trong đoạn:địa chỉ lệch: offsetÔ 1: offset: 0000Ô cuối cùng: offset: FFFFĐịa chỉ vật lý:Segment : offset00000HFFFFFH1FFFFH10000H1F000H1 0 0 0Offset=F000Thanh ghi đoạnĐịa chỉ vật lý=Segment*16 + offsetChế độ thực (real mode)9Các thanh ghi đoạnVí dụ: Địa chỉ vật lý 12345HVí dụ: Cho địa chỉ đầu của đoạn: 49000 H, xác định địa chỉ cuốiĐịa chỉ đoạnĐiạ chỉ lệch1000 H2345H1200 H0345H1004 H?0300 H?10Các thanh ghi đoạnCác thanh ghi đoạn: chứa địa chỉ đoạn00000FFFFFĐoạn dữ liệuData segmentĐoạn mãCode segmentĐoạn ngăn xếpStack segmentĐoạn dữ liệu phụextra segment10000200001FFFF300002FFFF3400043FFF4900058FFF1 0 0 0DS2 0 0 0CS3 4 0 0SS4 9 0 0ES.............11Các thanh ghi đoạnCác đoạn chồng nhau00000FFFFFData CodeStack090F00A0F00A0EF0A2800A27F0 9 0 FCS0 A 0 FDS0 A 2 8SS0A4800A47Fcodedatastack12Chương 2: Bộ vi xử lý Intel 8088/8086Cấu trúc bên trongSơ đồ khốiCác thanh ghi đa năngCác thanh ghi đoạnCác thanh ghi con trỏ và chỉ sốThanh ghi cờHàng đợi lệnhSơ đồ chânBản đồ bộ nhớ của máy tính IBM-PCCác chế độ địa chỉ của 8086Cách mã hoá lệnh của 8086Mô tả tập lệnh của 8086Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 8028613Các thanh ghi con trỏ và chỉ sốChứa địa chỉ lệch (offset) Con trỏ lệnh IP (instruction pointer): chứa địa chỉ lệnh tiếp theo trong đoạn mã lệnh CS. CS:IPCon 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ácSS:BP Con trỏ ngăn xếp SP (Stack Pointer): chứa địa chỉ hiện thời của đỉnh ngăn xếpSS:SPChỉ 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ỗiDS:SIChỉ 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ỗiDS:DISI và DI có thể được sử dụng như thanh ghi đa năng80386 trở lên 32 bit: EIP, EBP, ESP, EDI, ESI14Các thanh ghi con trỏ và chỉ sốThanh ghi đoạn và thanh ghi lệch ngầm địnhSegmentOffsetChú thíchCSIPĐịa chỉ lệnhSSSP hoặc BPĐịa chỉ ngăn xếpDSBX, DI, SI, số 8 bit hoặc số 16 bitĐịa chỉ dữ liệuESDIĐịa chỉ chuỗi đích15Chương 2: Bộ vi xử lý Intel 8088/8086Cấu trúc bên trongSơ đồ khốiCác thanh ghi đa năngCác thanh ghi đoạnCác thanh ghi con trỏ và chỉ sốThanh ghi cờHàng đợi lệnhSơ đồ chânBản đồ bộ nhớ của máy tính IBM-PCCác chế độ địa chỉ của 8086Cách mã hoá lệnh của 8086Mô tả tập lệnh của 8086Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 8028616Thanh ghi cờ (Flag Register)9 bit được sử dụng, 6 cờ trạng thái:C hoăc CF (carry flag)): CF=1 khi có nhớ hoặc mượn từ MSBP hoặc PF (parity flag): PF=1 (0) khi tổng số bít 1 trong kết quả là chẵn (lẻ)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 caoZ hoặc ZF (zero flag): ZF=1 khi kết quả bằng 0S hoặc SF (Sign flag): SF=1 khi kết quả âmO 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ấu1021514CPAZSTIDO17Thanh ghi cờ (Flag Register)3 cờ điều khiểnT hoăc TF (trap flag)): cờ bẫy, TF=1 khi CPU làm việc ở chế độ chạy từng lệnhI 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)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)1021514CPAZSTIDO18Thanh ghi cờ (Flag Register)Ví dụ: SF=0 vì msb trong kết quả =0PF=1 vì có 0 bít của tổng bằng 1ZF=1 vì kết qủa thu được là 0CF=1 vì có nhớ từ bít msb trong phép cộngOF=1 vì có tràn trong phép cộng 2 số âm 80h + 80h 100h19Chương 2: Bộ vi xử lý Intel 8088/8086Cấu trúc bên trongSơ đồ khốiCác thanh ghi đa năngCác thanh ghi đoạnCác thanh ghi con trỏ và chỉ sốThanh ghi cờHàng đợi lệnhSơ đồ chânBản đồ bộ nhớ của máy tính IBM-PCCác chế độ địa chỉ của 8086Cách mã hoá lệnh của 8086Mô tả tập lệnh của 8086Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 8028620Hàng đợi lệnh4 bytes đối với 8088 và 6 bytes đối với 8086Xử lý pipelineF1D1E1F2D2E2F3D3E3F1D1F2E1D2F3E2D3E3Không có pipeliningCó pipelining21Chương 2: Bộ vi xử lý Intel 8088/8086Cấu trúc bên trongSơ đồ chânBản đồ bộ nhớ của máy tính IBM-PCCác chế độ địa chỉ của 8086Cách mã hoá lệnh của 8086Mô tả tập lệnh của 8086Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 8028622Intel 808816-bit processorintroduced in 19793 mm, 5 to 8 MHz, 29 KTOR, 0.33 to 0.66 MIPS23Intel 8088Chế độ Min và chế độ Max:MN/MX = 1 chế độ Min = 0 chế độ Max với bus controller 828824Intel 808625Chương 2: Bộ vi xử lý Intel 8088/8086Cấu trúc bên trongSơ đồ chânBản đồ bộ nhớ của máy tính IBM-PCCác chế độ địa chỉ của 8086Cách mã hoá lệnh của 8086Mô tả tập lệnh của 8086Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 8028626Bản đồ bộ nhớ của máy tính IBM PC00000A00009FFFFFFFFFVùng nhớ chương trình640 KbytesVùng nhớ hệ thống484 KbytesVùng nhớ mở rộng1 Mbytes bộ nhớ thực27Bản đồ vùng nhớ chương trình0000002530Các vector ngắt00400005000070001160084909FFF09FFFFVùng BIOSVùng DOSIO.SYSMSDOSDevice drivers (mouse.sys)COMMAND.COMMSDOS08E30Vùng dành cho các chương trình ứng dụng28Bản đồ vùng nhớ hệ thốngA0000Video RAM (đồ hoạ)B0000F0000FFFFFVideo BIOS ROMROM BIOSVùng để dànhE0000ROM BASICC0000C8000Video RAM (text)29Các cổng vào raĐịa chỉ: 0000H –FFFFH, M/IO =000000320Điều khiển DMA00200040006002F80378FFFFĐiều khiển ngắtĐịnh thời (8253)8255COM2 Điều khiển ổ cứngLPT103D0Vùng mở rộng03F003F8CGA adapterĐiều khiển đĩa mềm COM130Trình tự khởi độngKhi bật nguồn hoặc nhấn ResetCS=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 BIOSCác chương trình BIOS kiểm tra hệ thống và bộ nhớCác chương trình BIOS khởi tạo bảng vector ngắt và vùng dữ liệu BIOSBIOS nạp chương trình khởi động (boot program) từ đĩa vào bộ nhớChương trình khởi động nạp hệ điều hành từ đĩa vào bộ nhớHệ điều hành nạp các chương trình ứng dụng31Vùng nhớ dành riêng của 8088/808600000Các vector ngắt003FFFFFF0Reset Bootstrapprogram jumpFFFFF32Chương 2: Bộ vi xử lý Intel 8088/8086Cấu trúc bên trongSơ đồ chânBản đồ bộ nhớ của máy tính IBM-PCCác chế độ địa chỉ của 8086Chế độ địa chỉ thanh ghiChế độ địa chỉ tức thìChế độ địa chỉ trực tiếpChế độ địa chỉ gián tiếp qua thanh ghiChế độ địa chỉ tương đối cơ sởChế độ địa chỉ tương đối chỉ sốChế độ địa chỉ tương đối chỉ số cơ sởCách mã hoá lệnh của 8086Mô tả tập lệnh của 8086Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 8028633Chế độ địa chỉ thanh ghi(Register Addressing Mode)Dùng các thanh ghi như là các toán hạngTốc độ thực hiện lệnh caoVí dụ:MOV BX, DX ; Copy nội dung DX vào BXMOV AL, BL ; Copy nội dung BL vào ALMOV AL, BX ; không hợp lệ vì các thanh ghi có kích thước khác nhauMOV ES, DS ; không hợp lệ (segment to segment)MOV CS, AX ; không hợp lệ vì CS không được dùng làm thanh ghi đíchADD AL, DL ; Cộng nội dung AL và DL rồi đưa vào AL34Chế độ đị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 DSVí dụ:MOV BL, 44 ; Copy số thập phân 44 vào thanh ghi BLMOV AX, 44H ; Copy 0044H vào thanh ghi AXMOV AL, ‘A’ ; Copy mã ASCII của A vào thanh ghi ALMOV DS, 0FF0H ; không hợp lệ MOV AX, 0FF0H ; MOV DS, AX ;MOV [BX], 10 ; copy số thập phân 10 vào ô nhớ DS:BX35Chế độ địa chỉ trực tiếp(Direct Addressing Mode)Một toán hạng là địa chỉ ô nhớ chứa dữ liệuToán hạng kia chỉ có thể là thanh ghiVí dụ:MOV AL, [1234H] ; Copy nội dung ô nhớ có địa chỉ DS:1234 vào ALMOV [ 4320H ], CX ; Copy nội dung của CX vào 2 ô nhớ liên tiếp DS: 4320 và DS: 432136Chế độ đị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ệuToán hạng kia chỉ có thể là thanh ghiVí dụ:MOV AL, [BX] ; Copy nội dung ô nhớ có địa chỉ DS:BX vào ALMOV [ SI ], CL ; Copy nội dung của CL vào ô nhớ có địa chỉ DS:SIMOV [ DI ], AX ; copy nội dung của AX vào 2 ô nhớ liên tiếp DS: DI và DS: (DI +1)37Chế độ đị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ểnToán hạng kia chỉ có thể là thanh ghiVí dụ: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 CXMOV CX, [BX+10] ; Cách viết khác của lệnh trênMOV AL, [BP]+5 ; copy nội dung của ô nhớ SS:BP+5 vào thanh ghi AL38Chế độ đị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ểnToán hạng kia chỉ có thể là thanh ghiVí dụ: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 AXMOV AX, [SI+10] ; Cách viết khác của lệnh trênMOV AL, [DI]+5 ; copy nội dung của ô nhớ DS:DI+5 vào thanh ghi AL39Chế độ địa chỉ tương đối chỉ số cơ sở( Based Indexed relative Addressing Mode)Ví dụ: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 AXMOV AX, [BX+SI+8] ; Cách viết khác của lệnh trênMOV CL, [BP+DI+5] ; copy nội dung của ô nhớ SS:BP+DI+5 vào thanh ghi CL40Tóm tắt các chế độ địa chỉChế độ địa chỉToán hạngThanh ghi đoạn ngầm địnhThanh ghiThanh ghiTức thìDữ liệuTrực tiếp[offset]DSGián tiếp qua thanh ghi[BX][SI][DI]DSDSDSTương đối cơ sở[BX] + dịch chuyển[BP] + dịch chuyểnDSSSTương đối chỉ số[DI] + dịch chuyển[SI] + dịch chuyểnDSDSTương đối chỉ số cơ sở[BX] + [DI]+ dịch chuyển[BX] + [SI]+ dịch chuyển[BP] + [DI]+ dịch chuyển[BP] + [SI]+ dịch chuyểnDSDSSSSS41Bỏ chế độ ngầm định thanh ghi đoạn(Segment override)Ví dụ:MOV AL, [BX]; Copy nội dung ô nhớ có địa chỉ DS:BX vào ALMOV AL, ES:[BX] ; Copy nội dung ô nhớ có địa chỉ ES:BX vào AL42Chương 2: Bộ vi xử lý Intel 8088/8086Cấu trúc bên trongSơ đồ chânBản đồ bộ nhớ của máy tính IBM-PCCác chế độ địa chỉ của 8086Cách mã hoá lệnh của 8086Mô tả tập lệnh của 8086Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 8028643Cách mã hoá lệnh của 8086Một lệnh có độ dài từ 1 đến 6 byteOpcode1-2 byteMOD-REG-R/M0-1 byteDịch chuyển0-2 byteTức thì0-2 byteDWOpcodeW=0 dữ liệu 1 byteW=1 dữ liệu 2 byteD=1 dữ liệu đi đến thanh ghi cho bởi 3 bit REGD=0 dữ liệu đi từ thanh ghi cho bởi 3 bit REG44Cách mã hoá lệnh của 8086MOD00 không có dịch chuyển01 dịch chuyển 8 bit dịch chuyển 16 bit R/M là thanh ghiREGThanh ghi Mã W=1 W=0 AX AL 000BX BL 011CX CL 001DX DL 010SP AH 100DI BH 111BP CH 101SI DH 110R/MMã Chế độ địa chỉ 000 DS:[BX+SI]001 DS:[BX+DI]010 SS:[BP+SI]011 SS:[BP+DI]100 DS:[SI]101 DS:[DI]110 SS:[BP]111 DS:[BX]MOD 1145Cách mã hoá lệnh của 8086Ví dụ: chuyển lệnh MOV CL, [BX] sang mã máyopcode MOV: 100010Dữ liệu là 1 byte: W=0Chuyển tới thanh ghi: D=1Không có dịch chuyển: MOD=00[BX] nên R/M=111CL nên REG=0011010001000001111MOVDWMODCL[BX]Ví dụ 2: chuyển lệnh MOV [SI+F3H], CL sang mã máy46Chương 2: Bộ vi xử lý Intel 8088/8086Cấu trúc bên trongSơ đồ chânBản đồ bộ nhớ của máy tính IBM-PCCác chế độ địa chỉ của 8086Cách mã hoá lệnh của 8086Mô tả tập lệnh của 8086Các lệnh di chuyển dữ liệuCác lệnh số học và logicCác lệnh điều khiển chương trìnhCách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 8028647Chương 2: Bộ vi xử lý Intel 8088/8086Cấu trúc bên trongSơ đồ chânBản đồ bộ nhớ của máy tính IBM-PCCác chế độ địa chỉ của 8086Cách mã hoá lệnh của 8086Mô tả tập lệnh của 8086Các lệnh di chuyển dữ liệuCác lệnh số học và logicCác lệnh điều khiển chương trìnhCách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 8028648Các lệnh di chuyển dữ liệuMOV, XCHG, POP, PUSH, POPF, PUSHF, IN, OUTCác lệnh di chuyển chuỗi MOVS, MOVSB, MOVSWMOVDù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, BXMOV AH, ‘A’MOV AL, [1234H]49Các lệnh di chuyển dữ liệuKhả năng kết hợp toán hạng của lệnh MOVThanh ghi đa năngThanh ghi đoạnô nhớHằng sốThanh ghi đa năngYESYESYESNOThanh ghi đoạnYESNOYESNOÔ nhớYESYESNONOHằng sốYESNOYESNOĐíchNguồn50Các lệnh di chuyển dữ liệuLệnh XCHGDù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ồnGiớ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, BXXCHG AX, [BX]51Các lệnh di chuyển dữ liệuLệnh PUSHDùng để cất 1 từ từ thanh ghi hoặc ô nhớ vào đỉnh ngăn xếp Cú pháp: PUSH NguồnMô 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 BXPUSH PTR[BX]Lệnh PUSHFCất nội dung của thanh ghi cờ vào ngăn xếp52Các lệnh di chuyển dữ liệuVí dụ về lệnh PUSH130001300113002130031300413005130061300713008130091300A1 3 0 00 0 0 A1 2 3 4SSSPAXSP130001300113002130031300413005130061300713008130091300A1 3 0 00 0 0 81 2 3 4SSSPAXSPPUSH AX1234130001300113002130031300413005130061300713008130091300A1 3 0 00 0 0 67 8 5 6SSSPBXSPPUSH BX1234785653Các lệnh di chuyển dữ liệuLệnh POPDùng để lấy lại 1 từ vào thanh ghi hoặc ô nhớ từ đỉnh ngăn xếp Cú pháp: POP ĐíchMô tả: {SP} => Đích, SP=SP+2Giớ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 BXPOP PTR[BX]Lệnh POPFLấy 1 từ từ đỉnh ngăn xếp rồi đưa vào thanh ghi cờ54Các lệnh di chuyển dữ liệuVí dụ lệnh POP130001300113002130031300413005130061300713008130091300A1 3 0 00 0 0 63 2 5 4SSSPDXSP12347856130001300113002130031300413005130061300713008130091300A1 3 0 00 0 0 87 8 5 6SSSPDXSP12347856POP DX55Các lệnh di chuyển dữ liệuLệnh INDù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, PortLệnh này không tác động đến cờVí dụ:IN AX, 00HIN AL, F0HIN AX, DXLệnh OUTDù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, AccLệnh này không tác động đến cờVí dụ:OUT 00H, AXOUT F0H, ALOUT DX, AX56Các lệnh di chuyển dữ liệuCác lệnh di chuyển chuỗi MOVS, MOVSB, MOVSWDùng để chuyển một phần tử của chuỗi này sang một chuỗi khácCú 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ồnES:DI là địa chỉ của phần tử trong chuỗi đíchSau 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, byte257Chương 2: Bộ vi xử lý Intel 8088/8086Cấu trúc bên trongSơ đồ chânBản đồ bộ nhớ của máy tính IBM-PCCác chế độ địa chỉ của 8086Cách mã hoá lệnh của 8086Mô tả tập lệnh của 8086Các lệnh di chuyển dữ liệuCác lệnh số học và logicCác lệnh điều khiển chương trìnhCách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 8028658Các lệnh số học và logicADD, ADC, SUB, MUL, IMUL, DIV, IDIV, INC, DECAND, OR, NOT, NEG, XORLệnh quay và dịch: RCL, RCR, SAL, SAR, SHL, SHRLệnh so sánh: CMP, CMPSLệnh ADDLệnh cộng hai toán hạng Cú pháp: ADD Đích, nguồnThực hiện: Đích=Đích + nguồnGiới hạn: toán hạng không được là 2 ô nhớ và thanh ghi đoạnLệnh này thay đổi cờ: AF, CF, OF, PF, SF, ZFVí dụ:ADD AX, BXADD AX, 40H59Các lệnh số học và logicLệnh ADCLệnh cộng có nhớ hai toán hạng Cú pháp: ADC Đích, nguồnThực hiện: Đích=Đích + nguồn+CFGiới hạn: toán hạng không được là 2 ô nhớ và thanh ghi đoạnLệnh này thay đổi cờ: AF, CF, OF, PF, SF, ZFVí dụ:ADC AL, 30HLệnh SUBLệnh trừ Cú pháp: SUB Đích, nguồnThực hiện: Đích=Đích - nguồnGiới hạn: toán hạng không được là 2 ô nhớ và thanh ghi đoạnLệnh này thay đổi cờ: AF, CF, OF, PF, SF, ZFVí dụ:SUB AL, 30H60Các lệnh số học và logicLệnh MULLệnh nhân số không dấuCú pháp: MUL nguồnThực hiện: AX=AL* nguồn8bitDXAX=AX*nguồn16bitLệnh này thay đổi cờ: CF, OFVí dụ:MUL BLLệnh IMUL nhân số có dấu61Các lệnh số học và logicLệnh DIVLệnh chia 2 số không dấuCú pháp: DIV nguồnThự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 BLLệnh IDIV chia 2 số có dấu62Các lệnh số học và logicLệnh INCLệnh cộng 1 vào toán hạng là thanh ghi hoặc ô nhớCú pháp: INC ĐíchThực hiện: Đích=Đích + 1Lệnh này thay đổi cờ: AF, OF, PF, SF, ZFVí dụ:INC AXLệnh DECLệnh trừ 1 từ nội dung một thanh ghi hoặc ô nhớCú pháp: DEC ĐíchThực hiện: Đích=Đích - 1Lệnh này thay đổi cờ: AF, OF, PF, SF, ZFVí dụ:DEC [BX]63Các lệnh số học và logicLệnh ANDLệnh AND logic 2 toán hạngCú pháp: AND Đích, nguồnThực hiện: Đích=Đích And nguồnGiới hạn: toán hạng không được là 2 ô nhớ hoặc thanh ghi đoạnLệnh này thay đổi cờ: PF, SF, ZF và xoá cờ CF, OFVí dụ:AND BL, 0FHLệnh XOR, OR: tương tự như lệnh ANDLệnh NOT: đảo từng bit của toán hạngLệnh NEG: xác định số bù 2 của toán hạng64Các lệnh số học và logicLệnh CMPLệnh so sánh 2 byte hoặc 2 từCú pháp: CMP Đích, nguồnThực hiện:Đích = nguồn : CF=0 ZF=1Đích> nguồn : CF=0 ZF=0Đích 10 XOR AL, AL MOV CX, 16Lap: INC AL CMP AL, 10 LOOPNE LapLặp đến khí CX=0hoặc AL=1077Lệnh CALLDùng để gọi chương trình conCó 2 loại: CALL gần và CALL xaCALL gần (near call): tương tự như nhảy gầnGọ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 BXCALL WORD PTR [BX]Cất IP vào ngăn xếpIP=IP + dịch chuyểnRET: lấy IP từ ngăn xếpCất IP vào ngăn xếpIP= BXRET: lấy IP từ ngăn xếpCất IP vào ngăn xếpIP= [BX+1] [BX]RET: lấy IP từ ngăn xếp78Lệnh CALLCALL xa (far call): tương tự như nhảy xaGọi chương trình con ở ngoài đoạn mã Tong PROC FAR ADD AX, BX ADD AX, CX RET Tong ENDP ... CALL TongCALL DWORD PTR [BX]Cất CS vào ngăn xếpCất IP vào ngăn xếpIP=IP của TongCS =CS của TongRET: lấy IP từ ngăn xếplấy CS từ ngăn xếpCất CS vào ngăn xếpCất IP vào ngăn xếpIP = [BX+1][BX]CS= [BX+3][BX+2]RET: lấy IP từ ngăn xếplấy CS từ ngăn xếp79Lệnh ngắt INT và IRETINT gọi chương trình con phục vụ ngắt (CTCPVN)Bảng vector ngắt: 1 Kbytes 00000H đến 003FF H256 vector ngắt1 vector 4 bytes, chứa IP và CS của CTCPVN32 vector đầu dành riêng cho Intel224 vector sau dành cho người dùngCú pháp: INT NumberVí dụ: INT 21H gọi CTCPVN của DOS80Lệnh ngắt INT và IRETThực hiện INT:Cất thanh ghi cờ vào ngăn xếpIF=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ếpCất IP vào ngăn xếpIP=[N*4], CS=[N*4+2]Gặp IRET:Lấy IP từ ngăn xếpLấy CS từ ngăn xếpLấy thanh ghi cờ từ ngăn xếp81Chương 2: Bộ vi xử lý Intel 8088/8086Cấu trúc bên trongSơ đồ chânBản đồ bộ nhớ của máy tính IBM-PCCác chế độ địa chỉ của 8086Cách mã hoá lệnh của 8086Mô tả tập lệnh của 8086Cách đánh địa chỉ ở chế độ bảo vệ ở các máy tính từ 8028682Đá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 1MThanh ghi lệch chứa địa chỉ lệchThanh 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 KBBả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ậpBả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ìnhMô tả đoạn chứa thông tin về địa chỉ bắt đầu của đoạn83Đánh địa chỉ bộ nhớ ở chế độ bảo vệ01215IndexTIRPLRPL: mức ưu tiên yêu cầu, 00 cao nhất, 11 thấp nhấtTI=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ạn0 0 0 0 0 0 0 00 0 0 0 0 0 0 0Access rightsBase(B23-B16)Base(B15-B0)Limit(L15-L0)01357246Base(B31-B24)G D O A Limit V (L19-L16)Access rightsBase(B23-B16)Base(B15-B0)Limit(L15-L0)01357246mô tả đoạn của 80286mô tả đoạn từ 80386Base: xác định địa chỉ bắt đầu của đoạnLimit: giới hạn kích thước tối đa của đoạn84Đánh địa chỉ bộ nhớ ở chế độ bảo vệ80286Base 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ệch1 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/PentiumBase 32 bit: 00000000H đến FFFFFFFFH (4 GB)Limit 20 bit: G=0: kích thước đoạn: từ 1 đến 1MBG=1: kích thước đoạn từ 4K đến 4 GB Địa chỉ vật lý= Base + độ lệch1 chương trình có thế sử dụng tối đa: 2*8K*4 GB= 64 Terabytes bộ nhớ85
Các file đính kèm theo tài liệu này:
- microprocessor_final_ver1_part2_2373.ppt