算術(shù)運算指令是反映CPU計算能力的一組指令,也是編程時經(jīng)常使用的一組指令。它包括:加、減、乘、除及其相關(guān)的輔助指令。
該組指令的操作數(shù)可以是8位、16位和32位(80386+)。當存儲單元是該類指令的操作數(shù)時,該操作數(shù)的尋址方式可以是任意一種存儲單元尋址方式。
1、加法指令
、加法指令A(yù)DD(ADD Binary Numbers Instruction)
指令的格式:ADD Reg/Mem, Reg/Mem/Imm
受影響的標志位:AF、CF、OF、PF、SF和ZF
指令的功能是把源操作數(shù)的值加到目的操作數(shù)中。
、帶進位加指令A(yù)DC(ADD With Carry Instruction)
指令的格式:ADC Reg/Mem, Reg/Mem/Imm
受影響的標志位:AF、CF、OF、PF、SF和ZF
指令的功能是把源操作數(shù)和進位標志位CF的值(0/1)一起加到目的操作數(shù)中。
、加1指令I(lǐng)NC(Increment by 1 Instruction)
指令的格式:INC Reg/Mem
受影響的標志位:AF、OF、PF、SF和ZF,不影響CF
指令的功能是把操作數(shù)的值加1。
、交換加指令XADD(Exchange and Add)
指令的格式:XADD Reg/Mem, Reg ;80486+
受影響的標志位:AF、CF、OF、PF、SF和ZF
指令的功能是先交換兩個操作數(shù)的值,再進行算術(shù)“加”法操作。
例5.3 已知有二個32位數(shù)d1和d2(用數(shù)據(jù)類型DD說明),編寫程序片段把d2的值加到d1中。
解:32位數(shù)d1和d2在內(nèi)存中如下所示。
…… …… ……
方法1:用16位寄存器編寫程序
MOVAX, word ptr d1;由于d1是雙字類型,必須使用強制類型說明符。以下同。
MOVDX, word ptr d1+2;(DX,AX)構(gòu)成一個32位數(shù)據(jù)
ADDAX, word ptr d2;低字相加
ADCDX, word ptr d2+2;高字相加。在低字相加時,有可能會產(chǎn)生“進位”
MOVword ptr d1, AX;低字送給d1的低字
MOVword ptr d1+2, DX;高字送給d1的高字
方法2:用32位寄存器編寫程序
MOVEAX, d1
ADDEAX, d2
MOVd1, EAX
從上面兩段程序不難看出:用32位寄存器來處理32位數(shù)據(jù)顯得簡單、明了,而16位微機雖然也能處理32位數(shù)據(jù),但做起來就要復(fù)雜一些。
下面是學(xué)習和掌握加法類指令的控件,可模擬執(zhí)行ADD、ADC、INC、XADD、CLC、STC和CMC等指令。用鼠標左鍵單擊寄存器列表框中指定的寄存器,則可修改其值。后面其它控件的有關(guān)操作與此相一致,不再說明。
該組指令的操作數(shù)可以是8位、16位和32位(80386+)。當存儲單元是該類指令的操作數(shù)時,該操作數(shù)的尋址方式可以是任意一種存儲單元尋址方式。
1、加法指令
、加法指令A(yù)DD(ADD Binary Numbers Instruction)
指令的格式:ADD Reg/Mem, Reg/Mem/Imm
受影響的標志位:AF、CF、OF、PF、SF和ZF
指令的功能是把源操作數(shù)的值加到目的操作數(shù)中。
、帶進位加指令A(yù)DC(ADD With Carry Instruction)
指令的格式:ADC Reg/Mem, Reg/Mem/Imm
受影響的標志位:AF、CF、OF、PF、SF和ZF
指令的功能是把源操作數(shù)和進位標志位CF的值(0/1)一起加到目的操作數(shù)中。
、加1指令I(lǐng)NC(Increment by 1 Instruction)
指令的格式:INC Reg/Mem
受影響的標志位:AF、OF、PF、SF和ZF,不影響CF
指令的功能是把操作數(shù)的值加1。
、交換加指令XADD(Exchange and Add)
指令的格式:XADD Reg/Mem, Reg ;80486+
受影響的標志位:AF、CF、OF、PF、SF和ZF
指令的功能是先交換兩個操作數(shù)的值,再進行算術(shù)“加”法操作。
例5.3 已知有二個32位數(shù)d1和d2(用數(shù)據(jù)類型DD說明),編寫程序片段把d2的值加到d1中。
解:32位數(shù)d1和d2在內(nèi)存中如下所示。
…… …… ……
方法1:用16位寄存器編寫程序
MOVAX, word ptr d1;由于d1是雙字類型,必須使用強制類型說明符。以下同。
MOVDX, word ptr d1+2;(DX,AX)構(gòu)成一個32位數(shù)據(jù)
ADDAX, word ptr d2;低字相加
ADCDX, word ptr d2+2;高字相加。在低字相加時,有可能會產(chǎn)生“進位”
MOVword ptr d1, AX;低字送給d1的低字
MOVword ptr d1+2, DX;高字送給d1的高字
方法2:用32位寄存器編寫程序
MOVEAX, d1
ADDEAX, d2
MOVd1, EAX
從上面兩段程序不難看出:用32位寄存器來處理32位數(shù)據(jù)顯得簡單、明了,而16位微機雖然也能處理32位數(shù)據(jù),但做起來就要復(fù)雜一些。
下面是學(xué)習和掌握加法類指令的控件,可模擬執(zhí)行ADD、ADC、INC、XADD、CLC、STC和CMC等指令。用鼠標左鍵單擊寄存器列表框中指定的寄存器,則可修改其值。后面其它控件的有關(guān)操作與此相一致,不再說明。