Chương 6
NHÓM LỆNH TÍNH TOÁN SỐ
HỌC VÀ LuẬN LÝ
Nhóm lệnh tính toán số học
ADD
SUB
INC
DEC
NEG
MUL , IMUL
DIV , IDIV
+
++
--a
*
/
Lệnh ADD
• Dạng lệnh :
ADD
ADD
ADD
reg,reg
mem,reg
reg,mem
ADD
ADD
ADD
• Giải thích :
reg,immed
mem,immed
accum,immed
thđ ← thđ + thn
Cộng toán hạng nguồn vào toán hạng đích. Kết quả cất vào
toán hạng đích.
• Tác động cờ :
à Xem thêm lệnh ADC
Ví dụ
ADD
ADD
ADD
ADD
ADD
ADD
ADD
CX,SI
; CX ← CX + SI
DH,BL
; DH ← DH + BL
[1000h],BX ;[1001h,1000h] ← [1001h,1000h] + BX
[2000h],CL ; [2000h] ← [2000h] + CL
AL,[0000h] ; AL ← AL + [0000h]
BYTE PTR [SI+8],5 ; [SI+8] ← [SI+8] + 05h
WORD PTR [SI+8],5
Lệnh SUB
• Dạng lệnh :
SUB
SUB
SUB
reg,reg
mem,reg
reg,mem
SUB
SUB
SUB
reg,immed
mem,immed
accum,immed
• Giải thích : thđ ← thđ - thn
Trừ toán hạng đích cho toán hạng nguồn. Kết
quả cất vào toán hạng đích.
• Tác động cờ :
à Xem thêm SBB
Ví dụ
; DL
←
DL - AL
SUB CX,[DI]
; CX
←
CX - [DI+1,DI]
SUB BP,4
; BP
←
BP - 4
SUB
DL,AL
Lệnh INC
• Dạng lệnh :
INC reg
INC
mem
• Giải thích : thđ ← thđ + 1
cộng 1 vào toán hạng đích nhưng không ảnh hưởng
cờ nhớ.
• Tác động cờ :
• Ví dụ :
INC
INC
CH
WORD PTR [1000h]
Lệnh DEC
• Dạng lệnh :
DEC reg
DEC
mem
• Giải thích : thđ ← thđ - 1
trừ 1 vào toán hạng đích nhưng không ảnh hưởng cờ
nhớ.
• Tác động cờ :
• Ví dụ :
DEC
DEC
AX
Byte PTR ES:[1000h]
Lệnh NEG
• Dạng lệnh :
NEG reg
NEG
• Giải thích : thđ ← bù 2 ( thđ)
• Tác động cờ :
• Ví dụ :
NEG
NEG
AX
Byte PTR ES:[SI]
mem
Lệnh MUL
• Dạng lệnh :
MUL
reg
MUL
mem
• Giải thích : nhân số không dấu
– Trường hợp toán hạng nguồn là 8 bit thì :
AX ← AL * thn8
– Trường hợp toán hạng nguồn là 16 bit thì :
{DX AX} ← AX * thn16
• Tác động cờ :
Ví dụ
• Nếu AL=5, CH=4, sau khi thực hiện lệnh
MUL CH
ta có AX = AL*CH = 0014h.
• Nếu AX=500h, [1001h,1000h]=0401h, sau khi
thực hiện lệnh
MUL WORD PTR [1000h]
ta có {DXAX} = AX * [1001h,1000h]
= 500h * 401h = 00140500h
Nghĩa là DX=0014h và AX=0500h.
Lệnh IMUL
• Tương tự lệnh MUL, nhưng xử lý trên số có
dấu
Lệnh DIV
• Dạng lệnh :
DIV reg
DIV
mem
• Giải thích : chia hai số không dấu
– Nếu toán hạng nguồn là 8 bit thì :
AL ← (AX / thn8)
AH ← số dư của (AX / thn8)
– Toán hạng nguồn 16 bit thì :
AX ← (DXAX / thn16)
DX ← số dư của (DXAX / thn16)
• Tác động cờ :
Lệnh IDIV
• Tương tự lệnh DIV nhưng làm việc trên số có
dấu
Nhóm lệnh xử lý logic
AND
OR
XOR
NOT
SHL
SHR
SAL
SAR
ROL
ROR
RCL
RCR
Lệnh AND
• Dạng lệnh :
AND
AND
AND
reg,reg
mem,reg
reg,mem
AND
AND
AND
reg,immed
mem,immed
accum,immed
• Giải thích : thđ ← thđ AND thn.
• Tác động cờ:
Ví dụ:
MOV AL, 'a'
AND AL, 11011111b
01100001
11011111
-------01000001
; AL = 01100001b
; AL = 01000001b ('A')
1 AND 1 = 1
1 AND 0 = 0
0 AND 1 = 0
0 AND 0 = 0
Lệnh OR
• Dạng lệnh :
OR
OR
OR
reg,reg
mem,reg
reg,mem
OR
OR
OR
reg,immed
mem,immed
accum,immed
• Giải thích : thđ ← thđ OR thn.
• Tác động cờ :
Ví dụ:
MOV AL, 'A'
OR AL, 00100000b
01000001
00100000
-------01100001
; AL = 01000001b
; AL = 01100001b ('a')
1 OR 1 = 1
1 OR 0 = 1
0 OR 1 = 1
0 OR 0 = 0
Lệnh XOR
• Dạng lệnh :
XOR reg,reg
XOR mem,reg
XOR reg,mem
XOR reg,immed
XOR mem,immed
XOR accum,immed
• Giải thích : thđ ← thđ XOR thn.
• Tác động cờ:
Ví dụ:
MOV AL, 00000111b
XOR AL, 00000010b ; AL = 00000101b
00000111
00000010
-------00000101
1 XOR 1 = 0
1 XOR 0 = 1
0 XOR 1 = 1
0 XOR 0 = 0
Lệnh NOT
• Dạng lệnh :
NOT
reg
NOT
mem
• Giải thích : thđ ← đảo từng bit ( thđ )
• Tác động cờ : (không thay đổi)
• Ví dụ:
MOV AL, 00011011b
NOT AL
; AL = 11100100b
Lệnh SHL/SAL
• Dạng lệnh :
SHL
SHL
reg,1
reg,CL
• Giải thích :
SHL
SHL
mem,1
mem,CL
Dịch trái. Dạng SHL reg,1 dùng
để dịch trái 1 bit. Dạng SHL reg,CL dùng
để dịch trái nhiều bit. Lúc đó thanh ghi
CL chứa số bit cần dịch.
• Tác động cờ :
Ví dụ
MOV AL, 11100000b
SHL AL, 1
; AL=11000000b
; CF=1
Bài tập
1. Viết đoạn chương trình hợp ngữ tính tổng:
s = 1 + 2+ 3+ … + n
trong đó, giá trị n chứa sẳn trong thanh ghi AX
kết quả tính được cất vào thanh ghi DX
(giả sử n đủ nhỏ để tổng tính được không tràn)
n
nếu n lẻ
BTVN2: Viết chương trình tính s=1+3+5+…+
n -1 nếu n chẳn