32位微處理器指令系統之加減算術運算指令

算術運算指令分為二進制算術運算指令與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


分享到:


相關文章: