1 用DIV实现除法
A. 说明
被除数:默认放在AX或DX和AX中
除数:8位或16位,在寄存器或内存单元中
B. 指令格式:
Div 寄存器
Div 内存单元
被除数 | AX | DX(放高位)和AX(放低位) |
---|---|---|
除数 | 8位内存或寄存器 | 16位内存或寄存器 |
商 | AL | AX |
余数 | AH | DX |
示例1:利用除法指令计算100001/100
分析:100001D=186A1H,100D=64H,被除数大于16位,需要用2个寄存器,将1放在DX中,将86A1放在AX中,
用BX存放除数100D=64H。
示例2:利用除法指令计算1001/100
分析:1001D = 03E9H,100D= 64H,用一个寄存器即可,被除数放在AX中。
示例3:在内存单元中使用除法,用div计算data段中第一个数据除以第二个数据后的结果,商存放在第3个数据的内存单元中。
assume cs:code,ds:data
data segment
dd 100001
dw 100
dw 0
data ends
;在这里写代码
code segment
start: mov ax,data
mov ds,ax ;ds指向data段
mov ax,ds:[0] ;也就是0001,双字,占四个字节
mov dx,ds:[2] ;也就是10
div word ptr ds:[4] ;除数100
mov ds:[6],ax ;将商放在 dw 0中
mov ax,4c00h ;返回值
int 21h
code ends
end start
2 用MUL实现乘法
8位乘法 | 16位乘法 | |
---|---|---|
被乘数(默认) | AL | AX |
乘数 | 8位寄存器或内存字节单元 | 16位寄存器或内存单元 |
结果 | AX | DX(高位)和AX(低位) |
示例1:计算100 * 10,分析:100和10小于8位(255),可以做8位乘法,注意在debug中默认是十六进制。
示例2:计算100 * 10000,分析:10000 > 255,所以必须做16位乘法。
结果是:(DX)=000F,(AX)=4240,也就是乘积是:F4240