W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
就像我們?cè)缧r(shí)候看到的,add指令執(zhí)行加法操作,而sub指令的執(zhí)行減法操作。在FLAGS寄存器中的兩位能被這些指令設(shè)置,它們是:overflow(溢出位) 和carry flag(進(jìn)位標(biāo)志位)。如果操作的正確結(jié)果太大了以致于不匹配有符號(hào)數(shù)運(yùn)算的目的操作數(shù),溢出標(biāo)志位將被置位。如果在加法中的最高有效位有一個(gè)進(jìn)位或在減法中的最高有效位有一個(gè)借位,進(jìn)位標(biāo)志位將被置位。因此,它可以用來(lái)檢查無(wú)符號(hào)數(shù)運(yùn)算的溢出。進(jìn)位標(biāo)志位在有符號(hào)數(shù)運(yùn)算中的使用將看起來(lái)非常簡(jiǎn)單。補(bǔ)碼的一個(gè)最大的優(yōu)點(diǎn)是加法和減法的規(guī)則實(shí)際上就與無(wú)符號(hào)整形的一樣。因此,add和sub可以同時(shí)被用在有符號(hào)和無(wú)符號(hào)整形上。
這兒有一個(gè)進(jìn)位產(chǎn)生,但是它不是結(jié)果的一部分。
這有兩個(gè)不同的乘法和除法指令。
首先,使用MUL或IMUL 指令來(lái)進(jìn)行乘法運(yùn)算。MUL指令用于無(wú)符號(hào)數(shù)之間相乘,而IMUL指令用于有符號(hào)數(shù)之間相乘。為什么需要兩個(gè)不同的指令呢?無(wú)符號(hào)數(shù)和有符號(hào)數(shù)補(bǔ)碼的乘法規(guī)則是不同的。為什么會(huì)這樣?考慮字節(jié)FF乘以它本身產(chǎn)生一個(gè)字的結(jié)果。使用無(wú)符號(hào)乘法這就是255乘上255,得65025 (或十六進(jìn)制的FE01)。使用有
符號(hào)數(shù)乘法這就是?1 乘上?1,得1 (或十六進(jìn)制的0001)。這兒有乘法指令的幾種格式。最老的格式是像這樣的:
mul source
source要么是一個(gè)寄存器,要么是一個(gè)指定的內(nèi)存。它不可以是一個(gè)立即數(shù)。實(shí)際上,乘法怎么執(zhí)行取決于源操作數(shù)的大小。如果操作數(shù)大小是一個(gè)字節(jié),它乘以在AL寄存器中的字節(jié),而結(jié)果被儲(chǔ)存到了16位寄存器AX中。如果源操作數(shù)是16位,它乘以在AX中的字,而32位的結(jié)果被儲(chǔ)存到了DX:AX。如果源操作數(shù)是32位的,它乘以在EAX中的數(shù),而結(jié)果被儲(chǔ)存到了EDX:EAX。
IMUL指令擁有與MUL指令相同的格式,但是同樣增加了其它一些指令格式。這有兩個(gè)和三個(gè)操作數(shù)的格式:
imul dest (目的操作數(shù)), source1(源操作數(shù)1)
imul dest (目的操作數(shù)), source1(源操作數(shù)1), source2(源操作數(shù)2)
表2.2展示可能的組合。
兩個(gè)除法運(yùn)算符是DIV和IDIV。它們分別執(zhí)行無(wú)符號(hào)整形和有符號(hào)整形的除法。普遍的格式是:
div source如果源操作數(shù)為8位,那么AX就除以這個(gè)操作數(shù)。商儲(chǔ)存在AL中,而余數(shù)儲(chǔ)存在AH中。如果源操作數(shù)為16位,那么DX:AX就除以這個(gè)操作數(shù)。商儲(chǔ)存在AX中,而余數(shù)儲(chǔ)存在DX中。如果源操作數(shù)為32位,那么EDX:EAX就除以這個(gè)操作數(shù),同時(shí)商儲(chǔ)存在EAX中,余數(shù)儲(chǔ)存在EDX中。IDIV 指令以同樣的方法進(jìn)行工作。這沒(méi)有像IMUL指令一樣的特殊的IDIV指令。如果商太大了,以致于不匹配它的寄存器,或除數(shù)為0,那么這個(gè)程序?qū)⒈恢袛嗪椭兄?。一個(gè)普遍的錯(cuò)誤是在進(jìn)行除法之前忘記了初始化DX或EDX。
NEG 指令通過(guò)計(jì)算它的單一的操作數(shù)補(bǔ)碼來(lái)得到這個(gè)操作數(shù)的相反數(shù)。它的操作數(shù)可以是任意的8位,16位或32位寄存器或內(nèi)存區(qū)域。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: