DIV指令一般用法
本文最初发表于2015-8-14,是由别的地方迁移过来的
(本文所讲为无符号运算)
DIV指令是8086汇编中的除法运算指令,它的结果不是浮点数,而是两个整数:商和余数。
我们来看王爽老师是怎么讲的:
现在大家思考一下,为什么在汇编语言中,除数的长度比被除数少呢?
分析:
因为被除数长度若等于除数的长度(假设是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 除数
通过书上所讲,我们又得出以下结论:
一个大于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:[],1H ;把立即数1H赋值给DS:[0]所指向的内存单元
mov word ptr ds:[],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:[];进行除法
mov byte ptr ds:[],al;将结果覆盖除数所在的内存单元
mov ax,4c00H;程序返回
int 21H
code ends
end start
代码执行:
运行所有除法指令前的指令后内存单元和寄存器情况:
运行除法指令后并执行到程序返回之前内存单元和寄存器的情况:
此时结果已经保存到数据段中,程序完成。
汇编语言的除法指令很容易忘记其用法和结果保存的位置,需要多练习,多实践。
DIV指令一般用法的更多相关文章
- div 指令
div 指令 div 是除法指令,后面跟的是除数,被除数默认在 ax, 或者 dx.ax 组成的存储单元中. 除数可以有 8 位和 16 位两种,存储于一个 reg 或内存单元中,也就是说不可以 di ...
- Vue.js自定义指令的用法与实例
市面上大多数关于Vue.js自定义指令的文章都在讲语法,很少讲实际的应用场景和用例,以致于即便明白了怎么写,也不知道怎么用.本文不讲语法,就讲自定义指令的用法. 自定义指令是用来操作DOM的.尽管Vu ...
- [三] java虚拟机 JVM字节码 指令集 bytecode 操作码 指令分类用法 助记符
说明,本文的目的在于从宏观逻辑上介绍清楚绝大多数的字节码指令的含义以及分类 只要认真阅读本文必然能够对字节码指令集有所了解 如果需要了解清楚每一个指令的具体详尽用法,请参阅虚拟机规范 指令简介 计算机 ...
- [汇编语言]-第八章 div指令,伪指令dd,dup
1- div除法指令 (1) 除数: 有8位和16位两种,在一个寄存器或内存单元中. (2) 被除数: 默认放在AX和DX或AX中 除数为8位, 被除数为16位, 默认在AX中存放. 除数为16位, ...
- div指令和mul指令
div是除法指令,使用div做除法时需要注意: 1)除数:有8位和16位两种,在一个寄存器或者内存单元中 2)被除数:默认存放在AX或DX和AX中.如果除数为8位,被除数则为16位,默认在AX中存放: ...
- vue 指令的用法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Delphi 预编译指令 的用法
A.3 使用条件编译指令条件编译指令是非常重要的编译指令,他控制着在不同条件下(例如,不同的操作系统)产生不同的代码.条件编译指令是包含在注释括号之内的,如下表所示. ...
- ABAP div / mod的用法
1.divdiv是用于取两数相除的商的,c = a div b,得到的c的值就是a除b的商.2.// 是用于取两数相除的结果的.c = a / b,如果c是i数据类型的,这个语法会进行四舍五入的.3. ...
- bnd -buildpath指令的用法
-buildpath的作用是为项目添加运行时依赖.这个依赖可以是workspace中的另一个项目或者是仓库中的另一个bundle. -buildpath指令只会在编译和构建时起作用,它从来不会被用来运 ...
随机推荐
- Deviceone:站在移动互联时代的十字路口上
最近总能看到类似“App已死,服务永生”.“App必死,web永生” .“App已死,微信建站已生”这样的文章.不晓得这些网络写手到底是想代表某些公司的立场.还是想要表达怎么样的一个情结,文章中语气都 ...
- 最小二乘拟合(转)good
在物理实验中经常要观测两个有函数关系的物理量.根据两个量的许多组观测数据来确定它们的函数曲线,这就是实验数据处理中的曲线拟合问题.这类问题通常有两种情况:一种是两个观测量x与y之间的函数形式已知,但一 ...
- oracle误删除恢复
create table first_fill_20151207 as -- 生成到临时表select * from first_fillas of timestamp to_timestamp('2 ...
- 网站导航不止有hao123!
网址导航对于我们上网而言非常的重要,在一定程度上决定了我们每天都在接触一些什么样的网络信息.我个人一直用的是hao123,总体感觉这个网址导航是非常的不错的,不过网址导航不只只有这一个好的更不只有这一 ...
- excel中单元格计算
首先,得明确excel中相对引用和绝对引用的概念,这里$符号起着关键作用,当在一个行或列的指示符前面加$则表示绝对引用,否则相对引用,具体: 1.相对引用,复制公式时地址跟着发生变化,如C1单元格有公 ...
- 学习练习 session练习
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- [drp 2]String、StringBuffer和StringBuilder的区别
导读:在实际运用了,我们会频繁的用到string.stringBuffer和stringBuilder这三个东西,那么,他们之间的区别是什么呢.本文主要是从拼写SQL语句的角度,来阐释他们之间的区别! ...
- [SSH 2] 以网站主页面浅谈Struts2配置
导读:前面总体的介绍了一下SSH框架,那么作为Struts这一支,具体是怎么配置的呢?本篇博客则主要是以自己做过的实例中的登录一条线,简单介绍一下struts2的配置,如有不妥之处,还请大家多提点提点 ...
- IE 不兼容的几个js问题及解决方法1
IE 不兼容的几个js问题及解决方法 1 Table的问题 在动态新增tr或者td时,createElecment() 一般用appendChild();都不生效,解决办法是用新增tbody, 如 ...
- leetcode 19
最开始用一般的方法,首先遍历链表求出长度,进而求出需要删除节点的位置,最后进行节点的删除. 代码如下: /** * Definition for singly-linked list. * struc ...