div指令用法plc_div如何使用

div指令用法plc_div如何使用本文最初发表于2015-8-14,是由别的地方迁移过来的 (本文所讲为无符号运算) DIV指令是8086汇编中的除法运算指令,它的结果不是浮点数,而是两个整数:商和余数。 我们来看王爽老师是怎么讲的: 现在大家思考一下,为什么在汇编语言中,除数的长度比被除数少呢? 分析: 因为被除数长度若等于除数的

本文最初发表于2015-8-14,是由别的地方迁移过来的

(本文所讲为无符号运算)

DIV指令是8086汇编中的除法运算指令,它的结果不是浮点数,而是两个整数:商和余数。

我们来看王爽老师是怎么讲的:
div指令用法plc_div如何使用

 

现在大家思考一下,为什么在汇编语言中,除数的长度比被除数少呢?

 

分析:    

因为被除数长度若等于除数的长度(假设是8位),那么定义一个乘法的式子:X*Y=Z如果X=FF,Y=2时会发生什么?结果是Z=FE(原结果是1FE,但是溢出后只保留8位结果),这个结果显然不能让人接受。如果把这个式子化成除法,正确的就是1FE/FF=2。所以,将Z的长度扩长,问题就可以解决了。

 

把上述内容压缩就是:

被除数的位数=除数的位数*2

除数是8位:(AX)/NUM=(AL)…(AH)

除数是16位:(DX(H)AX(L))/NUM=(AX)…(DX)

用法:DIV 除数

 

div指令用法plc_div如何使用

 

通过书上所讲,我们又得出以下结论:

  一个大于2^8 – 1(2的8次方减1)的数作被除数,被除数必须为16位,而除数为8位,商和余数也是8位的。一个大于2^16 – 1的数作被除数,被除数必须为32位,除数为16位,商和余数为16位。由于有些时候,CPU的寄存器可能无法满足使用,这样就需要用内存空间来做除法了。

  首先,先要认识X ptr操作符,这个操作符是指明要处理的数据长度,它的用法很简单:

  byte ptr 处理数据长度为字节型

  word ptr 处理数据长度为字型

mov byte ptr ds:[0],1H ;把立即数1H赋值给DS:[0]所指向的内存单元
mov word ptr ds:[0],1H ;把立即数 1H赋值给DS:[0]所指向的内存字单元

     如果两个例子执行前对应的内存单元都为0。

则第一个例子执行后内存单元是这样的: DS:0000 01

第二个例子执行后内存单元是这样的:   DS:0000 01 00

现在我们来看一段代码:

assume cs:code,ds:data

data segment;数据段
         db100D;设定一个除数内存单元,里面的数据是100,地址是ds:[0]
data ends

code segment;代码段

start:   mov ax,data
           mov ds,ax;设置数据段寄存器指向数据段
           mov ax,200D;设置被除数
           div byte ptr ds:[0];进行除法
           mov byte ptr ds:[0],al;将结果覆盖除数所在的内存单元
           mov ax,4c00H;程序返回
           int 21H
code ends
end start

 

代码执行:

运行所有除法指令前的指令后内存单元和寄存器情况:
 div指令用法plc_div如何使用

运行除法指令后并执行到程序返回之前内存单元和寄存器的情况:
 div指令用法plc_div如何使用

此时结果已经保存到数据段中,程序完成。

汇编语言的除法指令很容易忘记其用法和结果保存的位置,需要多练习,多实践。

今天的文章div指令用法plc_div如何使用分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/51955.html

(0)
编程小号编程小号
上一篇 2023-08-31 21:06
下一篇 2023-08-31 21:17

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注