关于汇编的div指令

来源:互联网 发布:c语言从单数1加到100 编辑:程序博客网 时间:2024/05/16 10:55

div指令使用感觉比较麻烦,需要注意几点:
1:除数为8位或者16位(即字节型或字型),在寄存器或内存单元中
2: 被除数在AX 或者 AX和DX中( 注意,后面是AX和DX,AX存放低16位,DX存放高16位)
除数 被除数
8位 16位
16位 32位(AX和DX)

与此对应的,当除数为8位时,商存放在AL寄存器中,余数存放在AH寄存器中,
当除数为16位时,商在AX中,余数在DX中

3:指令格式
div reg //reg表示一个寄存器
div 内存单元

好了,那么来实践一下
先试试16位除以8位的:

mov ax,17 //在DosBox下用Debug,好像只能使用十六进制,不能加后缀hmov bl,3    div bl

这里写图片描述
然后单步调试看AX的高位AH和低位AL
这里写图片描述
可以看到,执行DIV BL后,AX位0207(十六进制),因为23除以3为7余2
好,那么接下来试试32位除以16位的,16位二进制数最大为65535,那么就70000除以240吧,转化为16进制为1B58除以F0
除数为16位,被除数是高位存放在DX,这里1B58高32位为0,所以应该将DX赋值为0,AX赋值为1B58,然后BX赋值为F0,再看看结果吧
这里写图片描述
最后结果是AX为001d,DX为0028,可以计算器计算一下看1d*f0+28是不是等于1b58(都是十六进制),有兴趣的话可以试试,弄懂了也就没什么麻烦的

0 0
原创粉丝点击