除法指令div
除数:
分8位和16位,存放在reg(寄存器)或内存单元
被除数:
分16位和32位
被除数为16位,则除数为8位,被除数默认存放在AX中;
被除数为32位,则除数为16位,被除数存放在AX和DX中,AX低8位,DX高8位
被除数 | 32位 | 16位 |
除数 | 16位 | 8位 |
被除数存放位置 | AX | AX(低8位) DX(高8位) |
结果:
除数为8位,AL存放商,AH存放余数
除数为16位,AX存放商,DX存放余数
计算100001 / 100
被除数:16位最大表示65535,所以被除数100001只能用两个16位寄存器ax和dx存放
除数:100小于255,可以用8位表示,但被除数为32位,所以除数必须用16位寄存器存放
Debug数据默认16位,所以要先把被除数和除数转换成16进制
100001 = 186a1H
100 = 64H
程序如下:
mov dx,1
mov ax,86a1
mov bx,100
dix bx
计算1001 / 100
被除数:1001 < 65535,用16位寄存器AX存放
除数:被除数用16位,除数用8位
转换16进制
1001 = 03e9H
100 = 64H
程序如下:
mov ax,03e9
mov bl,64
div bl
乘法指令mul
两个相乘的数都是8位或都是16位
8位的话,一个默认存放在AL中,另一个存放在8位寄存器或内存字节单元中
若是16位,一个默认存放在AX中,另一个存放在16位寄存器或内存字单元中
相乘的积:8位乘法默认存放在AX中
若是16位,高8位默认放在DX,低位放在AX
示例程序:
8位乘法,100 * 2
mov al,100
mov bl,2
mul bl
16位乘法,100 * 10000
mov ax,100
mov bx,10000
mul bx