Nhóm lệnh thực hiện các phép tính logic và số học

Một phần của tài liệu Kỹ thuật vi xử lý (Trang 55 - 65)

Cú pháp: ADD Đích , Nguồn Đặc điểm:

 Toán hạng đích sẽ chứa nội dung của phép toán đích cộng với nguồn.

 Toán hạng đích và nguồn được tìm 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.

 Lệnh này tác động đến các cờ.

Ví dụ:

ADD AL , BL ; AL  AL + BL

ADD DL, [BX] ; DL  DL + DS : BX

Lệnh ADC - Additional with Carry (Cộng nội dung hai toán hạng có nhớ) Cú pháp: ADC Đích , Nguồn

Đặc điểm:

 Toán hạng đích sẽ chứa nội dung của phép toán đích cộng với nguồn và giá trị của cờ CF (cờ nhớ).

 Toán hạng đích và nguồn được tìm 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.

 Lệnh này tác động đến các cờ.

Ví dụ:

ADC AL , 53h ; AL  AL + 53h + CF Lệnh SUB - Substract (Trừ nội dung hai toán hạng)

Cú pháp: SUB Đích , Nguồn Đặc điểm:

 Toán hạng đích sẽ chứa nội dung của phép toán đích trừ nguồn.

 Toán hạng đích và nguồn được tìm 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.

 Lệnh này tác động đến các cờ.

48

Ví dụ:

SUB AL , BL ; AL  AL - BL

SUB DL, [BX] ; DL  DL - DS : BX

Lệnh SBB - Substract with Borrow (Trừ nội dung hai toán hạng có mượn) Cú pháp: SBB Đích , Nguồn

Đặc điểm:

 Toán hạng đích sẽ chứa nội dung của phép toán đích trừ nguồn và trừ CF (cờ nhớ).

 Toán hạng đích và nguồn được tìm 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.

 Lệnh này tác động đến các cờ.

Ví dụ:

SBB AL , 47h ; AL  AL - 47h - CF

Lệnh MUL - Multiply Unsigned Byte or Word (nhân với số không dấu)

Cú pháp: MUL Nguồn

Đặc điểm:

 Tùy theo độ dài của toán hạng nguồn ta có 2 trường hợp tổ chức phép nhân:

 Nếu nguồn là 8 bit thì AX = Nguồn x AL

 Nếu nguồn là 16 bit thì DX AX = Nguồn x AX

 Nếu byte cao (hoặc 16bit cao) của 16 (hoặc 32) bit kết quả chứa 0 thì CF

= OF = 0. Do đó cờ CF và OF cho ta biết có thể bỏ đi bao nhiêu số 0 trong kết quả.

Ví dụ:

MUL DL ; AX = AL x DL

Lệnh iMUL - Multiply Signed Byte or Word (nhân với số có dấu)

Cú pháp: iMUL Nguồn

Đặc điểm:

 Tùy theo độ dài của toán hạng nguồn ta có 2 trường hợp tổ chức phép nhân:

 Nếu nguồn là 8 bit thì AX = Nguồn x AL

 Nếu nguồn là 16 bit thì DX AX = Nguồn x AX

49

 Nếu tích thu được nhỏ, không đủ lấp đầy hết được các chỗ dành cho nó thì các bit không dùng đến được thay bằng bit dấu.

 Nếu byte cao (hoặc 16bit cao) của 16 (hoặc 32) bit kết quả chứa một phần kết quả thì CF = OF = 1. Do đó cờ CF và OF cho ta biết kết quả cần độ dài thực chất là bao nhiêu.

Ví dụ:

IMUL DL ; AX = AL x DL

Lệnh DIV - Divide Unsigned Byte or Word (chia với số không dấu)

Cú pháp: DIV Nguồn

Đặc điểm:

 Toán hạng nguồn là số chia và có thể tìm được theo các chế độ địa chỉ khác nhau.

 Tùy theo độ dài của toán hạng nguồn ta có hai trường hợp bố trí phép chia:

 Nếu nguồn là 8 bit: AX/nguồn và thương cất trong AL, dư cất trong AH.

 Nếu nguồn là 16 bit: DX AX/nguồn và thương cất trong AX, dư cất trong DX

 Lệnh này không thay đổi các cờ.

Ví dụ:

DIV DL ; AX/DL, thương trong AL và dư trong AH Lệnh iDIV - Divide signed Byte or Word (chia với số có dấu)

Cú pháp: iDIV Nguồn

Đặc điểm:

 Toán hạng nguồn là số chia và có thể tìm được theo các chế độ địa chỉ khác nhau.

 Lệnh này giống như lệnh DIV nhưng có 2 điểm khác:

 Sau phép chia AL chứa thương (số có dấu), AH chứa số dư (số có dấu).

 Dấu của số dư trùng với dấu của số bị chia.

 Nếu nguồn = 0 hoặc thương nằm ngoài dải -128 .. + 127 hoặc - 32768 .. + 32767 (tùy nguồn là 8 bit hay 16 bit) thì vi xử lý 8088 thực hiện INT 0.

 Lệnh này không thay đổi các cờ.

50

Ví dụ:

IDIV DL ; AX/DL, thương trong AL và dư trong AH

Lệnh INC - Increment Destination Register or Memory (Tăng toán hạng đích lên 1)

Cú pháp: INC Đích

Đặc điểm:

 Toán hạng đích sẽ bằng toán hạng đích cộng với 1 sau khi qua lệnh.

 Toán hạng đích có thể được tìm theo các chế độ địa chỉ khác nhau. Lưu ý là nếu đích = FFh (hoặc FFFFh) thì đích + 1 = 00h (hoặc 0000h) mà không ảnh hưởng đến cờ CF. Lệnh này cho kết quả tương đương như lệnh ADD Đích, 1 nhưng chạy nhanh hơn.

 Lệnh này làm thay đổi các cờ (trừ CF).

Ví dụ:

INC AX ; AX  AX + 1

Lệnh DEC - Decrement Destination Register or Memory (Giảm toán hạng đích lên 1)

Cú pháp: DEC Đích

Đặc điểm:

 Toán hạng đích sẽ bằng toán hạng đích trừ đi 1 sau khi qua lệnh.

 Toán hạng đích có thể được tìm theo các chế độ địa chỉ khác nhau. Lưu ý là nếu đích = 00h (hoặc 0000h) thì đích - 1 = FFh (hoặc FFFFh) mà không ảnh hưởng đến cờ CF. Lệnh này cho kết quả tương đương như lệnh SUB Đích, 1 nhưng chạy nhanh hơn.

 Lệnh này làm thay đổi các cờ (trừ CF).

Ví dụ:

DEC AX ; AX  AX - 1

Lệnh AND - And Corresponding Bits of Two Operands (Và hai toán hạng) Cú pháp: AND Đích, Nguồn

Đặc điểm:

 Toán hạng đích sẽ bằng toán hạng đích AND với toán hạng nguồn sau khi qua lệnh.

 Toán hạng đích và nguồn 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.

51

 Phép AND thường dùng để che đi / giữ lại một vài bit nào đó của một toán hạng bằng cách nhân logic toán hạng đó với toán hạng tức thì có các bit 0/1 ở các chỗ cần che đi/giữ nguyên tương ứng (toán hạng tức thì lúc này còn được gọi là mặt nạ).

 Lệnh này xóa cờ CF, OF và cập nhật PF, SF, ZF khi toán hạng là 8 bit, cờ AF không xác định.

Ví dụ:

AND AX, 0 ; Xóa thanh ghi AX về 0

Lệnh OR - Logically OR Corresponding Bits of Two Operands (Hoặc hai toán hạng)

Cú pháp: OR Đích , Nguồn Đặc điểm:

 Toán hạng đích sẽ bằng toán hạng đích OR với toán hạng nguồn sau khi qua lệnh.

 Toán hạng đích và nguồn 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.

 Phép OR dùng để thiết lập một vài bit nào đó của toán hạng bằng cách cộng logic toán hạng đó với toán hạng tức thời có các bit 1 tại các vị trí tương ứng cần thiết lập.

 Lệnh này xóa cờ CF, OF và cập nhật PF, SF, ZF khi toán hạng là 8 bit, cờ AF không xác định.

Ví dụ:

OR AX, 1 ; Thiết lập thanh ghi AX lên 1

Lệnh XOR - Exclusive Or Corresponding Bits of two Operands (hoặc loại trừ hai toán hạng)

Cú pháp: XOR Đích, Nguồn Đặc điểm:

 Toán hạng đích sẽ bằng toán hạng đích XOR với toán hạng nguồn sau khi qua lệnh.

 Toán hạng đích và nguồn 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.

52

 Lệnh này dùng để xóa về 0 một thanh ghi nào đó kèm theo các cờ CF và OF cũng bị xóa.

 Lệnh này xóa cờ CF, OF và cập nhật PF, SF, ZF khi toán hạng là 8 bit, cờ AF không xác định.

Ví dụ:

XOR AX, AX ; AX  AX xor AX (xóa thanh ghi AX về 0) Lệnh NOT - Invert each bit of an Operand (Form its 1's complement) (Đảo bit của toán hạng - mã bù 1 của toán hạng)

Cú pháp: NOT Đích

Đặc điểm:

 Toán hạng đích sẽ được đảo tất cả các bit sau khi qua lệnh.

 Toán hạng đích có thể được tìm theo các chế độ địa chỉ khác nhau.

 Lệnh này không tác động đến các cờ.

Ví dụ:

NOT AX ; Lấy bù 1 của thanh ghi AX

Lệnh NEG - Negate an Operand (Form its 2's Complement) (lấy bù hai của một toán hạng hay gọi là đảo dấu của toán hạng)

Cú pháp: NEG Đích

Đặc điểm:

 Toán hạng đích sẽ được đảo dấu sau khi qua lệnh.

 Toán hạng đích có thể được tìm theo các chế độ địa chỉ khác nhau.

 Lệnh này tác động đến các cờ.

Ví dụ:

NEG AX ; AX  -AX

Lệnh CMP - Compare Byte or Word (So sánh Byte hoặc Word)

Cú pháp: CMP Đích , Nguồn

Đặc điểm:

 So sánh nội dung toán hạng đích với toán hạng nguồn.

 Toán hạng đích và nguồn 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ớ.

53

 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ờ).

Nếu:

Đích = Nguồn  CF = 0, ZF = 1 Đích > Nguồn  CF = 0, ZF = 0 Đích < Nguồn  CF = 1, ZF = 0

 Cập nhập nội dung các cờ AF, CF, OF, PF, SF, ZF Ví dụ:

CMP AX, BX ; So sánh AX với BX

Lệnh CMPS/CMPSB/CMPSW - Compare String Byte or String Word (So sánh chuỗi Byte hoặc chuỗi Word)

Cú pháp: CMPS Chuỗi đích , Chuỗi nguồn CMPSB

CMPSW Đặc điểm:

 Lệnh này so sánh từng phần tử (byte hoặc word) của 2 xâu có các phần tử cùng loại. Lệnh 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. Trong lệnh này ngầm định các thanh ghi với các chức năng:

 DS : SI là địa chỉ của phần tử so sánh trong chuỗi nguồn

 ES : DI là địa chỉ của phần tử so sánh trong chuỗi đích

 Sau mỗi lần so sánh SI  SI ± 1, DI  DI ± 1 hoặc SI  SI ± 2, DI  DI ± 2 tùy thuộc vào cờ hướng DF = 0 hoặc = 1.

 Cập nhập nội dung các cờ AF, CF, OF, PF, SF, ZF Ví dụ:

MOV DI, OFFSET chuỗi đích ; Lấy địa chỉ độ lệch của chuỗi đích tại ES vào DI

MOV SI, OFFSET chuỗi gốc ; Lấy địa chỉ độ lệch của chuỗi nguồn tại DS vào SI

CLD ; Làm vệc với chuỗi theo chiều tiến 

CMPSB ; Chuyển 1 byte, SI và DI tăng thêm 1

54

Lệnh TEST - AND Operand to Update Flag (và hai toán hạng để tạo cờ) Cú pháp: TEST Đích , Nguồn

Đặc điểm:

 Sau khi qua lệnh toán hạng đích And toán hạng nguồn.

 Toán hạng đích và nguồn 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.

 Sau lệnh các toán hạng không bị thay đổi nội dung và kết quả thì không lưu trữ. Các cờ được tạo ra sẽ được dùng làm điều kiện cho các lệnh nhảy có điều kiện. Lệnh này cũng có tác dụng che như là một mặt nạ.

 Xóa nội dung các cờ CF, OF.

 Cập nhập nội dung các cờ PF, SF, ZF (PF chỉ liên quan đến 8 bit thấp).

 Không xác định cờ AF.

Ví dụ:

TEST AH, 01h ; Bit 0 của AH = 0 Các lệnh thiết lập cờ:

STC - Set the Carry Flag (lập cờ nhớ): CF = 1 (không ảnh hưởng các cờ khác)

STD - Set the Direction Flag (lập cờ hướng): DF = 1 (không ảnh hưởng các cờ khác)

STI - Set the Interrupt Flag (lập cờ ngắt): IF = 1 (không ảnh hưởng các cờ khác)

Các lệnh xóa cờ:

CLC - Clear the Carry Flag (lập cờ nhớ) : CF = 0 (không ảnh hưởng các cờ khác)

CLD - Clear the Direction Flag (lập cờ hướng): DF = 0 (không ảnh hưởng các cờ khác)

CLI - Clear the Interrupt Flag (xóa cờ ngắt) : IF = 0 (không ảnh hưởng các cờ khác)

Lệnh RCL - Rotate through Carry Flag to the Left (Quay trái qua cờ nhớ)

Cú pháp: RCL Đích , CL

CF m lsb

s b

msb lsb

55

hoặc RCL Đích , số lần quay Đặc điểm:

 Lệnh quay trái thông qua cờ nhớ

 Quay trái toán hạng đích với số lần cất trong CL

 Lệnh này thay đổi cờ CF, OF Ví dụ:

Giả sử AL = 10001110 MOV CL , 2

RCL AL , CL ; Quay trái thanh ghi AL 2 lần, AL = 00111010 Lệnh RCR - Rotate through Carry Flag to the Right (Quay phải qua cờ nhớ)

Cú pháp: RCR Đích , CL

hoặc RCR Đích , số lần quay Đặc điểm:

 Lệnh quay phải thông qua cờ nhớ

 Quay phải toán hạng đích với số lần cất trong CL

 Lệnh này thay đổi cờ CF, OF Ví dụ:

Giả sử AL = 10001110 MOV CL , 2

RCR AL , CL ; Quay phải thanh ghi AL 2 lần, AL = 10100011 Lệnh SAL - Shift Arithmetically Left (dịch trái số học)

Cú pháp: SAL Đích , CL

hoặc SAL Đích , số lần dịch Đặc điểm:

 Lệnh dịch trái số học tương đương với việc toán hạng đích được tăng gấp đôi (nhân với 2).

 Dịch trái số học toán hạng đích với số lần cất trong CL

CF m

s b

lsb msb

0

CF msb lsb

56

 Lệnh này thay đổi cờ SF, ZF, PF Ví dụ:

Giả sử AL = 10001110 MOV CL , 2

SAL AL , CL ; Dịch trái số học thanh ghi AL 2 lần, AL = 00111000 Lệnh SHL - Shift Left (dịch trái logic)

Cú pháp: SHL Đích , CL

hoặc SHL Đích , số lần dịch Đặc điểm:

 Khác với các lệnh dịch phải, lệnh dịch trái logic tương tự như lệnh dịch trái số học.

Lệnh SAR - Shift Arithmetically Right (dịch phải số học)

Cú pháp: SAR Đích , CL

hoặc SAR Đích , số lần dịch Đặc điểm:

 Lệnh dịch phải số học sẽ giữ lại bit dấu của toán hạng.

 Dịch phải số học toán hạng đích với số lần cất trong CL

 Lệnh này thay đổi cờ SF, ZF, PF. CF mang giá trị của bit ngoài cùng bên phải (lsb)

Ví dụ:

Giả sử AL = 10001110 MOV CL , 2

SAR AL , CL ; Dịch phải số học thanh ghi AL 2 lần, AL = 11100011 Lệnh SHR - Shift Right (dịch phải logic)

Cú pháp: SHR Đích , CL

hoặc SHR Đích , số lần dịch Đặc điểm:

msb lsb CF

0 msb lsb CF

57

 Lệnh dịch phải số học tương đương với việc toán hạng đích chia cho 2, kết quả làm tròn xuống nếu số đó lẻ.

 Dịch phải số học toán hạng đích với số lần cất trong CL

 Lệnh này thay đổi cờ SF, ZF, PF. CF mang giá trị của lsb.

Ví dụ:

Giả sử AL = 10001110 MOV CL , 2

Một phần của tài liệu Kỹ thuật vi xử lý (Trang 55 - 65)

Tải bản đầy đủ (PDF)

(251 trang)