6、mul指令
Mul為乘法指令,使用mul做乘法的時候,注意以下兩點:
1. 兩個相乘的數:這兩個相乘的數,要麼都是8位,要麼都是16位,如果是8位,一個預設放在al中,另一
個放在8位寄存器或記憶體位元組單元中;如果是16位,一個預設放在ax中,另一個放在16位寄存器或記憶體字單元
中。
2.結果:如果是8位乘法,結果預設放在ax中,如果是16位乘法,結果高位預設在dx中存放,低位在ax
中存放。
指令格式如下:
Mul 通用寄存器
Mul 記憶體單元
記憶體單元可以用不同的尋址方式給出,比如:
Mul byte ptr DS:[7102] ;8位乘法。
Mul word ptr [bx+si+8] ;16位乘法。
例1:計算100×10。
100和10都小于255,可以做8位乘法,代碼如下:
Mov al, 100
Mov bl, 10
Mul bl
結果:ax=al×bl=100×10=1000(3E8H)
例2:計算100×10000。
100小于255,可10000大于255,是以必須做16位乘法,代碼如下:
Mov ax, 100
Mov bx, 10000
Mul bx
結果:ax×bx=100×10000=1000000(F4240H)
Ax=4240H dx=FH
7、div指令
Div是除法指令,使用div做除法的時候,應注意以下問題:
1. 除數:有8位和16位兩種,在一個寄存器或記憶體單元中。
2. 被除數:如果除數為8位,被除數則為16位,預設放在ax中;如果除數為16位,被除數則為32位,在
Dx和ax中存放,dx存放高16位,ax存放低16位。
3. 結果:如果除數為8位,則al存儲結果的商,ah存儲結果的餘數;如果除數為16位,則ax存儲結果的
商,dx存儲結果的餘數。
Div 通用寄存器
Div 記憶體單元
Div byte ptr DS:[21a5] ;除數為8位的除法。
Div word ptr [bx+si+8] ;除數為16位的除法。
例1:計算100001÷100。
被除數100001為32位,轉化成16進制為186a1H,低16位值86a1H放在ax中,高16位值1H放在
Dx中,除數100轉化為16進制64H後,放在一個16位寄存器中,代碼如下:
Mov dx, 1H
Mov ax, 86a1H
Mov bx, 64H
Div bx
結果:(dx×10000H+ax)÷bx=186a1H÷64H=3E8H餘1。
Ax=3e8H(1000) dx=1H
例2.計算1001÷100。
被除數1001可用ax存放,除數100可用8位寄存器存放,代碼如下:
Mov ax, 1001
Mov bl, 100
Div bl
結果:ax÷bl=1001÷100=10餘1。
Al=10 ah=1