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