天天看點

彙編語言之資料處理的2個基本問題(2)

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