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:[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

代码执行:

运行所有除法指令前的指令后内存单元和寄存器情况:
 

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

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

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

时间: 2024-12-29 07:17:37

DIV指令一般用法的相关文章

Vue.js自定义指令的用法与实例

市面上大多数关于Vue.js自定义指令的文章都在讲语法,很少讲实际的应用场景和用例,以致于即便明白了怎么写,也不知道怎么用.本文不讲语法,就讲自定义指令的用法. 自定义指令是用来操作DOM的.尽管Vue推崇数据驱动视图的理念,但并非所有情况都适合数据驱动.自定义指令就是一种有效的补充和扩展,不仅可用于定义任何的DOM操作,并且是可复用的. 比如谷歌图片的加载做得非常优雅,在图片未完成加载前,用随机的背景色占位,图片加载完成后才直接渲染出来.用自定义指令可以非常方便的实现这个功能. 效果: 自定义

linux入门(三)常见Linux指令及其用法

一.上回说到说到Linux的shell指令运行的原理,这回我们来看看Linux中shell的权限管理,所谓的"权限"是指某一类人做某一件事的权利. 在shell中这一类人被分为了三种:(1)文件拥有者user (2)文件拥有组group (3)其他人other 每一类人对应了三种权限:读r,写w,执行x 我们来举个栗子先: 对于上面的四个文件,第一列对应了文件的类型,类型为d,后面的9 列可以分为三组,分别对应user.group.other,每一组有三个操作:读写执行,如果为-,则说

jstat -gcutil 指令的用法

Jstat 是JDK自带的一个轻量级小工具,全称"Java Virtual Machine statistics monitoring tool",主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控. 命令格式: jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]] jstat -gcutil 用于统计和监控java进程的内存回收

Jmap 指令的用法

Jmap 全称 Java Memory Map,用于打印出某个java进程(使用pid)内存内的,所有'对象'的情况(如:产生那些对象,及其数量). Usage: jmap [option] <pid> (to connect to running process) jmap [option] <executable <core> (to connect to a core file) jmap [option] [[email protected]]<remote s

linux入门(二):find指令的用法

我们知道,Linux下find命令可以在目录中搜索指定文件,并进行相应的操作.find命令提供了相 当强大的查找条件,功能很强大.所以今天我们来分析一下find的用法.与which和whereis不同的是 find在查找文件的时候是真正的在遍历所有的文件,如果find没有找到你所需要的目标的话,那系统中 一定不存在你所需要的文件,因此find在使用的时候会比其他的查找指令更详尽一些,当我们在运行一 个很消耗资源的find指令的时候,人们倾向于将其放在后台运行,因为遍历一个大的文件系统可能需要 很

几个预编译指令的用法

转载:痴 狼While there is life there is hope http://www.cnblogs.com/Bolin/archive/2011/02/20/1959120.html 几个预编译指令的用法    预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器.可见预处理过程先于编译器对源代码进行处理.在C语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件.定义宏.根据条件决定编译时是否包含某些代码.要完成这些工作,就需要使用预处理程序.

【linux】linux下find指令的用法总结

前言: 先阐述下find指令是干嘛的,为什么要来研究他呢? find指令是Linux下一个很重要的操作,因为linux是一个"一切皆文件"的操作系统,find(查找文件)指令就尤为重要了,在windows操作系统下,我们查找一个文件可以直接在计算机中搜索文件,但是linux操作系统的文件是不带后缀的,同样,Linux下的find功能相对与windows来说,强大了很多. Linux下的查找指令有多个,下面我们主要讲下locate和find两个指令 locate指令是对其生成的数据库进行

vue 指令的用法

在vue中,指令是指带有v-前缀的vue属性.通过指令我们可以给标签设置一些制定的特性. 1. v-text 指令 类似js中的innertext设置标签内的文本元素 1 <!-- v-text innerText --> 2 <p v-text="message"></p> 3 <!-- 简写方式 --> 4 <p>{{message}}</p> 2. v-html 指令 类似js中innerHTML,设置标签内

Pacemaker中的资源管理工具--CRM基本指令及用法

配置pacemaker有2种途径,一是命令行工具包括crm和pcs,二是图形工具包括:pygui(mgmt),Hawk,LCMC,pcsd. mgmt出道时间较早,很多文章有介绍:LCMC是Java编写的图形管理工具:Hawk则是官方推荐的代替mgmt的web界面配置工具:pcsd则是pcs的图形界面.具体可参考http://clusterlabs.org/#addons 本文主要介绍命令行工具crm, 而pcs和crm相似,语法稍有不同,掌握crm后使用pcs不成问题. 注:从Pacemake