5. Nghiên cứu tìm hiểu về tập lệnh vi xử lý 8086

20 4.8K 6
5. Nghiên cứu tìm hiểu về tập lệnh vi xử lý 8086

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Yêu cầu: Trình bày sơ đồ khối chức bên CPU 8086, đặc điểm chức ghi CPU 8086 Cấu trúc lệnh tập lệnh CPU 8086 Thành viên nhóm : Nguyễn Thị Lan Anh ( nhóm trưởng ) Vũ Văn Dũng Nguyễn Quang Hải Nguyễn Văn Trường Trịnh Quang Trường MỤC LỤC Trang CẤU TRÚC BÊN TRONG CỦA 8086 1.1 sơ đồ khối 1.2 đơn vị giao tiếp Bus BIU đơn vị thực thi EU .3 1.3 ghi .4 TẬP LỆNH CỦA 8086 .7 2.1 Khái niệm lệnh, mã hoá lệnh trình thực lệnh .7 2.2 Cấu trúc lệnh 8086 2.3 Tập lệnh 8086 .10 2.3.1 Các lệnh trao đổi liệu 10 2.3.2 Các lệnh tính toán số học logic 12 2.3.3 Điều khiển, rẽ nhánh lặp 15 2.3.4 Điều khiển vi xử lý .17 2.4 Các chế độ địa 8086 .17 2.4.1 Chế độ địa ghi 17 2.4.2 Chế độ địa tức 18 2.4.3 Chế độ địa trực tiếp .18 2.4.4 Chế độ địa gián tiếp qua ghi .18 2.4.5 Chê độ địa tương đối sở 18 2.4.6 Chế độ địa tương đối số 19 2.4.7 Chế độ địa tương đối số sở .20 2.4.8 Phương pháp bỏ ngầm định ghi đoạn 20 BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG BÔ XỬ LÍ INTEL 8086 BỘ VI XỬ LÝ INTEL 8086 CẤU TRÚC BÊN TRONG CỦA 8086 Intel 8086 vi xử lý 16 bít Intel vi xử lý hỗ trợ tập lệnh x86 Vi xử lý sử dụng nhiều lĩnh vực khác nhau, máy IBM PC/XT Các vi xử lý thuộc họ sử dụng rộng rãi thời gian dài tính kế thừa sản phẩm họ x86 Các chương trình viết cho 8086 chạy hệ thống tiên tiến sau 1.1 Sơ đồ khối Hình 2-1 Sơ đồ khối 8086 Trong sơ đồ khối cho Hình 2-1, vi xử lý 8086 có hai khối BIU EU Về chi tiết, vi xử lý bao gồm đơn vị điều khiển, số học lô-gíc, hàng đợi lệnh tập ghi Chi tiết khối đơn vị chức trình bày phần tiếp sau 1.2 Đơn vị giao tiếp bus BIU đơn vị thực thi EU Theo sơ đồ khối Hình 2-1, CPU 8086 có khối chính: Đơn vị giao tiếp BIU (Bus Interface Unit) đơn vị thực EU (Execution Unit) Việc chia CPU thành BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG BÔ XỬ LÍ INTEL 8086 phần làm việc đồng thời có liên hệ với qua đệm lệnh làm tăng đáng kể tốc độ xử lý CPU Các bus bên CPU có nhiệm vụ chuyển tải tín hiệu khối Hệ thống bus CPU gồm bus liệu 16 bít ALU, bus điều khiển EU bus BIU Các đệm sử dụng để kết nối bus CPU với bus (bus hệ thống) nhằm nâng cao tính tương thích cho phối ghép BIU đưa địa chỉ, đọc mã lệnh từ nhớ, đọc/ghi liệu với nhớ, cổng vào Nói cách khác BIU chịu trách nhiệm đưa địa bus trao đổi liệu với bus Mã lệnh đọc từ bộ nhớ BIU nạp vào đệm lệnh (còn gọi hàng đợi lệnh) với dung lượng byte, hoạt động theo nguyên tắc FIFO dùng để chứa mã lệnh chờ EU xử lý EU bao gồm đơn vị điều khiển, khối có giải mã lệnh Mã lệnh từ đệm lệnh đưa đến đầu vào giải mã, nơi lệnh giải mã kiểu sinh vi thao tác Các thông tin thu từ đầu giải mã đưa đến mạch tạo xung điều khiển, kết ta thu dãy xung khác kênh điều khiển (tuỳ theo mã lệnh) để điều khiển hoạt động phận bên bên CPU Ngoài ra, EU có khối số học lôgic (Arithmetic and Logic Unit - ALU) dùng để thực thao tác khác với toán hạng lệnh Tóm lại, EU cung cấp thông tin địa cho BIU để khối đọc lệnh liệu, thân EU giải mã lệnh thực lệnh 1.3 1.3a Các ghi Các ghi đoạn Bộ vi xử lý 8086 chia nhớ cấp cho chương trình máy tính thành đoạn (Segment) theo nội dung chúng lưu trữ, đoạn chứa mã lệnh, đoạn chứa liệu, Để quản lý đoạn nhớ, vi xử lý 8086 sử dụng ghi 16 bít lưu địa bắt đầu đoạn nhớ chúng gọi ghi đoạn (Segment Registers) Có ghi đoạn, gồm: − Thanh ghi đoạn mã CS (Code-Segment) − Thanh ghi đoạn liệu DS (Data Segment) − Thanh ghi đoạn ngăn xếp SS (Stack Segment) − Thanh ghi đoạn liệu phụ ES (Extra Segment) Bốn ghi đoạn lưu địa bắt đầu bốn đoạn nhớ tên, gồm đoạn mã CS, đoạn liệu DS, đoạn ngăn xếp SS đoạn mở rộng ES Dung lượng lớn đoạn nhớ 64 KByte Tại thời điểm định vi xử lý làm việc với bốn đoạn nhớ kể Ngoài địa bắt đầu đoạn lưu ghi đoạn, vi xử lý 8086 sử dụng thêm ghi khác lưu địa ô nhớ cần truy nhập đoạn Thanh ghi gọi ghi lệch (offset register) Chi tiết dạng địa ô nhớ trình bày mục 1.2 BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG BÔ XỬ LÍ INTEL 8086 1.3b Các ghi đa Trong khối EU có bốn ghi đa 16 bít, gồm AX, BX, CX, DX Mỗi ghi đa dùng cho nhiều mục đích khác nhau, ghi gán chức chuyên biệt riêng Chính chúng gán tên có ý nghĩa Cụ thể: − AX (Accumulator): ghi tích lũy Các kết thao tác thường chứa AX (kết phép nhân, chia) − BX (Base): ghi sở, thường dùng để chứa địa sở dãy ô nhớ − CX (Count): đếm CX thường dùng để chứa số lần lặp trường hợp lệnh LOOP (lặp) − DX (Data): ghi liệu DX tham gia thao tác phép nhân chia số 16 bít DX thường dùng để chứa địa cổng lệnh vào/ liệu Một điều đặc biệt ghi đa sử dụng ghi 16 bít tách thành ghi bít độc lập AX tách thành ghi bít, gồm AH AL, với H bít phần cao, L bít phần thấp Tương tự BX, CX, DX tách thành BH BL, CH CL, DH DL tương ứng 1.3c Các ghi trỏ số Trong vi xử lý 8086 có ba ghi trỏ hai ghi số 16 bít, gồm: − IP: trỏ lệnh (Instruction Pointer) IP trỏ vào lệnh thực nằm đoạn mã CS Địa đầy đủ lệnh có dạng CS:IP xác định trình bày phần 1.2 − BP: trỏ sở (Base Pointer) BP trỏ vào liệu nằm đoạn ngăn xếp SS Địa đầy đủ phần tử đoạn ngăn xếp có dạng SS:BP xác định trình bày phần 1.2 − SP: trỏ ngăn xếp (Stack Pointer) SP trỏ vào đỉnh thời ngăn xếp nằm đoạn ngăn xếp SS Địa đỉnh ngăn xếp có dạng SS:SP xác định trình bày phần 1.2 − SI: số gốc hay nguồn (Source Index) SI vào liệu đoạn liệu DS mà địa cụ thể đầy đủ có dạng DS:SI xác định trình bày phần 1.2 − DI: số đích (Destination Index) DI vào liệu đoạn liệu DS (hoặc ES) mà địa cụ thể đầy đủ có dạng DS:DI (hoặc ES:DI) xác định trình bày phần 1.2 BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG BÔ XỬ LÍ INTEL 8086 Riêng lệnh thao tác với liệu kiểu chuỗi cặp ES:DI ứng với địa phần tử thuộc chuỗi đích cặp DS:SI ứng với địa phần tử thuộc chuỗi gốc 1.3d Thanh ghi cờ FR (flag register) Đây ghi đặc biệt CPU, bít dùng để phản ánh trạng thái định kết phép toán ALU thực trạng thái hoạt động EU Dựa vào cờ này, người lập trình có lệnh thích hợp cho vi xử lý (các lệnh nhảy có điều kiện) Thanh ghi cờ gồm 16 bít người ta dùng hết bít để làm bít cờ Hình 2-2 Hình 2-2 Thanh ghi cờ − U bít không sử dụng − C CF (Carry Flag): cờ nhớ CF = có nhớ mượn từ bít có nghĩa lớn MSB (Most Significant Bit) − P PF (Parity Flag): cờ chẵn lẻ PF phản ánh tính chẵn lẻ tổng số bít có kết Cờ PF =1 tổng số bít kết lẻ (odd parity) PF =0 tổng số bít kết chẵn (even parity) − A AF (Auxiliary Carry Flag): cờ nhớ phụ có ý nghĩa ta làm việc với số BCD (Binary Coded Decimal) AF = có nhớ mượn từ số BCD thấp (4 bít thấp) sang số BCD cao (4 bít cao) − Z ZF (Zero Flag): cờ rỗng ZF =1 kết = ZF =0 kết  − S SF (sign flag): cờ dấu SF = kết âm SF = kết không âm − O OF (Overflow Flag): cò tràn OF = kết số bù vượt qua giới hạn biểu diễn dành cho Trên bít cờ trạng thái phản ánh trạng thái khác kết sau thao tác đó, bít cờ đầu thuộc byte thấp cờ cờ giống vi xử lý bít 8085 Intel Chúng lập xoá tuỳ theo điều kiện cụ thể sau thao tác ALU Ngoài ra, vi xử lý 8086 có cờ điều khiển sau (các cờ lập xoá lệnh riêng): − T TF (Trap Flag): cờ bẫy TF = CPU làm việc chế độ chạy BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG BÔ XỬ LÍ INTEL 8086 lệnh (chế độ dùng cần tìm lỗi chương trình) − I IF (Interrupt Enable Flag): cờ cho phép ngắt IF = CPU cho phép yêu cầu ngắt (che được) IF = CPU cấm yêu cầu ngắt − D DF (Direction Flag): cờ hướng DF = CPU làm việc với chuỗi ký tự theo thứ tự từ phải sang trái, giảm địa (vì D cờ lùi) DF = CPU làm việc với chuỗi ký tự theo thứ tự từ trái sang phải, tăng địa TẬP LỆNH CỦA 8086 2.1 Khái niệm lệnh, mã hoá lệnh trình thực lệnh Lệnh vi xử lý ghi ký tự dạng gợi nhớ (mnemonic) để người sử dụng để nhận biết Đối với thân vi xử lý lệnh mã hoá dạng số (còn gọi mã máy) dạng biểu diễn thông tin mà máy hiểu Do lệnh cho dạng mã nên sau nhận lệnh, vi xử lý phải thực việc giải mã lệnh sau thực lênh Một lệnh có độ dài vài byte tuỳ theo thiết kế vi xử lý Số lượng bít n dùng để mã hóa lệnh (opcode) cho biết số lượng tối đa lệnh (2n) có vi xử lý Với byte vi xử lý mã hoá tối đa 256 lệnh Trong thực tế việc mã hoá lệnh cho vi xử lý phức tạp bị chi phối nhiều yếu tố khác Đối với vi xử lý 8086 lệnh có độ dài từ đến byte Ta lấy trường hợp lệnh MOV để giải thích cách mã hóa lệnh nói chung 8086 Lệnh MOV đích, gốc dùng để chuyển liệu ghi ô nhớ Chỉ nguyên với ghi 8086, ta đặt ghi vào vị trí toán hạng đích toán hạng gốc ta thấy phải cần tới nhiều mã lệnh khác để mã hoá tổ hợp Hình vẽ biểu diễn dạng thức byte dùng để mã hoá lệnh MOV Như để mã hoá lệnh MOV cần byte, bít byte đầu dùng để chứa mã lệnh Đối với lệnh MOV, bít W dùng để byte (W = 0) từ (W = 1) chuyển Trong thao tác chuyển liệu, toán hạng bắt buộc phải ghi Bộ vi xử lý dùng bít (phần REG) để mã hoá ghi CPU sau: BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG BÔ XỬ LÍ INTEL 8086 Bít D dùng để hướng liệu D = liệu đến ghi cho bít REG, D = liệu khỏi ghi cho bít REG bít MOD (chế độ) với bít R/M (thanh ghi/bộ nhớ) tạo bít dùng để chế độ địa cho toán hạng lệnh Bảng cho ta thấy cách mã hoá chế độ địa (cách tìm toán hạng bít này) Ghi chú: − addr8, addr16 tương ứng với địa 16 bít − Các giá trị cho cột 2, 3, (ứng với MOD =00, 01, 10) địa hiệu dụng (EA – Effective address) cộng với DS để tạo địa vật lý (riêng BP phải cộng với SS) Cấu trúc lệnh 8086 Một tập lệnh (ínstruction set ), kiến trúc tập lệnh (instruction set architecture – ISA ) phần kiến trúc máy tính liên quan tới việc thực thi chương trình, bao gồm kiểu liệu; lệnh;các ghi; phương pháp định địa chỉ; kiến trúc nhớ; ngắt; bẫy lỗi việc vào\ra với bên 2.2 Một kiến trúc tập lệnh bao gồm việc đặc tả tập mã thi hành ( opcode ) hay gọi ngôn ngữ máy thi hành loại vi xử lý riêng biệt Một tập lệnh máy tính chia làm nhiều nhóm lệnh với chức thực thao tác khác nhau: lệnh thao tác, lệnh truy cập nhớ, lệnh điều khiển, lệnh đặc quyền, lệnh vectơ BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG BÔ XỬ LÍ INTEL 8086  Một lệnh vi xử lý 86 có dạng tổng quát sau : < Mã gợi nhớ> , Chú ý: lệnh nguồn, đích đích nguồn  Một lệnh giải mã dạng mã máy thường có định dạng sau : OP-CODE ADDRESS(ES) OP-CODE phần mã thi hành ADDRESS(ES) 0,1,2 trường địa để xác định địa toán hạng có lệnh Một tập lệnh máy tính gồm lệnh có định dạng khác nhau, song phần OPCODE thiếu, phần Address có khoongtuyf theo số toán hạng xuất câu lệnh Và số toán hạng xuất câu lệnh tùy theo câu lệnh tùy theo kiến trúc tập lệnh Ví dụ cpu 8086 : • Mã lệnh Lệnh NOP Câu lệnh toán hạng CPU nghỉ chu kỳ máy, định dạng lệnh mã trường address • Mã_lệnh toán_hạng_đích Lệnh INC AX Câu lệnh có toán hạng Tăng nội dung chứa lên 1, định dạng lệnh mã có trường address • Mã_lệnh toán_hạng_đích, toán_hạng_nguồn Lệnh ADD AX, AX=AX+5 Trong định dạng mã có trường address Và máy tính Intel RISC 860, có lệnh với định dạng: • Mã_lệnh toán_hạng_đích, toán_hạng_nguồn, kết_quả OR 25, R0, R8 ; OR 25 với R0 lưu kết vào R8 BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG BÔ XỬ LÍ INTEL 8086 Tập lệnh 8086 2.3 Bộ xử lý 8086 có tập lệnh gồm 111 lệnh, chiều dài lệnh từ byte đến vài byte Tập lệnh 8086 hỗ trợ nhóm thao tác Các lệnh trao đổi liệu 2.3.1 Các câu lệnh nhóm trao đổi liệu cho phép trao đổi liệu ghi ô nhớ hay thiết bị vào/ra với ô nhớ ghi Kích cỡ liệu cho phép với câu lệnh byte (8 bít) word (16 bít) Như câu lệnh trao đổi liệu giúp nạp liệu cần thiết cho thao tác tính toán vi xử lý Ngoài ra, lệnh cho phép lưu kết tính toán nhớ thiết bị ngoại vi Bảng 2-2 Các lệnh trao đổi liệu 2.3.1.a Mã gợi nhớ MOV Chức Di chuyển byte hay wordnăng ghi ô nhớ IN, OUT Đọc, ghi byte hay word cổng ghi LEA Nạp địa hiệu dụng PUSH, POP Nạp vào, lấy word ngăn xếp XCHG Hoán đổi byte hay word MOV – Chuyển byte hay word Viết lệnh: MOV Đích, Gốc Mô tả: Đích ← Gốc Trong toán hạng đích gốc tìm theo chế độ địa khác phải có độ dài không phép đồng thời ô nhớ ghi đoạn Lệnh không tác động đến cờ Ví dụ: MOV AL, 74H ; AL ← 74 MOV CL, BL ; CL ← BL MOV DL, [SI] ; DL ← [DS:SI] MOV AL, Table [BX] ; AL ← [DS:[Table+BX]] 2.3.1.b LEA - Nạp địa hiệu dụng vào ghi Viết lệnh: LEA Đích, Gốc Trong đó: 10 BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG BÔ XỬ LÍ INTEL 8086 + Đích thường ghi: BX, CX, DX, BP, SI, DI + Gốc tên biến đoạn DS rõ lệnh ô nhớ cụ thể Mô tả: Đích ← Địa lệch Gốc, Đích ← Địa hiệu dụng Gốc Đây lệnh để tính địa lệch biến địa ô nhớ chọn làm gốc nạp vào ghi chọn Lệnh không tác động đến cờ Ví dụ: LEA DX, MSG ; nạp địa lệch biến MSG vào DX LEA CX, [BX] [DI] ; nạp vào CX địa hiệu dụng ; BX DI ra: EA = BX+DI 2.3.1.c IN- Đọc liệu từ cổng vào ghi ACC Viết lệnh: IN ACC, Port Mô tả: ACC ← [Port] Trong [Port] liệu đọc từ cổng có địa Port Port địa bít cổng, có giá trị khoảng 00H…FFH Như có khả sau: +Nếu ACC AL liệu bít đưa vào từ cổng Port +Nếu ACC AX liệu 16 bít đưa vào từ cổng Port cổng Port+1 Địa cổng lưu ghi DX Cách địa cổng hoá mềm dẻo Lúc địa cổng nằm dải 0000H FFFFH câu lệnh có dạng: IN ACC, DX Trong DX phải gắn từ trước giá trị ứng với địa cổng Lệnh không tác động đến cờ 2.3.1.d OUT - Ghi liệu từ Acc cổng Viết lệnh: OUT Port, Acc Mô tả: Acc → [port] Trong [port] liệu ghi cổng có địa Port Port địa bít cổng, có giá trị khoảng 00H FFH Như ta có khả sau: + Nếu Acc AL liệu bít đưa cổng port + Nếu Acc AX liệu 16 bít đưa cổng port cổng port +1 Có cách khác để biểu diễn địa cổng 16 bít thông qua ghi DX theo 11 BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG BÔ XỬ LÍ INTEL 8086 dạng: OUT DX, Acc Trong DX phải gán từ trước giá trị ứng với địa cổng Lệnh không tác động đến cờ Các lệnh tính toán số học lô gíc 2.3.2 Đây nhóm lệnh thực tính toán chủ yếu vi xử lý 8086 Bảng 2-3 Các lệnh số học lô gíc Mã gợi nhớ NOT Chức Phép Đảo (bù một) byte hay word AND Phép Và byte word OR Phép Hoặc byte word XOR Phép Hoặc loại trừ byte word SHL, SHR ADD, SUB Dịch trái, dịch phải lôgíc byte hay word Số bước CL xác định Dịch trái, dịch phải số học byte hay word Số bước CL xác định Quay trái, quay phải byte hay word Số bước CL xác định Cộng trừ byte word ADC, SBB Cộng trừ byte word có nhớ INC, DEC Tăng, giảm NEG Đảo byte word (bù 2) CMP So sánh hai byte word MUL, DIV Nhân, chia byte word không dấu IMUL, IDIV Nhân chia byte word có dấu SAL, SAR ROL, ROR 2.3.2.a ADD-Cộng toán hạng Viết lệnh: ADD Đích, Gốc Mô tả: Đích ← Đích + Gốc Trong toán hạng đích gốc tìm theo chế độ địa khác nhau, phải chứa liệu có độ dài không phép đồng thời ô nhớ không ghi đoạn Cập nhật: AF, CF, PF, SF, ZF Ví dụ: 12 BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG BÔ XỬ LÍ INTEL 8086 ADD AX, BX 2.3.2.b ; AX ← AX + BX SUB-Trừ toán hạng Viết lệnh: SUB Đích, Gốc Mô tả: Đích ← Đích - Gốc Trong toán hạng đích gốc tìm theo chế độ địa khác nhau, phải chứa liệu có độ dài không phép đồng thời ô nhớ không ghi đoạn Cập nhật: AF, CF, PF, SF, ZF Ví dụ: 2.3.2.c SUB AX, BX ; AX ← AX - BX MUL - Nhân số không dấu Viết lệnh: MUL Gốc Trong toán hạng Gốc số nhân tìm theo chế độ địa khác Mô tả: tuỳ theo độ dài toán hạng Gốc ta có trường hợp tổ chức phép nhân, toán hạng số nhân nơi chứa kết quả: Nếu Gốc số bít: AL × Gốc, số bị nhân phải số bít để AL sau nhân: AX ← tích, Nếu Gốc số 16 bít: AX × Gốc, số bị nhân phải số 16 bít để AX sau nhân: DXAX ← tích Nếu byte cao (hoặc 16 bít cao) 16 (hoặc 32) bít kết chứa CF=OF=0 Như cờ CF OF cho biết bỏ số kết Ví dụ: Nếu cần nhân số bít với số 16 bít, số 16 bít đặt Gốc số bít AL Số bít AL cần phải mở rộng sang AH cách gán AH=0 để làm cho số bị nhân nằm AX Sau việc dùng lệnh MUL Gốc kết có cặp DXAX Cập nhật: CF, OF Không xác định: AF, PF, SF, ZF 13 BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG BÔ XỬ LÍ INTEL 8086 Ví dụ: Tính 10 x 30 2.3.2.d MOV AL, 10 ; AL ← 10 MOV BL, 30 ; BL ← 30 MUL BL ; AX ← AL x BL = 10 × 30 = 300 DIV – Chia nguyên số dấu Viết lệnh: DIV Gốc Trong toán hạng Gốc số chia tìm theo chế độ địa khác Mô tả: tuỳ theo độ dài toán hạng gốc ta có trường hợp bố trí phép chia, toán hạng số bị chia nơi lưu kết quả: − Nếu Gốc số bít: AX : Gốc Số bị chia phải số không dấu 16 bít để AX Kết quả: thương lưu AL phần dư lưu AH − Nếu Gốc số 16 bít: DXAX : Gốc Số bị chia phải số không dấu 32 bít để cặp ghi DXAX Kết quả: thương lưu AX phần dư lưu DX − Nếu Gốc = thương thu lớn FFH FFFFH (tuỳ theo độ dài toán hạng Gốc) 8086 thực lệnh ngắt INT Không xác định: AF, CF, OF, PF, SF, ZF Ví dụ: Tính 300 : 10 2.3.2.e MOV AX, 300 ; AX ← 10 MOV BL, 10 ; BL ← 30 DIV BL ; AX : BL, AL ← 30, AH ← CMP- So sánh byte hay word Viết lệnh: CMP Đích, Gốc Mô tả: Đích – Gốc Trong toán hạng đích gốc tìm theo chế độ địa khác Nhưng phải chứa liệu có độ dài không phép đồng thời ô nhớ Lệnh tạo cờ, không lưu kết so sánh, sau so sánh toán hạng không bị thay đổi Lệnh thường dùng để tạo cờ cho lệnh nhảy có điều kiện (nhảy theo cờ) Các cờ theo quan hệ đích gốc so sánh số không dấu: 14 BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG BÔ XỬ LÍ INTEL 8086 CF ZF SF Đích = Gốc Đích > Gốc 0 Đích < Gốc 1 Cập nhật: AF, CF, OF, PF, SF, ZF 2.3.2.f AND - Phép toán hạng Viết lệnh: AND Đích, Gốc Mô tả: Đích - Đích, Gốc Trong toán hạng đích gốc tìm theo chế độ địa khác Nhưng phải chứa liệu độ dài không phép đồng thời ô nhớ không ghi đoạn Phép AND thường dùng để che đi/giữ lại vài bít toán hạng cách nhân logic toán hạng với toán hạng tức có bít 0/1 chỗ cần che đi/giữ nguyên tương ứng (toán hạng lúc gọi mặt nạ) Xoá: CF, OF Cập nhật: PF, SF, ZF, PF có nghĩa toán hạng bít Không xác định: AF Ví dụ: AND AL, BL ; nhân AL với BL theo bít, kết lưu vào AL AND BL, 0FH ; xóa bít cao BL 2.3.3 Điều khiển, rẽ nhánh lặp Các câu lệnh thuộc nhóm cho phép thay đổi trật tự thực câu lệnh bên chương trình Bảng 2-4 Các lệnh rẽ nhánh lặp tiêu biểu Mã gợi nhớ Chức JMP Nhảy không điều kiện JA (JNBE) Nhảy lớn JAE (JNB) Nhảy lớn JB (JNAE) Nhảy bé JBE (JNA) Nhảy bé JE (JZ) Nhảy nêu JC, JNC Nhảy cờ nhớ đặt, xóa JO, JNO Nhảy cờ tràn đặt, xóa 15 BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG BÔ XỬ LÍ INTEL 8086 JS, JNS Nhảy cờ dấu đặt, xóa LOOP LOOPE (LOOPZ) Lặp không điều kiện, số lần lặp CX xác định Lặp (cờ không) số lần lặp CX xác định LOOPNE (LOOPNZ) Lặp không (cờ không xóa) số lần lặp CX xác định CALL, RET Gọi hàm, trở từ hàm INT Gọi ngắt mềm IRET Quay trở từ đoạn chương trình ngắt 2.3.3.a JMP - Nhảy (vô điều kiện) đến đích Lệnh khiến cho vi xử lý 8086 bắt đầu thực lệnh địa định lệnh Lệnh phân biệt nhảy xa nhảy gần theo vị trí câu lệnh Tuỳ thuộc vào độ dài bước nhảy phân biệt kiểu lệnh nhảy ngắn, nhảy gần nhảy xa với độ dài lệnh khác Lệnh nhảy ngắn lệnh nhảy tương đối đến nhãn shortlabel Nơi đến phải nằm phạm vi từ -128 đến +127 so với vị trí lệnh nhảy Toán hạng nguồn lệnh byte độ dời để cộng thêm vào ghi IP Byte độ dời mở rộng dấu trước cộng vào ghi IP - Ví dụ : JMP SHORT 18h JMP 0F008h JMP DWORD PTR [3000h] Lệnh nhảy gần tương tự lệnh nhảy ngắn, khoảng nhảy phải nằm phạm vi từ -32768 đến +32767 so với vị trí lệnh nhảy Lệnh nhảy xa lệnh nhảy đến vị trí biểu diễn địa đầy đủ ô nhớ theo dạng địa đoạn:địa lệch Lệnh không tác động đến cờ 2.3.3.b LOOP -Lặp lại đoạn chương trình nhãn CX=0 Viết lệnh:LOOP NHAN Lệnh dùng để lặp lại đoạn chương trình (gồm lệnh nằm khoảng từ nhãn NHAN đến hết lệnh LOOP NHAN) số lần lặp CX=0 Điều có nghĩa trước vào vòng lặp số lần lặp mong muốn phải nạp vào ghi CX sau lần thực lệnh LOOP NHAN đồng thời CX tự động giảm CX← CX-1) Lệnh không tác động đến cờ 16 BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG BÔ XỬ LÍ INTEL 8086 Điều khiển vi xử lý 2.3.4 Các câu lệnh tác động lên ghi cờ làm thay đổi trạng thái hoạt động vi xử lý Bảng 2-5 Các lệnh điều khiển vi xử lý tiêu biểu Mã gợi nhớ 2.4 Chức STC, CLC Lập, xóa cờ nhớ STD, CLD Lập, xóa cờ hướng STI, CLI Lập, xóa cờ cho phép ngắt PUSHF, POPF NOP Nạp vào, lấy ghi cờ tới/từ ngăn xếp Không làm WAIT Chờ tín hiệu TEST HLT Treo vi xử lý Các chế độ địa 8086 Chế độ địa (addressing mode) cách để CPU tìm thấy toán hạng cho lệnh hoạt động Một vi xử lý có nhiều chế độ địa Các chế độ địa xác định từ chế tạo bi xử lý sau thay đổi Bộ vi xử lý 8086 họ 80x86 nói chung có chế độ địa sau: Chế độ địa ghi (register addressing mode) Chế độ địa tức (immediate addressing mode) Chế độ địa trực tiếp (direct addressing mode) Chế độ địa gián tiếp qua ghi (register indirect addressing mode) Chế độ địa tương đối sở (based indexed relative addressing mode) Chế độ địa tương đối số (indexed relative addressing mode) Chế độ địa tương đối số sở (based indexed relative addressing mode) 2.4.1 Chế độ địa ghi Trong chế độ địa này, người ta dùng ghi bên CPU toán hạng để chứa liệu cần thao tác Vì thực lệnh đạt tốc độ truy nhập cao so với lệnh có truy nhập đên nhớ Ví dụ 2-1 MOV BX, DX ; chuyển nội dung DX vào 17 BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG BÔ XỬ LÍ INTEL 8086 BX MOV DS, AX; chuyển nội dung AX vào DS ADD AL, DL ; cộng nội dung AL DL lưu vào AL 2.4.2 Chế độ địa tức Trong chế độ địa này, toán hạng đích ghi hay ô nhớ, toán hạng nguồn số vị trí toán hạng sau mã lệnh Chế độ địa dùng để nạp liệu cần thao tác vào ghi (ngoại trừ ghi đoạn cờ) vào ô nhớ đoạn liệu DS Ví dụ 2-2 MOV CL, 100 ; chuyển 100 vào CL MOV AX, 0FF0H ; chuyển 0FF0H vào AX để MOV DS, AX vào ghi đoạn) MOV [BX], 10 2.4.3 ; đưa vào DS (vì chuyển trực tiếp ; Nạp 10 vào ô nhớ có địa DS:BX Chế độ địa trực tiếp Trong chế độ địa địa lệnh ô nhớ làm toán hạng, toán hạng ghi mà không ô nhớ Nếu so sánh với chế độ địa tức ta thấy sau mã lệnh toán hạng mà địa lệch toán hạng Ví dụ 2-3 MOV AL, [1234H] ;chuyển nội dung ô nhớ DS:1234 vào AL MOV [4320H], CX ;chuyển CX vào ô nhớ liên tiếp DS:4320 DS:4321 2.4.4 Chế độ gián tiếp qua ghi Trong chế độ địa toán hạng ghi sử dụng để chứa địa lệch ô nhớ chứa liệu, toán hạng ghi mà không ô nhớ (8086 không cho phép tham chiếu nhớ lần lệnh) Ví dụ 2-4 MOV AL, [BX] ; chuyển nội dung ô nhớ có địa DS:BX vào AL MOV [SI], CL ; chuyển CL vào ô nhớ có địa DS:SI MOV [DI], AX ; chuyển AX vào ô nhớ liên tiếp DS:DI DS: [DI + 1] 2.4.5 Chế độ địa tương đối sở Trong chế độ địa ghi sở BX BP số biểu diễn 18 BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG BÔ XỬ LÍ INTEL 8086 giá trị dịch chuyển (displacement value) dùng để tính địa hiệu dụng toán hạng vùng nhớ DS SS Sự có mặt giá trị dịch chuyển xác định tính tương đối địa so với địa sở Ví dụ 2-5 MOV CX, [BX] +10 ; chuyển nội dung ô nhớ liên tiếp có địa DS: [BX + 10] ; DS: [BX+10] vào CX MOV CX, [BX+10] ; cách viết khác lệnh MOV CX, 10 [BX] ; cách viết khác lệnh đầu MOV AL, [BP] +5 ; chuyển nội dung ô nhớ SS: [BP+5] vào AL ADD AL, Table [BX] ; cộng AL với ô nhớ BX bảng Table ; (bảng nằm DS), kết lưu vào AL Trong ví dụ trên: − 10 giá trị cụ thể cho biết mức dịch chuyển toán hạng Table tên mảng biểu diễn kiểu dịch chuyển mảng (phần tử đầu tiên) so với địa đầu đoạn liệu DS − [BX+10] [BP+5] gọi địa hiệu dụng (effective address – EA, theo cách gọi Intel) − DS: [BX+10] SS: [BP+5] logic ô nhớ tương ứng với địa vật lý − Theo cách định nghĩa địa hiệu dụng (EA) phần tử thứ BX (kể từ 0) mảng Table [BX] thuộc đoạn DS EA = Table+BX phần tử EA = Table 2.4.6 Chế độ địa tương đối số Trong chế độ địa ghi số SI DI số biểu diễn giá trị dịch chuyển (displacement value) dùng để tính địa hiệu dụng toán hạng vùng nhớ DS ES (trong lệnh chuyễn chuỗi byte từ) Ví dụ 2-6 MOV CX, [SI] +10 ; chuyển nội dung ô nhớ liên tiếp có địa DS: [SI + 10] ; DS: [SI+10] vào CX MOV CX, [SI+10] ; cách viết khác lệnh MOV CX, 10 [SI] ; cách viết khác lệnh đầu MOV AL, [DI] +5 2.4.7 ; chuyển nội dung ô nhớ DS: [DI+5] vào AL Chế độ địa tương đối số sở 19 BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG BÔ XỬ LÍ INTEL 8086 Kết hợp hai chế độ địa tương đối số tương đối sở ta có chế độ địa tương đối số sở Trong chế độ địa ta dùng ghi sở lẫn ghi số biểu diễn dịch chuyển địa để tính địa toán hạng Ta thấy chế độ địa phù hợp cho việc địa hoá mảng hai chiều Ví dụ 2-7 MOV AX, [ BX ] [SI ]+8 ;chuyển ô nhớ liên tiếp có địa ; DS:[BX+SI+8] DS:[BX+SI+9] vào AX MOV AX, [BX+SI+8] ; cách viết khác lệnh MOV CL, [BP+DI+5] ; chuyển ô nhớ SS:[BP+DI+5] vào CL 2.4.8 Phương pháp bỏ ngầm định ghi đoạn Như phần trước đề cập, ghi đoạn ghi lệch ngầm định kèm với cặp dùng để địa hoá toán hạng vùng nhớ khác Bảng 2-1 cặp đôi ngầm định ghi đoạn ghi lệch thường dùng Vì tính ngầm định nên lệnh ta cần viết ghi lệch đủ sở để tính địa toán hạng Tuy nhiên, tổ hợp ngầm định nêu, 8086 cho phép ta làm việc với tổ hợp khác ghi đoạn ghi lệch Muốn loại bỏ tổ hợp ngầm định nói trên, viết lệnh phải ghi rõ ghi đoạn dùng để tính địa Bảng 2-1 Các cặp ghi đoạn ghi lệch ngầm định Thanh ghi đoạn CS DS ES SS Thanh ghi lệch IP SI, DI, BX DI SP, BP Ví dụ: Nếu muốn thay đổi, không lấy toán hạng đoạn liệu DS, mà lại lấy toán hạng đoạn liệu phụ ES để đưa vào AL, phải viết lại lệnh thành: MOV AL, ES:[BX] Trong ta dùng ES: để loại bỏ ghi đoạn ngầm định DS để rõ ghi đoạn dùng lệnh ES 20 [...]... mỗi lần thực hiện lệnh LOOP NHAN thì đồng thời CX tự động giảm đi một CX← CX-1) Lệnh này không tác động đến các cờ 16 BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG 2 BÔ XỬ LÍ INTEL 8086 Điều khiển vi xử lý 2.3.4 Các câu lệnh này tác động lên thanh ghi cờ làm thay đổi trạng thái hoạt động của vi xử lý Bảng 2-5 Các lệnh điều khiển vi xử lý tiêu biểu Mã gợi nhớ 2.4 Chức năng STC, CLC Lập, xóa cờ nhớ STD, CLD Lập, xóa... Không làm gì cả WAIT Chờ tín hiệu TEST HLT Treo vi xử lý Các chế độ địa chỉ của 8086 Chế độ địa chỉ (addressing mode) là cách để CPU tìm thấy toán hạng cho các lệnh của nó khi hoạt động Một bộ vi xử lý có thể có nhiều chế độ địa chỉ Các chế độ địa chỉ này được xác định ngay từ khi chế tạo ra bộ bi xử lý và sau này không thể thay đổi được Bộ vi xử lý 8086 và cả họ 80x86 nói chung có 7 chế độ địa chỉ... đích nào đó Lệnh này khiến cho bộ vi xử lý 8086 bắt đầu thực hiện một lệnh mới tại địa chỉ được chỉ định trong lệnh Lệnh này phân biệt nhảy xa và nhảy gần theo vị trí của câu lệnh mới Tuỳ thuộc vào độ dài của bước nhảy chúng ta phân biệt các kiểu lệnh nhảy ngắn, nhảy gần và nhảy xa với độ dài lệnh khác nhau Lệnh nhảy ngắn là lệnh nhảy tương đối đến nhãn shortlabel Nơi đến phải nằm trong phạm vi từ -128... địa chỉ cổng 16 bít là thông qua thanh ghi DX theo 11 BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG 2 BÔ XỬ LÍ INTEL 8086 dạng: OUT DX, Acc Trong đó DX phải được gán từ trước giá trị ứng với địa chỉ cổng Lệnh này không tác động đến các cờ Các lệnh tính toán số học và lô gíc 2.3.2 Đây là các nhóm lệnh thực hiện các tính toán chủ yếu của vi xử lý 8086 Bảng 2-3 Các lệnh số học và lô gíc Mã gợi nhớ NOT Chức năng Phép Đảo... trong AX Sau cùng chỉ vi c dùng lệnh MUL Gốc và kết quả có trong cặp DXAX Cập nhật: CF, OF Không xác định: AF, PF, SF, ZF 13 BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG 2 BÔ XỬ LÍ INTEL 8086 Ví dụ: Tính 10 x 30 2.3.2.d MOV AL, 10 ; AL ← 10 MOV BL, 30 ; BL ← 30 MUL BL ; AX ← AL x BL = 10 × 30 = 300 DIV – Chia nguyên 2 số không có dấu Vi t lệnh: DIV Gốc Trong đó toán hạng Gốc là số chia và có thể tìm được theo các chế... hạng Vi t lệnh: ADD Đích, Gốc Mô tả: Đích ← Đích + Gốc Trong đó toán hạng đích và gốc có thể tìm được theo các chế độ địa chỉ khác nhau, nhưng phải chứa dữ liệu có cùng độ dài và không được phép đồng thời là 2 ô nhớ và cũng không được là thanh ghi đoạn Cập nhật: AF, CF, PF, SF, ZF Ví dụ: 12 BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG 2 BÔ XỬ LÍ INTEL 8086 ADD AX, BX 2.3.2.b ; AX ← AX + BX SUB-Trừ 2 toán hạng Vi t lệnh: ... (trong các lệnh chuyễn chuỗi các byte hoặc từ) Ví dụ 2-6 MOV CX, [SI] +10 ; chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ DS: [SI + 10] ; và DS: [SI+10] vào CX MOV CX, [SI+10] ; một cách vi t khác của lệnh trên MOV CX, 10 [SI] ; một cách vi t khác của lệnh đầu MOV AL, [DI] +5 2.4.7 ; chuyển nội dung ô nhớ DS: [DI+5] vào AL Chế độ địa chỉ tương đối chỉ số cơ sở 19 BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG 2 BÔ XỬ LÍ... cùng độ dài và không được phép đồng thời là 2 ô nhớ Lệnh này chỉ tạo các cờ, không lưu kết quả so sánh, sau khi so sánh các toán hạng không bị thay đổi Lệnh này thường được dùng để tạo cờ cho các lệnh nhảy có điều kiện (nhảy theo cờ) Các cờ chính theo quan hệ đích và gốc khi so sánh 2 số không dấu: 14 BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG 2 BÔ XỬ LÍ INTEL 8086 CF ZF SF Đích = Gốc 0 1 0 Đích > Gốc 0 0 0 Đích...BÔ VI XỬ LÍ INTEL 8086 CHƯƠNG 2 BÔ XỬ LÍ INTEL 8086 + Đích thường là một trong các thanh ghi: BX, CX, DX, BP, SI, DI + Gốc là tên biến trong đoạn DS được chỉ rõ trong lệnh hoặc ô nhớ cụ thể Mô tả: Đích ← Địa chỉ lệch của Gốc, hoặc Đích ← Địa chỉ hiệu dụng của Gốc Đây là lệnh để tính địa chỉ lệch của biến hoặc địa chỉ của ô nhớ chọn làm gốc rồi nạp vào thanh ghi đã chọn Lệnh này không tác... đến +127 so với vị trí của lệnh nhảy Toán hạng nguồn trong lệnh chỉ là byte độ dời để cộng thêm vào thanh ghi IP Byte độ dời này được mở rộng dấu trước khi cộng vào thanh ghi IP - Ví dụ : JMP SHORT 18h JMP 0F008h JMP DWORD PTR [3000h] Lệnh nhảy gần tương tự lệnh nhảy ngắn, nhưng khoảng nhảy phải nằm trong phạm vi từ -32768 đến +32767 so với vị trí của lệnh nhảy Lệnh nhảy xa là lệnh nhảy đến vị trí bất

Ngày đăng: 12/11/2016, 14:06

Từ khóa liên quan

Mục lục

  • 1 CẤU TRÚC BÊN TRONG CỦA 8086 3

  • 1.1 sơ đồ khối 3

  • 1.2 đơn vị giao tiếp Bus BIU và đơn vị thực thi EU 3

  • 1.3 các thanh ghi 4

  • 2 TẬP LỆNH CỦA 8086 7

  • 2.1 Khái niệm lệnh, mã hoá lệnh và quá trình thực hiện lệnh 7

    • 2.2 Cấu trúc lệnh của 8086 8

    • 2.3 Tập lệnh của 8086 10

    • 2.3.1 Các lệnh trao đổi dữ liệu 10

    • 2.3.2 Các lệnh tính toán số học và logic 12

    • 2.3.3 Điều khiển, rẽ nhánh và lặp 15

    • 2.3.4 Điều khiển vi xử lý 17

    • 2.4 Các chế độ địa chỉ của 8086 17

    • 2.4.1 Chế độ địa chỉ thanh ghi 17

    • 2.4.2 Chế độ địa chỉ tức thì 18

    • 2.4.3 Chế độ địa chỉ trực tiếp 18

    • 2.4.4 Chế độ địa chỉ gián tiếp qua thanh ghi 18

    • 2.4.5 Chê độ địa chỉ tương đối cơ sở 18

    • 2.4.6 Chế độ địa chỉ tương đối chỉ số 19

    • 2.4.7 Chế độ địa chỉ tương đối chỉ số cơ sở 20

    • 2.4.8 Phương pháp bỏ ngầm định thanh ghi đoạn 20

Tài liệu cùng người dùng

Tài liệu liên quan