© DHBK 2005 1/Chapte Nội dung môn học Giới thiệu chung hệ vi xử lý Bộ vi xử lý Intel 8088/8086 Lập trình hợp ngữ cho 8086 Tổ chức vào liệu Ngắt xử lý ngắt Truy cập nhớ trực tiếp DMA Các vi xử lý thực tế © DHBK 2005 2/Chapte Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên • Sơ đồ chân • Bản đồ nhớ máy tính IBM-PC • Các chế độ địa 8086 • Cách mã hố lệnh 8086 • Mơ tả tập lệnh 8086 • Cách đánh địa chế độ bảo vệ máy tính từ 80286 © DHBK 2005 3/Chapte Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên Sơ đồ khối Các ghi đa Các ghi đoạn Các ghi trỏ số Thanh ghi cờ Hàng đợi lệnh • Sơ đồ chân • Bản đồ nhớ máy tính IBM-PC • Các chế độ địa 8086 • Cách mã hố lệnh 8086 • Mơ tả tập lệnh 8086 • Cách đánh địa chế độ bảo vệ máy tính từ 80286 © DHBK 2005 4/Chapte Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên Sơ đồ khối Các ghi đa Các ghi đoạn Các ghi trỏ số Thanh ghi cờ Hàng đợi lệnh • Sơ đồ chân • Bản đồ nhớ máy tính IBM-PC • Các chế độ địa 8086 • Cách mã hố lệnh 8086 • Mơ tả tập lệnh 8086 • Cách đánh địa chế độ bảo vệ máy tính từ 80286 © DHBK 2005 5/Chapte Sơ đồ khối 8088/8086 Các ghi đa Các ghi trỏ số AX BX CX DX SP BP SI DI EU bus địa 20 bit Các ghi đoạn trỏ lệnh ∑ CS DS SS ES IP Bus liệu ALU 16 bit Bus Khối điều khiển EU Hàng đợi lệnh Thanh ghi cờ Bus CPU 16 bit liệu 20 bit địa Logic điều khiển bus Các ghi tạm thời ALU BIU © DHBK 2005 6/Chapte Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên Sơ đồ khối Các ghi đa Các ghi đoạn Các ghi trỏ số Thanh ghi cờ Hàng đợi lệnh • Sơ đồ chân • Bản đồ nhớ máy tính IBM-PC • Các chế độ địa 8086 • Cách mã hố lệnh 8086 • Mơ tả tập lệnh 8086 • Cách đánh địa chế độ bảo vệ máy tính từ 80286 © DHBK 2005 7/Chapte Các ghi đa 8088/8086 bit cao bit thấp •8088/8086 đến 80286 : 16 bits • • • • AX AH AL BX BH BL CX CH CL •80386 trở lên: 32 bits EAX, EBX, ECX, EDX DX DH DL Thanh ghi chứa AX (accumulator): chứa kết phép tính Kết bit chứa AL Thanh ghi sở BX (base): chứa địa sở, ví dụ bảng dùng lệnh XLAT (Translate) Thanh ghi đếm CX (count): dùng để chứa số lần lặp lệnh lặp (Loop) CL dùng để chứa số lần dịch quay lệnh dịch quay ghi Thanh ghi liệu DX (data): AX chứa liệu phép tính nhân chia số 16 bit DX dùng để chứa địa cổng lệnh vào liệu trực tiếp (IN/OUT) © DHBK 2005 8/Chapte Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên Sơ đồ khối Các ghi đa Các ghi đoạn Các ghi trỏ số Thanh ghi cờ Hàng đợi lệnh • Sơ đồ chân • Bản đồ nhớ máy tính IBM-PC • Các chế độ địa 8086 • Cách mã hố lệnh 8086 • Mơ tả tập lệnh 8086 • Cách đánh địa chế độ bảo vệ máy tính từ 80286 © DHBK 2005 9/Chapte Các ghi đoạn • Tổ chức nhớ Mbytes Đoạn nhớ (segment) FFFFFH 216 bytes =64 KB Đoạn 1: địa đầu 00000 H Đoạn 2: địa đầu 00010 H Đoạn cuối cùng: FFFF0 H Ô nhớ đoạn: địa lệch: offset Ô 1: offset: 0000 Ô cuối cùng: offset: FFFF Địa vật lý: Segment : offset 1FFFFH 1F000H Địa vật lý=Segment*16 + offset Chế độ thực (real mode) 10000H Offset=F000 1000 Thanh ghi đoạn 00000H © DHBK 2005 Các ghi đoạn 10 /Chapter2 • Ví dụ: Địa vật lý 12345H Địa đoạn Điạ lệch 1000 H 2345H 1200 H 0345H 1004 H ? 0300 H ? • Ví dụ: Cho địa đầu đoạn: 49000 H, xác định địa cuối © DHBK 2005 71 /Chapter2 Chương 2: Bộ vi xử lý Intel 8088/8086 • • • • • • Cấu trúc bên Sơ đồ chân Bản đồ nhớ máy tính IBM-PC Các chế độ địa 8086 Cách mã hố lệnh 8086 Mơ tả tập lệnh 8086 Các lệnh di chuyển liệu Các lệnh số học logic Các lệnh điều khiển chương trình Lệnh Lệnh Lệnh Lệnh Lệnh nhảy khơng điều kiện: JMP nhảy có điều kiện JE, JG, JGE, JL, JLE lặp LOOP gọi chương trình CALL gọi chương trình phục vụ ngắt INT IRET • Cách đánh địa chế độ bảo vệ máy tính từ 80286 © DHBK 2005 Lệnh nhảy khơng điều kiện JMP • Dùng để nhảy tới địa nhớ • loại: nhảy ngắn, gần xa Lệnh nhảy ngắn (short jump) Độ dài lệnh bytes: E B Độ lệch Phạm vi nhảy: -128 đến 127 bytes so với lệnh lệnh JMP Thực hiện: IP=IP + độ lệch Ví dụ: XOR BX, BX Nhan: MOV AX, ADD AX, BX JMP SHORT Nhan 72 /Chapter2 © DHBK 2005 Lệnh nhảy không điều kiện JMP 73 /Chapter2 Lệnh nhảy gần (near jump) Phạm vi nhảy: ± 32 Kbytes so với lệnh lệnh JMP Ví dụ: XOR BX, BX XOR CX, CX XOR CX, CX MOV AX, MOV AX, ADD AX, BX ADD AX, BX ADD AX, BX JMP NEAR Nhan JMP NEAR PTR BX JMP WORD PTR [BX] Nhan: MOV AX, Thực hiện: IP=IP+ độ lệch E Độ lệchLo Độ lệchHi IP=BX IP=[BX+1] [BX] Nhảy gián tiếp © DHBK 2005 Lệnh nhảy không điều kiện JMP Lệnh nhảy xa (far jump) Độ dài lệnh bytes nhảy tới nhãn: E A IP Lo IP Hi CS Lo CS Hi Phạm vi nhảy: nhảy đoạn mã nhảy sang đoạn mã khác Ví dụ: EXTRN Nhan: FAR Next: MOV AX, XOR CX, CX MOV AX, ADD AX, BX ADD AX, BX JMP FAR PTR Next JMP DWORD PTR [BX] JMP FAR Nhan Thực hiện: IP=IP nhãn CS=CS nhãn IP = [BX+1][BX] CS= [BX+3][BX+2] 74 /Chapter2 © DHBK 2005 75 /Chapter2 Tóm tắt lệnh JMP FFFFFH Đoạn mã Nhảy xa +127 Nhảy ngắn Đoạn mã JMP -128 00000H Nhảy gần © DHBK 2005 Lệnh nhảy có điều kiện 76 /Chapter2 • JE or JZ, JNE or JNZ, JG, JGE, JL, JLE (dùng cho số có dấu) JA, JB, JAE, JBE (dùng cho số khơng dấu) • Nhảy thực phụ thuộc vào cờ • Là lệnh nhảy ngắn • Ví dụ: Nhan1: XOR BX, BX Nhan2: MOV AX, CMP AL, 10H JNE Nhan1 JE Nhan2 Thực hiện: IP=IP + độ dịch © DHBK 2005 77 /Chapter2 Lệnh lặp LOOP • LOOP, LOOPE/LOOPZ, LOOPNE/LOOPNZ • Là lệnh phối hợp DEC CX JNZ XOR AL, AL XOR AL, AL XOR AL, AL MOV CX, 16 MOV CX, 16 MOV CX, 16 Lap: INC AL LOOP Lap Lặp đến khí CX=0 Lap: INC AL Lap: INC AL CMP AL, 10 CMP AL, 10 LOOPE Lap LOOPNE Lap Lặp đến khí CX=0 AL10 Lặp đến khí CX=0 AL=10 © DHBK 2005 Lệnh CALL 78 /Chapter2 • Dùng để gọi chương trình • Có loại: CALL gần CALL xa CALL gần (near call): tương tự nhảy gần Gọi chương trình đoạn mã Tong PROC NEAR ADD AX, BX ADD AX, CX RET Tong ENDP Tong PROC NEAR ADD AX, BX ADD AX, CX RET Tong ENDP MOV BX, OFFSET Tong CALL BX CALL WORD PTR [BX] CALL Tong 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 © DHBK 2005 Lệnh CALL CALL xa (far call): tương tự nhảy xa Gọi chương trình ngồ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 IP vào ngăn xếp IP=IP Tong CS =CS 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 79 /Chapter2 © DHBK 2005 Lệnh ngắt INT IRET • INT gọi chương trình phục vụ ngắt (CTCPVN) • Bảng vector ngắt: Kbytes 00000H đến 003FF H 256 vector ngắt vector bytes, chứa IP CS 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 DOS 80 /Chapter2 â DHBK 2005 Lnh ngt INT v IRET Thực INT: Cất ghi cờ vào ngăn xếp IF=0 (cấm 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 ghi cờ từ ngăn xếp 81 /Chapter2 © DHBK 2005 82 /Chapter2 Chương 2: Bộ vi xử lý Intel 8088/8086 • Cấu trúc bên • Sơ đồ chân • Bản đồ nhớ máy tính IBM-PC • Các chế độ địa 8086 • Cách mã hố lệnh 8086 • Mơ tả tập lệnh 8086 • Cách đánh địa chế độ bảo vệ máy tính từ 80286 © DHBK 2005 83 /Chapter2 Đánh địa nhớ chế độ bảo vệ • Cho phép truy cập liệu chương trình vùng nhớ 1M • Thanh ghi lệch chứa địa lệch • Thanh ghi đoạn chứa từ chọn đoạn (segment selector) từ chọn đoạn chọn phần tử trong 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 tồn cục (Global DT): chứa thông tin đoạn nhớ mà tất chương trình truy nhập Bảng mô tả đoạn cục (Local DT): chứa thông tin đoạn chương trình Mơ tả đoạn chứa thơng tin địa bắt đầu đoạn © DHBK 2005 84 /Chapter2 Đánh địa nhớ chế độ bảo vệ 15 Index TI RPL RPL: mức ưu tiên yêu cầu, 00 cao nhất, 11 thấp TI=0, sử dụng bảng toàn cục, TI=1 sử dụng bảng cục Index: 13 bit số để chọn 8K mô tả đoạn bảng mô tả đoạn 00000000 00000000 Access rights Base(B23-B16) Base(B31-B24) Access rights G D OA Limit V (L19-L16) Base(B23-B16) Base(B15-B0) Base(B15-B0) Limit(L15-L0) Limit(L15-L0) mô tả đoạn 80286 mô tả đoạn từ 80386 Base: xác định địa bắt đầu đoạn Limit: giới hạn kích thước tối đa đoạn © DHBK 2005 85 /Chapter2 Đánh địa nhớ chế độ bảo vệ • 80286 • Base 24 bit: 000000H đến FFFFFFH (16 MB) Limit 16 bit: kích thước đoạn: từ đến 64 KB Địa vật lý= Base + độ lệch chương trình sử dụng tối đa: 2*8K*64 K= 1GB nhớ => 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ừ đến 1MB G=1: kích thước đoạn từ 4K đến GB Địa vật lý= Base + độ lệch chương trình sử dụng tối đa: 2*8K*4 GB= 64 Terabytes nhớ