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)

猜你喜欢

转载自www.cnblogs.com/sch01ar/p/9368717.html
div