Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 11 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
11
Dung lượng
147,5 KB
Nội dung
TẬP LỆNH CỦA BỘ VI XỬ LÝ 8088 Tập lệnh vi xử lí 8088 nói chung chia thành 12 nhóm,với nhóm thao tác liệu nhóm đặc biệt(gồm thị điều khiển) Tập lênh vi xử lí 8088 bao gồm nhóm lệnh chính: Nhóm lệnh tính toán số học, nhóm lệnh rẽ nhánh, nhóm lệnh Logic.Nói chung lệnh gồm có cấu chúc sau: Nhóm lệnh tính toán số học - Lệnh cộng không nhớ: ADD Đích, Nguồn Đích ← Đích + Nguồn Trong toán hạng đích nguồn 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, OF, PF, SF, ZP Ví dụ : ADD CX,SI ; CX ← CX + SI ADD DH,BL ; DH ← DH + BL ADD [1000h],BX ; [1001h,1000h] ← [1001h,1000h] + BX ADD [2000h],CL ; [2000h] ← [2000h] + CL ADD AL,[0000h] ; AL ← AL + [0000h] ADD BYTE PTR [SI+8],5 ; [SI+8] ← [SI+8] + 05h - Lệnh cộng có nhớ: ADC Đích, Nguồn Đích ← Đích + Nguồn + CF Trong toán hạng đích nguồn 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, OF, PF, SF, ZP Ví dụ : ADC BX,AX ; BX ← BX + AX + CF ADC BYTE PTR [1000h],7Ah ; [1000h] ← [1000h]+7Ah+CF - Lệnh tăng: INC Đích Đích ← Đích + Trong toán hạng đích tìm theo chế độ địa khác Nếu đích = FFH ( FFFFH) đích+1 = 00H ( 0000H) mà không ảnh hưởng đến cờ CF Lệnh cho kết tương đương lệnh ADD đích,1 chạy nhanh Cập nhật: AF, OF, PF, SF, ZP Không tác động: CF Ví dụ : INC CH INC WORD PTR [1000h] - Lệnh giảm: DEC Đích Đích ← Đích - Trong toán hạng đích tìm theo chế độ địa khác Nếu đích = 00H ( 0000H) đích-1 = FFH ( FFFFH) mà không làm ảnh hưởng đến cờ CF Lệnh cho kết tương đương lệnh SUB đích,1 chạy nhanh Cập nhật: AF, OF, PF, SF, ZP Không tác động: CF - Lệnh trừ không mượn: SUB Đích Mô tả: Nguồn Đích ← Đích - Nguồn Trong toán hạng đích nguồn 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, OF, PF, SF, ZP Ví dụ : SUB DL,AL ; DL ← DL - AL SUB CX,[DI] ; CX ← CX - [DI+1,DI] SUB BP,4 ; BP ← BP - - Lệnh trừ có mượn: SBB Đích, Nguồn Mô tả: Đích ← Đích - Nguồn – CF Trong toán hạng đích nguồn 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, OF, PF, SF, ZP Ví dụ : SBB SI,BX ; SI ← SI - BX -CF SBB BYTE PTR [BX],2 ; [BX+1,BX] ← [BX+1,BX] - - CF - NEG Đích: Lấy bù hai toán hạng, đảo dấu toán hạng Mô tả: Đích ← – (Đích) Lệnh hoàn toàn tương đương với việc lấy (NOT đích +1) làm kết Nếu ta lấy bù hai -128 -32768 kết không đổi cờ OF =1 để báo kết bị tràn Cập nhật: AF, CF, OF, PF, SF, ZF - Lệnh nhân không dấu: MUL Nguồn Trong số hạng nguồn số nhân tìm theo nhiều chế độ địa khác Mô tả: Tùy theo độ dài toán hạng nguồn ta có trường hợp tổ chức phép nhân, chỗ để ngầm định cho số bị nhân kết + Nếu nguồn số bit: AL x Nguồn, số bị nhân phải số bit để AL, sau nhân: AX ← Tích + Nếu nguồn số 16 bit: AX x Nguồn, số bị nhân số 16 bit để AX, sau nhân: DXAX ← Tích Nếu byte cao ( 16 bit cao) 16 ( 32) bit kết chứa CF=OF=0 Như cờ CF OF báo cho ta biết bỏ số kết Ví dụ : Nếu AL=5, CH=4, sau thực lệnh MUL CH ta có AX = AL*CH = 0014h Nếu AX=500h, [1001h,1000h]=401h, sau thực lệnh MUL WORD PTR [1000h] ta có DXAX = AX * [1001h,1000h] = 500h * 401h = 00140500h Nghĩa DX=0014h AX=0500h - Lệnh nhân có dấu: IMUL Nguồn Trong toán hạng nguồn số nhân tìm theo chế độ địa khác Mô tả: Tùy theo độ dài toán hạng nguồn ta có trường hợp bố trí phép nhân , số để ngầm định cho số bị nhân kết + Nếu nguồn số bit: AL x Nguồn, số bị nhân số có dấu bit AL, sau nhân: AX ← Tích + Nếu nguồn số 16 bit: AX x Nguồn, số bị nhân phải số có dấu 16 bit để AX, sau nhân: DXAX ← Tích Nếu tích thu nhỏ, không đủ lấp đầy hết chỗ dành cho cácbit không dùng đến thay bit dấu Nếu byte cao ( 16 bit cao) 16 bit ( 32 bit) kết chứa giá trị dấu CF=OF=0 Nếu byte cao ( 16 bit cao) 16 bit ( 32 bit) kết chứa phần kết CF=OF=1 Như CF OF báo cho ta biết kết cần độ dài thực chất - Lệnh chia không dấu: DIV Nguồn Trong toán hạng nguồn số chia tìm theo chế độ địa khác Mô tả: Tùy theo độ dài toán hạng gốc ta có trường hợp bố trí phép chia, chế độ ngầm định cho số bị chia kết + Nếu nguồn số bit: Lấy AX chia cho Nguồn_8bit, thương để AL, số dư để AH, số bị chia phải số không dấu 16 bit Sau chia: AL ← Thương, AH ← Số dư + Nếu nguồn số 16 bit: Lấy DXAX chia cho Nguồn_16bit, thương để AX, số dư để DX, số bị chia phải số không dấu bit Sau chia: AX ← Thương, DX ← Số dư Nếu thương số nguyên làm tròn theo số nguyên sát Nếu nguồn = thương thu lớn FFH FFFFH 8088 thực lệnh ngắt INT Không xác định: AF, CF, OF, PF, SF, ZP Ví dụ : Nếu AX=0024h, [2000h]=05 sau thực lệnh DIV BYTE PTR [2000h] ta có AL=07 AH=01 Nếu DX=0001h, AX=0024h, BX=0200h sau thực lệnh DIV BX ta có AX=0008 DX=0024h - Lệnh chia có dấu: IDIV Nguồn Trong toán hạng nguồn số chia tìm theo chế độ địa khác Đây lệnh dùng để chia số nguyên có dấu Chỗ để ngầm định số chia, số bị chia, thương số dư giống DIV Nhưng có điều khác là: + Sau phép chia AL chứa thương, AH chứa số dư + Dấu số dư trùng với dấu số bị chia + Nếu gốc =0 thương nằm dải -128… +127 -32768…+32768 8088 thực lệnh ngắt INT Tương tự DIV - Các lệnh hiệu chỉnh thực phép toán với mã BCD ASCII:DAA, DAS, AAA, AAD, AAM, AAS Nhóm lệnh tính toán logic - AND Đích, Nguồn Mô tả: Đích ← Đích ∧ Nguồn Trong toán hạng đích nguồn 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 Phép And thường dùng để che đi/giữ lại vài bit toán hạng cách nhân logic toán hạng với toán hạng tức có bit 0/1 chỗ cần che đi/giữ nguyên tương ứng - OR Đích, Nguồn Mô tả: Đích ← Đích ∨ Nguồn Trong toán hạng đích nguồn 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 Phép Or thường dùng để lập vài bit toán hạng cách cộng logic toán hạng với toán hạng tức thời có bit vị trí tương ứng cần thiết lập - XOR Đích, Nguồn Mô tả: Đích ← Đích ⊕ Nguồn Trong toán hạng đích nguồn 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 Từ tính chất phép loại trừ ta thấy toán hạng đích trùng với toán hạng nguồn kết 0, lệnh dùng để xóa ghi kèm theo cờ CF OF bị xóa Xóa: CF, OF - NOT Đích : Lấy bù toán hạng, đảo bit toán hạng Mô tả: Đích ← NOT Đích Lệnh không tác dụng đến cờ - TEST Đích, Nguồn Mô tả: Đích ∧ Nguồn Trong toán hạng đích nguồn 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 Sau lệnh toán hạng không bị thay đổi kết không lưu giữ Các cờ tạo dùng làm điều kiện cho lệnh nhảy có điều kiện Lệnh có tác dụng che mặt nạ Xóa: CF, OF Cập nhật: PF, SF, ZP Không xác định: AF Nhóm lệnh rẽ nhánh(nhảy) Việc sử dụng nhóm lệnh nhảy làm thay đổi tính câu lệnh hợp ngữ - Lệnh nhảy không điều kiện: JMP Nhãn (uncondition Jump to Specifled Destination) Nhảy(vô điều kiện đến đích Nhãn Lệnh bắt đầu địa ứng với nhãn ’Nhãn’ Lệnh JMP nhảy lên(về phía địa thấp) nhảy xuống (về phía địa cao) xảy tối đa ½ đoạn (64kbyte) Lệnh không tác đọng đến cờ -Lệnh nhảy có điều kiện - Dạng lệnh : Jcond shortlabel - Giải thích : Nếu thỏa điều kiện nhảy tương đối IP ← địa lệnh kế + độ dời (mở rộng dấu 16 bit) ngược lại không làm (qua lệnh kế) - Tác động cờ : - Lệnh nhảy có điều kiện dùng trạng thái cờ để làm điều kiện - Sau bảng mã lệnh nhảy có điều kiện với điều kiện nhảy Mã lệnh Giải thích Điều kiện JE/JZ Nhảy bằng/không ZF = JL/JNGE Nhảy nhỏ hơn/không lớn (SF xor OF) = JLE/JNG Nhảy nhỏ /không lớn ((SF xor OF) or ZF) = JB/JNAE/JC Nhảy /không bằng/nhớ CF = JBE/JNA Nhảy /không (CF or ZF) = JP/JPE Nhảy kiểm tra / kiểm tra chẳn PF = JO Nhảy tràn OF = JS Nhảy dấu SF = JNE/JNZ Nhảy không bằng/khác không ZF = JNL/JGE Nhảy không nhỏ hơn/lớn (SF xor OF) = JNLE/JG Nhảy không nhỏ /lớn ((SF xor OF) or ZF) = JNB/JAE/JNC Nhảy không /trên bằng/không nhớ CF = JNBE/JA Nhảy không /trên (CF or ZF) = JNP/JPO Nhảy không kiểm tra / kiểm tra lẻ PF = JNO Nhảy không tràn OF = JNS Nhảy không dấu SF = - Ví dụ : MOV CX,3 ; thực vòng lặp làm lần MOV AX,0 Nhan: ADD AX,12 DEC CX JNZ Nhan ; nhảy đến lệnh vị trí “Nhan” CX ≠ MOV [3000h],AX Nhóm lệnh dịch quay bit +SAL đích, CL: Dịch trái số học +SHL đích, CL: Dịch trái logic Toán hạnh đích tìm theo chế độ địa Hai lệnh có tác động dịch trái số học Mỗi lần dịch MSB đưa qua cờ CF giá trị đưa vào LSB, Thao tác gọi dcihj logic Cl phải chứa sẵn số lần dịch mong muốn Trong trường hợp muốn dịch lần, ta viết lệnh trực tiếp: SAL đích, ứng dụng: Mỗi lần dịch tương đương việc nhân toán hạng với số không dấu Vậy muốn nhân số không dấu với 2i ta dịch trái số bị nhân i lần CF MSB LBS Cờ OF dịch lần mà MSb thay đổi Không xác định sau nhiều lần dịch CF MSB sau lần dịch , lệnh nhảy dung để tạo cờ CF từ giá trị MSB làm điều kiện cho lệnh nhảy có điều kiện Cập nhật: SF, PF, ZF không xác định AF + SAR đích, CL: Dịch phải số học Toán hạng đích tìm theo chế độ địa chỉ.Lệnh có tác dụng dịch phải số học toán hạnh Sau nỗi lần dịch MSB giữ lại, LSB đưa vào cờ CF Cl chứa sẵn số lần dịch Trong trường hợp muốn dịch lần, ta viết trực tiếp: SAR đích, ứng dụng sau lần dịch, tương đương việc chia toán hạng với số có dấu.Vậy muốn chia số có dấu với 2i ta phải dịch chuyển số bị chia i lần MSB LBS CF Cờ OF dịch lần mà LSB thay đổi Không xác định sau nhiều lần dịch CF LSB sau lần dịch Vì lệnh dung để tạo cờ CF từ giá trị LSB làm điều kiện lệnh nhảy có điều kiện Cập nhật: SF, PF, ZF không xác định AF +SHR đích, CL: Dịch phải logic MSB LBS CF Toán hạng đích tìm theo chế độ địa Lệnh có tác động giống lệnh SAL, SHL theo chiều ngược lại + ROL đích, CL: Quay vòng sang trái Toán hạng đích tìm theo chế độ địa Lệnh có tác dụng quay vòng toán hạng sang trái MSB đưa qua cờ CFZ LSB ZCl chứa sẵn số lần quay CF MSB LSB Trong trường hợp muốn quay lần ta viết lệnh: ROL đích, Ta thấy, Nếu Cl = toán hạng đích bít kết không bị thay đổi toán hạng quay tròn vòng, CL = nibble toán hạng bị đổi chỗ cho Cờ OF quay lần mà MSB thay đổi.Không xác đínhau nhiều lần quay CF MSB sau lần quay, lệnh nheyr dung để tạo cờ CF từ giá trị MSB làm điều kiện cho lệnh nhảy có điều kiện Cập nhật: CF, OF không xác định AF + ROR đích, CL: Quay vòng sang phải Toán hạng đích tìm theo chế đọ địa Lệnh có tác dụng quay vòng toán hạng sang phải LSB quay qua cờ CF MSB CL phải chứa sẵn số lần quay MSB LBS CF + RCL đích, CL: Quay trái qua cờ CF Lệnh quay toán hạng sang trái thong qua cờ CF, CL phải chứa sẵn số lần quay CF MSB LBS Trong trường hợp muốn quay lần, ta viết lệnh trực tiếp: RCL đích, Ta thấy CL = toán hạng đích bit kết không bị thay đổi CF với toán hạng ghi(8 bit) quay vòng Cờ CF 1 neeus quay lần mà LSB thay đổi Không xác định sau nhiều lần quay CF MSb sau lần quay Cập nhật: CF, OF ( Chỉ có hai cờ ảnh hưởng) + RCR đích, CL: Quay phải cờ CF Lệnh quay toán hạng sang phải thong qua cờ CF, CL phải chứa sẵn số lần quay MSB LBS CF Trong trường hợp muốn quay lần ta viết trực tiếp lệnh: RCR đích, Ta thấy, CL =9 toán hạng đích bit kết không bị thay đổi CF với toán hạng ghi (8 bit) quay vòng CF LSB sau lần quay Cập nhật: CF, OF (Chỉ hai cờ bị ảnh hưởng) Nhóm lệnh chuyển liệu Nhóm thực vận chuyển liệu từ nơi đến nơi khác - MOV Đích, Nguồn : Sao chép liệu Nguồn vào đích Mô tả: Đích Nguồn Trong toán hạng đích gốc tìm theo chế độ địa khác nhau, 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ờ - XCHG Đích, Nguồn : Hoán đổi nội dung toán hạng đích nguồn Mô tả: Đích Gốc Trong toán hạng gốc đích 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 Sau lệnh XCHG toán hạng chứa nội dung cũ toán hạng ngược lại Lệnh không tác động đến cờ - LDS đích, nguồn (Load Register ang DS with word from memory) Lệnh thực hiên nạp word từ nhớ vào ghi cho lệnh word vào ghi DS(nguồn đến đích, nguồn+2 đến DS) Ứng dụng đầu vùng nhớ chứa chuỗi nguồn vào SI DS trước dung lệnh thao tác chuỗi Lệnh không tác động đến cờ Ví dụ: LDS,Str ;Lệnh nạp vào Sl nội dung ô nhớ Str Str+1, nạp vào ;DS nội dung ô nhớ Str+2 Str+3, ô nhớ nằm DS - PUSH Nguồn Cất nội dung ghi ô nhớ 16 bit vào ngăn xếp - POP Đích Lấy liệu 16 bit ngăn xếp để vào Đích - XLAT Chuyển nội dung ô nhớ nằm bảng ô nhớ bit vào ghi AL Địa bắt đầu bảng xác định DS:BX Địa lệch ô nhớ bảng xác định AL Nhóm lệnh chuyển địa - LEA Đích, Nguồn (Load Eff ective Address): Lệnh thực nạp địa hiệu dụng vào ghi.Toán hạng ‘đích’ thường trang ghi: BX, CX,DX, BP,SI,DI Toán hạng ‘nguồn’ tên biến đoạn DS lệnh ô nhớ cụ thể Ví dụ: LEA DX, Str ;Lệnh nạp địa offset Str vào DX LEA CX,[BX] ;Lệnh nạp địa hiệu dụng (EA-Effective Adress) ;EA=BX LEA CX,[BX],[DI];Lệnh nạp địa hiệu dụng EA=BX+DI - LDS Đích, Nguồn Chuyển nội dung ô nhớ Nguồn 32 bit vào cặp ghi 16 bit, 16 bit cao Nguồn nạp vào DS, 16 bit thấp nạp vào ghi Đích 16 bit - LES Đích, Nguồn Lệnh giống lệnh LDS byte nạp vào ghi ES Ứng dụng: thường nạp vào DI ES địa đầu vùng nhớ chứa chuỗi trước thực lệnh thao tác chuỗi.lệnh không tác đọng đến cờ Ví dụ: LES DI,Str ;Lệnh nạp địa oíset Str vào DX Nhóm lệnh chuyển ghi cờ - LAHF Chuyển phần thấp ghi cờ vào AH - SAHF Chuyển nội dung AH vào bit thấp ghi cờ - POPF Chuyển phần tử đỉnh ngăn xếp (16 bit) vào ghi cờ Tức Pop Word from top ò Stack to Flag register: lấy I word từ đỉnh ngăn xếp vào ghi cờ - PUSHF Đưa nội dung ghi cờ vào ngăn xếp Nhóm lệnh chuyển liệu qua cổng - IN AL, port IN AL,DX Đọc bit từ cổng vào AL Nếu địa cổng có giá trị từ 0H đến FFH viết trực tiếp, địa cổng có giá trị lớn FFH phải đặt vào DX - OUT port,AL OUT DX,AL Đưa bit từ ghi AL cổng Lệnh so sánh CMP Left, Right Left ghi ô nhớ, Right ghi ô nhớ số Lệnh so sánh Left Right, kết phản ánh cờ trạng thái không làm thay đổi nội dung Left 10 Nhóm lệnh lặp - LOOP Nhãn_gần Giảm CX đơn vị nhảy đến Nhãn_gần CX khác - LOOPE Nhãn_gần Giảm CX đơn vị nhảy đến Nhãn_gần ZF=1 CX ≠ - LOOPZ Nhãn_gần Tương tự LOOPE - LOOPNE Nhãn_gần Giảm CX đơn vị nhảy đến Nhãn_gần ZF=0 CX ≠ - LOOPNZ Nhãn_gần Tương tự LOOPNE 11 Lệnh gọi chương trình - Gọi CTC: CALL Nhãn - Trở từ CTC: RET 12 Nhóm lệnh xử lý chuỗi - Lệnh chuyển chuỗi: MOVS, MOVSB, MOVSW - Lệnh so sánh chuỗi: CMPS, CMPSB, CMPSW - Lệnh quét chuỗi: SCAS, SCASB, SCASW - Lệnh nạp chuỗi: LODS, LODSB, LODSW - Lệnh lưu chuỗi: STOS, STOSB, STOSW [...]... LOOPE - LOOPNE Nhãn_gần Giảm CX đi 1 đơn vị và nhảy đến Nhãn_gần nếu ZF=0 và CX ≠ 0 - LOOPNZ Nhãn_gần Tương tự LOOPNE 11 Lệnh gọi chương trình con - Gọi CTC: CALL Nhãn - Trở về từ CTC: RET 12 Nhóm lệnh xử lý chuỗi - Lệnh chuyển chuỗi: MOVS, MOVSB, MOVSW - Lệnh so sánh chuỗi: CMPS, CMPSB, CMPSW - Lệnh quét chuỗi: SCAS, SCASB, SCASW - Lệnh nạp chuỗi: LODS, LODSB, LODSW - Lệnh lưu chuỗi: STOS, STOSB, STOSW