算術運算指令分為二進制算術運算指令與BCD碼算術運算調整指令。
加法指令
1.ADD指令
指令格式:ADD OPD,OPS
功能:(OPD)+(OPS)→OPD
影響的標誌位是:AF、OF、PF、SF、ZF、CF
ADD指令有下面5種具體格式:(同MOV)
ADD reg,reg
;例 ADD AX,BX 和 ADD EAX,EBX
ADD reg,mem
;例 ADD AX,[ESI] 和 ADD EAX,[ESI]
ADD mem,reg
;例 ADD [ESI],BX 和 ADD [ESI],EBX
ADD reg,imm
;例 ADD AX,2 和 ADD EAX,22334455H
ADD mem,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可實現此轉換。
MOV AL,1
ADD AL,30H ;CF=0,SF=0,OF=0,ZF=0,PF=0
2.ADC指令(帶進位加法指令)
指令格式:ADC OPD,OPS
功能:(OPD)+(OPS)+ CF → OPD
影響的標誌位是:AF、OF、PF、SF、ZF、CF
ADC指令也有5種具體格式,就是把ADD指令5種具體格式中的ADD換成ADC。
3.INC指令(加1指令)
指令格式:INC OPD
功能:(OPD)+1→OPD
影響的標誌位是:AF、OF、PF、SF、ZF
INC指令有下面2種具體格式:
INC reg
;例 INC AL、INC AX 和 INC EAX
INC mem
;例 INC BYTE PTR [SI] 和 INC
;BYTE 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)- CF → OPD
影響的標誌位是: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)-1→OPD
影響的標誌位是:AF、OF、PF、SF、ZF
DEC 指令有下面2種具體格式:
DEC reg ;例 DEC EAX
DEC mem ;例 DEC BYTE PTR [ESI]
4.CMP指令(比較指令)
指令格式:CMP OPD,OPS
功能:(OPD)-(OPS)
影響的標誌位是:AF、OF、PF、SF、ZF、CF
閱讀更多 又將如何存在 的文章