© DHBK 2005 1/Chapter 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ế Thiêt kế vi xử lý © DHBK 2005 2/Chapter Chương 2: Bộ vi xử lý Intel 8088/8086 2.1 Cấu trúc bên 2.2 Sơ đồ chân 2.3 Bản đồ nhớ máy tính IBM-PC 2.4 Các chế độ địa 8086 2.5 Cách mã hoá lệnh 8086 2.6 Mô tả tập lệnh 8086 2.7 Cách quản lý nhớ chế độ bảo vệ máy tính từ 80286 © DHBK 2005 3/Chapter Chương 2: Bộ vi xử lý Intel 8088/8086 2.1 Cấu trúc bên 2.1.1 Sơ đồ khối 2.1.2 Các ghi đa 2.1.3 Các ghi đoạn 2.1.4 Các ghi trỏ số 2.1.5 Thanh ghi cờ 2.1.6 Hàng đợi lệnh 2.2 Sơ đồ chân 2.3 Bản đồ nhớ máy tính IBM-PC 2.4 Các chế độ địa 8086 2.5 Cách mã hố lệnh 8086 2.6 Mơ tả tập lệnh 8086 2.7 Cách quản lý nhớ chế độ bảo vệ máy tính từ 80286 © DHBK 2005 4/Chapter Chương 2: Bộ vi xử lý Intel 8088/8086 2.1 Cấu trúc bên 2.1.1 Sơ đồ khối 2.1.2 Các ghi đa 2.1.3 Các ghi đoạn 2.1.4 Các ghi trỏ số 2.1.5 Thanh ghi cờ 2.1.6 Hàng đợi lệnh 2.2 Sơ đồ chân 2.3 Bản đồ nhớ máy tính IBM-PC 2.4 Các chế độ địa 8086 2.5 Cách mã hố lệnh 8086 2.6 Mơ tả tập lệnh 8086 2.7 Cách quản lý nhớ chế độ bảo vệ máy tính từ 80286 © DHBK 2005 5/Chapter 2.1.1 Sơ đồ khối 8088/8086 Các ghi đa Các ghi trỏ số AX BX CX DX SP BP SI DI EU Execution Unit Khối thực thi bus địa 20 bit Các ghi đoạn trỏ lệnh ∑ Logic điều khiển bus Các ghi tạm thời (ẩn) Arithmetic Logic Unit Bus Khối điều khiển EU Hàng đợi lệnh Thanh ghi cờ Bus Interface Unit Khối giao tiếp BUS CS DS SS ES IP Bus liệu ALU 16 bit ALU BIU © DHBK 2005 6/Chapter Chương 2: Bộ vi xử lý Intel 8088/8086 2.1 Cấu trúc bên 2.1.1 Sơ đồ khối 2.1.2 Các ghi đa 2.1.3 Các ghi đoạn 2.1.4 Các ghi trỏ số 2.1.5 Thanh ghi cờ 2.1.6 Hàng đợi lệnh 2.2 Sơ đồ chân 2.3 Bản đồ nhớ máy tính IBM-PC 2.4 Các chế độ địa 8086 2.5 Cách mã hoá lệnh 8086 2.6 Mô tả tập lệnh 8086 2.7 Cách quản lý nhớ chế độ bảo vệ máy tính từ 80286 © DHBK 2005 7/Chapter 2.1.2 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 DX DH DL •80386 trở lên: 32 bits EAX, EBX, ECX, EDX • 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/Chapter Chương 2: Bộ vi xử lý Intel 8088/8086 2.1 Cấu trúc bên 2.1.1 Sơ đồ khối 2.1.2 Các ghi đa 2.1.3 Các ghi đoạn 2.1.4 Các ghi trỏ số 2.1.5 Thanh ghi cờ 2.1.6 Hàng đợi lệnh 2.2 Sơ đồ chân 2.3 Bản đồ nhớ máy tính IBM-PC 2.4 Các chế độ địa 8086 2.5 Cách mã hố lệnh 8086 2.6 Mơ tả tập lệnh 8086 2.7 Cách quản lý nhớ chế độ bảo vệ máy tính từ 80286 © DHBK 2005 9/Chapter 2.1.3 Các ghi đoạn • Tổ chức nhớ Mbytes Vấn đề: Sử dụng ghi 16bit để xác định địa 20bit (1M) Đoạn nhớ (segment) 216 bytes =64 KB Đoạn 1: địa 0000 Đoạn 2: địa 0001 Đoạn cuối cùng: FFFF FFFFF Ô nhớ đoạn: địa lệch: offset Ô 1: offset: 0000 Ô cuối cùng: offset: FFFF Địa vật lý: Segment : offset Địa vật lý=Segment*16 + offset Chế độ thực (real mode) 1FFFF 1F000 10000 Offset=F000 1000 Thanh ghi đoạn 00000 © DHBK 2005 10/Chapte 2.1.3 Các ghi đoạn • 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 79/Chapte 2.6.3 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 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] © DHBK 2005 80/Chapte 2.6.3 Các lệnh điều khiển chương trình 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 • 81/Chapte 2.6.3 Các lệnh điều khiển chương trình Lệnh nhảy có điều kiện JE/JZ, JNE/JNZ, JG/JNLE, JGE/JNL, JL/JNGE, JLE/JNG (dùng cho số có dấu) JA/JNBE, JB/JC/JNAE, JAE/JNB/JNC, JBE/JNA (dùng cho số không dấu) JNP/JPO, JP/JPE, JNS • 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 82/Chapte 2.6.3 Các lệnh điều khiển chương trình 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 CX=0 Lap: INC AL Lap: INC AL CMP AL, 10 CMP AL, 10 LOOPE Lap LOOPNE Lap Lặp đến CX=0 AL10 (ZF=0) Lặp đến CX=0 AL=10 © DHBK 2005 83/Chapte 2.6.3 Các lệnh điều khiển chương trình Lệnh CALL (và RET) • 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 84/Chapte 2.6.3 Các lệnh điều khiển chương trình 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 © DHBK 2005 85/Chapte 2.6.3 Các lệnh điều khiển chương trình 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 003FFH 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 © DHBK 2005 86/Chapte 2.6.3 Các lệnh điều khiển chương trình Lệnh ngắt INT 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 © DHBK 2005 87/Chapte Chương 2: Bộ vi xử lý Intel 8088/8086 2.1 Cấu trúc bên 2.2 Sơ đồ chân 2.3 Bản đồ nhớ máy tính IBM-PC 2.4 Các chế độ địa 8086 2.5 Cách mã hoá lệnh 8086 2.6 Mô tả tập lệnh 8086 2.6.1 Các lệnh di chuyển (thay đổi) liệu 2.6.2 Các lệnh số học logic 2.6.3 Các lệnh điều khiển chương trình 2.6.4 Các lệnh khác 2.7 Cách quản lý nhớ chế độ bảo vệ máy tính từ 80286 © DHBK 2005 88/Chapte 2.6.4 Các lệnh khác • NOP-No Operation (tiêu tốn chu kỳ đồng hồ) • WAIT-Wait for TEST or INTR Signal Chờ có tín hiệu mức thấp tác động vào chân TEST mức cao tác động vào chân INTR) • HALT-Halt Processing VXL dừng hoạt động Để thoát khỏi trạng thái dừng phải tác động vào chân INTR, NMI, RESET • ESC-Escape Truyền liệu cho đồng xử lý tốn học 8087 © DHBK 2005 89/Chapte Chương 2: Bộ vi xử lý Intel 8088/8086 2.1 Cấu trúc bên 2.2 Sơ đồ chân 2.3 Bản đồ nhớ máy tính IBM-PC 2.4 Các chế độ địa 8086 2.5 Cách mã hố lệnh 8086 2.6 Mơ tả tập lệnh 8086 2.7 Cách quản lý nhớ chế độ bảo vệ máy tính từ 80286 © DHBK 2005 90/Chapte 2.7 Đánh địa nhớ chế độ bảo vệ • Lý do: Hỗ trợ đa nhiệm từ 80286 Tương thích ngược với 8086 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 91/Chapte 2.7 Đánh địa nhớ chế độ bảo vệ segment selector 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 92/Chapte 2.7 Đánh địa nhớ chế độ bảo vệ • Mỗi chương trình sử dụng số vùng nhớ CPU bảo vệ vùng nhớ đó, khơng cho phép chương trình khác truy cập vào • Khơng cho phép đọc mã lệnh đoạn liệu ngược lại © DHBK 2005 93/Chapte 2.7 Đá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ớ