首先我们需要去了解的是div是除法指令,除数有8位和16位两种,被除数默认是放在AX或者DX和AX当中,如果除数为8位,被除数则为16位默认是放在AX当中的,如果除数为16位,被除数就为32位是在DX和AX当中存放,DX存放的是高16位,AX存放的是低16位。
如果除数是8位的话,那么AL存储的是除法完成之后的商,AH存储的是余数,如果除数为16位,那么AX存储的是除法操作的商,DX存储的就是除法操作的余数
除法公式如下所示
被除数 ÷ 除数 = 商 —–余数
下面我们可以利用除法指令去计算100001/100来模式下除法指令的计算过程,首先被除数100001是大于65535,不能用ax寄存器来存放,所以我们需要通过dx和ax寄存器来共同去存放他们,所以我们的除数要为16位的,因为被除数是32位的,所以我们得用一个16位的寄存器去存放除数100
assume cs:code
code segment ;代码段
mov dx,1 ;dx存放高16位为1 0000 0000 0000 0000
mov ax,86a1h ;给ax赋值为86a1
mov bx,100 ;把100给bx
div bx ;进行除法运算
mov ax,4c00h
int 21h
code ends
end
运算结果如下所示,AX为商这里是为1000,DX为余数这里为1
如果我们这里计算1001/100的话,我们可以让1001用ax寄存器存放,除数100则用8位寄存器存放,因为8位寄存器够用了
assume cs:code
code segment
mov ax,1001
mov bl,100
div bl
mov ax,4c00h
int 21h
code ends
end
结果如下所示
其中(al) = 0AH 也就是10,而(ah)=01H 也就是余数