算术运算指令分为二进制算术运算指令和BCD码算术运算调整指令。
添加说明
1.ADD指令指令格式:ADD OPD、OPS
函数:(OPD)+(OPS)OPD
受影响的标志有:AF、OF、PF、SF、ZF、CF
ADD指令有以下5种具体格式:(与MOV相同)
添加寄存器,寄存器
;示例ADD AX,BX 和ADD EAX,EBX
添加寄存器,内存
;示例ADD AX,[ESI] 和ADD EAX,[ESI]
添加内存、寄存器
;示例ADD[ESI],BX 和ADD[ESI],EBX
添加寄存器,imm
;示例ADD AX, 2 和ADD EAX, 22334455H
添加内存,imm
;示例ADD BYTE PTR [DI], 3 和ADD WORD
;PTR[ESI],1104H
例子:
加法指令用于将1位数值数据0至9及其对应的1位字符数据\’0\’至\’9\’转换。
查看ASCII表可知,字符数据‘0’到‘9’的ASCII码为30H到39H,1位数值数据与其对应的字符数据相差30H。 (0的asc码是48)
假设AL中存储的是1位数值数据(0~9),指令ADD AL,30H即可实现这种转换。
莫瓦阿尔,1
添加AL,30H; CF=0, SF=0, OF=0, ZF=0, PF=0
2.ADC指令(带进位的加法指令)指令格式:ADC OPD、OPS
函数:(OPD)+(OPS)+CFOPD
受影响的标志有:AF、OF、PF、SF、ZF、CF
ADC指令还有5种特定格式,即将ADD指令的5种特定格式中的ADD替换为ADC。
3.INC命令(加1命令)命令格式:INC OPD
函数:(OPD)+1OPD
受影响的标志有:AF、OF、PF、SF、ZF
INC指令有以下两种具体格式:
INCreg
;示例INC AL、INC AX 和INC EAX
INC内存
;示例INC BYTE PTR [SI] 和INC
;字节PTR [ESI]
减法指令
1.SUB指令指令格式:SUB OPD、OPS
功能:(OPD)-(OPS)OPD
受影响的标志有:AF、OF、PF、SF、ZF、CF
SUB指令也有5种具体格式:
2.SBB指令(带借位的减法指令)指令格式:SBB OPD、OPS
功能:(OPD)-(OPS)-CFOPD
受影响的标志有:AF、OF、PF、SF、ZF、CF
SBB指令还有5种特定格式,即将SUB指令的5种特定格式中的SUB替换为SBB。
例子:
使用SUB 和SBB 指令对两个64 位二进制数进行减法。假设被减数的高、低32位分别存放在EAX和EBX中,被减数的高、低32位分别存放在ECX和EDX中。假设(EAX)=99998888H,(EBX)=11112222H,(ECX)=22223333H,(EDX)=88881111H,减法结果存储在(EAX)和(EBX)中。主要流程如下:
SUB EBX、EDX; (EBX)(EBX)-(EDX),结果为
;CF=1, (EBX)=88891111H
SBB EAX、ECX; (EAX)(EAX)-(ECX)-CF,结
;若CF=0,则(EAX)=77775554H
3.DEC指令(减1指令)指令格式:DEC OPD
功能:(OPD)-1OPD
受影响的标志有:AF、OF、PF、SF、ZF
DEC指令有以下两种具体格式:
DEC 注册;示例DEC EAX
DEC 内存;示例DEC BYTE PTR [ESI]
4.CMP指令(比较指令)指令格式:CMP OPD、OPS
功能:(OPD)-(OPS)
受影响的标志有:AF、OF、PF、SF、ZF、CF