1二进制运算指令
1)加法指令
不带进位的加法指令ADD
ADD dst, src ; dst<-dst+src
影响全部6个状态标志位
带进位的加法指令ADC
ADC dst, src ; dst<-dst+src+CF
举例 计算两个多字节16机制数之和 3B74AC60F8H+20D59E36C1H=?
假设data1 是3B74AC60F8H ; data2是20D59E36C1H
mov cx, 5
mov si, 0
clc
looper:mov al , data2[si]
adc data1[si], al
inc si
dec cx
jnz looper
hlt
加一指令INC
INC dst ;dst<-dst+1 除了cf之外,对别的状态标志均有影响
INC 的操作数不能是立即数或段寄存器。
2)减法指令
不带借位的减法指令SUB
SUB dst, src ; dst<-dst-src
SUB AL, 37H
SUB DX, BX
SUB CX, VARE1
当无符号小数减大数,产生借位,CF置一
当有符号小数减大数,得到负值,SF置一
当有符号小数减大数,结果益处,OF置一
带借位的减法指令SBB
SBB<-SBB-SRC-CF
SBB BX,1000
SBB CX, DX
这个多用于多字节的减法
减一指令DEC
DEC dst ;dst<-dst-1
DEC常用来修改循环次数CX
求补指令NEG
NEG dst ; dst<-0-dst
这个用来求负数的绝对值
mov ax, 0ffh ;ax = -1
NEG ax ; ax =1
有下面这个例子,内存中有200个带符号数,首地址是TAB1,要求将各数据求绝对值后,存入到TAB2中去
LEA SI, TAB1
LEA DI, TAB2
MOV CX, 200
CHECK:
MOV AL, [SI]
OR AL, AL
JNS NEXT
NEG AL
NEXT:
MOV [DI], AL
INC SI
INC DI
DEC CX
JNZ CHECK
HLT
比较指令CMP
CMP dst, src ; dst-src
状态标志位改变,其他不变,不能同为存储器
相等时:ZF=1
比较的两个无符号数,相减小于0,:CF=1
例子:MYDATA存储单元存放了两个8位无符号数,找出较大的那个,放入MAX单元中
LEA SI, MYDATA
LEA DI, MAX
MOV AL, [SI]
CMP AL,[SI+1]
JNC DONE
MOV AL, [SI+1]
DONE:
MOV MAX, AL
HLT
3 乘法指令