div 指令
div 是除法指令
除数:有 8 位和 16 位两种,在一个 reg 或内存单元中
被除数:默认放在 AX 或 DX 和 AX 中,如果除数为 8 位,被除数则为 16 位,默认在 AX 中存放;如果除数为 16 位,被除数则为 32 位,在 DX 和 AX 中存放,DX 存放高 16 位,AX 存放低 16 位
结果:如果除数为 8 位,则 AL 存储除法操作的商,AH 存储除法操作的余数;如果除数为 16 位,则 AX 存储除法操作的商,DX 存储除法操作的余数
1 div byte ptr ds:[0] 2 含义:(al) = (ax)/((ds)*16+0)的商 3 (ah) = (ax)/((ds)*16+0)的余数 4 5 div word ptr es:[0] 6 含义:(ax) = [(dx)*10000H+(ax)]/((es)*16+0)的商 7 (dx) = [(dx)*10000H+(ax)]/((es)*16+0)的余数 8 9 div byte ptr [bx+si+8] 10 含义:(al) = (ax)/((ds)*16+(bx)+(si)+8)的商 11 (ah) = (ax)/((ds)*16+(bx)+(si)+8)的余数 12 13 div word ptr [bx+si+8] 14 含义:(ax) = [(dx)*10000H+(ax)]/((ds)*16+(bx)+(si)+8)的商 15 (dx) = [(dx)*10000H+(ax)]/((ds)*16+(bx)+(si)+8)的余数
利用除法指令计算 100001/100
被除数 100001 大于 65535,不能用 ax 寄存器存放,所以只能用 dx 和 ax 两个寄存器联合存放 100001,也就是说要进行 16 位的除法
除数 100 小于 255,可以在一个 8 位寄存器中存放。但是,因为被除数是 32 位的,除数应为 16 位,所以用一个 16 位寄存器来存放除数 100
因为要分别为 dx 和 ax 赋 100001 的高 16 位值和低 16 位值,所以应先将 100001 表示为十六进制形式:186A1H
1 mov dx,1 2 mov ax,86A1H ;(dx)*10000H+(ax)=100001 3 mov bx,100 4 div bx
执行后,(ax)=03E8H(即 1000),(dx)=1(余数为 1)
利用除法指令计算 1001/100
被除数 1001 可用 ax 寄存器存放,除数 100 可用 8 位寄存器存放,也就是说,要进行 8 位的除法
1 mov ax,1001 2 mov bl,100 3 div bl
执行后,(al)=0AH(即 10),(ah)=1(余数为 1)