汇编语言 乘法和除法指令
除法指令
-
DVI無符號(hào)數(shù)除法指令
-
指令格式:DIV 源
-
指令功能:對(duì)兩個(gè)無符號(hào)二進(jìn)制數(shù)進(jìn)行除法操作。源操作數(shù)可以是字或字節(jié)。
-
如果源操作數(shù)為字節(jié),16位被除數(shù)必須放在AX中,8位除數(shù)為源操作數(shù),它可以是寄存器或存儲(chǔ)單元。相除之后,8位商在AL中,余數(shù)在AH中。即
AL ← AX/源(字節(jié))的商
AH ← AX/源(字節(jié))的余數(shù) -
要是被除數(shù)只有8位,必須把它放在AL中,并將AH清0,然后相除。
-
如果源操作數(shù)為字,32位被除數(shù)在DX、AX中,其中,DX為高位字,16位除數(shù)作源操作數(shù),它可以是寄存器或存儲(chǔ)單元。相除之后,AX中存16位商,DX中存16位余數(shù)。即
AX ← (DX, AX)/源(字)的商
DX ← (DX,AX)/源(字)的余數(shù) -
要是被除數(shù)只有16位,除數(shù)也是16位,則必須將16位被除數(shù)送到AX中,再將DX寄存器清0,然后相除。
-
與被除數(shù)和除數(shù)一樣,商和余數(shù)也都為無符號(hào)數(shù)。DIV指令執(zhí)行后,所有標(biāo)志均無定義。
代碼執(zhí)行結(jié)果:
代碼執(zhí)行結(jié)果:
; 以下程序使用 word ptr 實(shí)現(xiàn) 1232131 ÷ 100 的結(jié)果 assume cs:code, ds:data, ss:stackdata segmentdd 1232131 ; dd 占用4個(gè)字節(jié)dw 100 ; dw 占用 2個(gè)字節(jié)db 1 ; db 占用一個(gè)字節(jié) data endsstack segment stackdb 128 dup(0) stack endscode segmentstart: mov ax, stackmov ss, axmov sp, 128mov ax, datamov ds, axmov ax, ds:[0]mov dx, ds:[2]div word ptr ds:[4]mov ax, 4C00Hint 21 code endsend start總結(jié):
除數(shù):8bit或16bit 存在內(nèi)存單元中或者寄存器中
被除數(shù):存放在AX或者 AX和DX中
如果除數(shù)為8bit,被除數(shù)則為16bit,存放在AX中
如果除數(shù)為16bit,被除數(shù)則為32bit,AX存放低16bit,DX存放高16bit
結(jié)果:如果除數(shù)為8bit,則AL 存商,AH存放余數(shù)
如果除數(shù)為16bit,則AX存放商,DX存放余數(shù)
乘法指令
MUL 無符號(hào)數(shù)乘法指令
- 指令格式:NUL 源
- 指令功能:把源操作數(shù)和累加器中的數(shù)都當(dāng)成無符號(hào)數(shù),然后將兩數(shù)相乘,源操作數(shù)可以是字節(jié)或字。
- 如果源操作數(shù)是一個(gè)字節(jié),它與累加器AL中的內(nèi)容相乘,乘積為雙倍長(zhǎng)的16位數(shù),高8位送到AH,低8位送到AL。即
- AX ← AL * 源
- 如果源操作數(shù)是一個(gè)字,則它與累加器AX的內(nèi)容相乘,結(jié)果為32位數(shù),高位字放在DX寄存器中,低位字放在AX寄存器中。即
- (DX,AX) ← AX * 源
- 乘法指令中,源操作數(shù)可以是寄存器,也可以是存儲(chǔ)單元,但不能是立即數(shù)。當(dāng)源操作數(shù)是存儲(chǔ)單元時(shí),必須在操作數(shù)前加BYTE 或 WORD 說明是字節(jié)還是字。
總結(jié)
以上是生活随笔為你收集整理的汇编语言 乘法和除法指令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汇编语言 字符串的复制
- 下一篇: 汇编指令 DUP指令