1- div除法指令
(1) 除数: 有8位和16位两种,在一个寄存器或内存单元中.
(2) 被除数: 默认放在AX和DX或AX中
除数为8位, 被除数为16位, 默认在AX中存放.
除数为16位, 被除数为32位, 在DX或AX中存放. AX存放低16位,DX存放高16位.
(3) 结果
除数为8位, 则AL存储除法操作的商, AH存放余数
除数为16为, 则AX存储除法操作的商, DX存放余数
2- 格式如下
div reg
div 内存单元
div byte ptr ds:[0]
含义为:(al) = (ax)/((ds)*16+0)的商
(ah) = (ax)/((ds)*16+0)的余数
div word ptr es:[0]
含义为:(ax) = [(dx)*10000H+(ax)]/((es)*16+0)的商
(dx) = [(dx)*10000H+(ax)]/((es)*16+0)的余数
div byte ptr [bx + si + 8]
含义为:(al) = (ax)/((ds)*16+(bx)+(si)+8)的商
(ah) = (ax)/((ds)*16+(bx)+(si)+8)的余数
编程:利用除法指令计算 100001/100 (16位除法)
分析:100001大于65535,所以只能用dx和ax两个寄存器联合存放100001,也就是要进行16位除法,除数100小于255,可以在一个8位寄存器中存放,但是因为被除数是32位的,除数必须是16位,所以用16位的寄存器来存放除数100.
因为要分别为dx和ax赋100001的高16位和低16位,所以应先将100001表示为16进制形式.186A1H.
100表示为16进制形式64H,用bx存储
(ax) = [(dx)*10000H+(ax)]/(bx)的商 03E8H
(dx) = [(dx)*10000H+(ax)]/(bx)的余数 0001H
编程:利用除法指令计算1001/100(8位的除法)
被除数可以用ax存放,除数可以用8位寄存器bl
(al)=0AH
(dx)=1H
3- 伪指令 dd
db 字节型数据
dw 字型数据
dd dword (double word)双字型数据
data segment
db 1 ;为01H 在data:0处, 占1个字节
dw 1 ;为0001H 在data:1处, 占1个字
dd 1 ;为00000001H 在data:3处, 占2个字
data ends
;用div计算data段中第一个数据除以第二个数据后,商存放到第三个数据的存储单元中.
;余数存储到第四个存储单元中.
assume cs:codesg,ds:datasg
datasg segment ;储存 0B60:0 F A1 86 01 00 64 00 00 00 00 00
dd
dw
dw
dw
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax
mov ax,ds:[] ;ax存储低16位
mov dx,ds:[] ;dx存储高16位
div word ptr ds:[] ;计算除法
mov ds:[],ax ;商存储第3个单元
mov ds:[],dx ;余数存储第4个单元 mov ax,4c00h
int 21h
codesg ends
end start
4- dup 用来进行数据重复的
db 3 dup (0) ;定义了3个字节,相当于db 0,0,0
db 3 dup (0,1,2) ;定义了9个字节,相当于db 0,1,2,0,1,2,0,1,2
db 3 dup ('abc','ABC') 定义了18个字节, 相当于 db 'abcABCabcABCabcABC'
可见dup的使用格式如下:
db 重复的次数 dup(重复的字节型数据)
dw 重复的次数 dup(重复的字型数据)
dd 重复的次数 dup(重复的双字数据)
定义一个容量为200个字节的栈段
stack segment
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
stack ends
stack segment
dw 200 dup (0)
stack ends
[汇编语言]-第八章 div指令,伪指令dd,dup的更多相关文章
-
div 指令
div 指令 div 是除法指令,后面跟的是除数,被除数默认在 ax, 或者 dx.ax 组成的存储单元中. 除数可以有 8 位和 16 位两种,存储于一个 reg 或内存单元中,也就是说不可以 di ...
-
DIV指令一般用法
本文最初发表于2015-8-14,是由别的地方迁移过来的 (本文所讲为无符号运算) DIV指令是8086汇编中的除法运算指令,它的结果不是浮点数,而是两个整数:商和余数. 我们来看王爽老师是怎么讲的: ...
-
汇编语言---call和ret指令
汇编语言--call和ret指令 call和ret指令 call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP. 它们经常被共同用来实现子程序的设计. ret和retf ret指令用栈 ...
-
汇编语言-[BX]和loop指令
汇编语言-[BX]和loop指令 [BX]指令介绍 mov ax,[bx] 功能: bx为偏移地址,段地址默认为ds.因此,上面指令作用就是将ax中的数据送入内存ds:bx处,即:((ds)*16 + ...
-
div指令和mul指令
div是除法指令,使用div做除法时需要注意: 1)除数:有8位和16位两种,在一个寄存器或者内存单元中 2)被除数:默认存放在AX或DX和AX中.如果除数为8位,被除数则为16位,默认在AX中存放: ...
-
汇编语言debug命令与指令机器码
一.debug命令 二.标志信息 -r用这个指令,得到的信息右下角: NV UP EI PL NZ NA PO NC 这些符号代表的就是标志寄存器里常用标志位的值.这个是符号值对应表: 溢出标志OF( ...
-
操作系统汇编语言之AT&;T指令
转载时格式有问题,大家看原版吧! 作者:EwenWanW 来源:CSDN 原文:https://blog.csdn.net/xiaoxiaowenqiang/article/details/805 ...
-
详解汇编语言B和LDR指令与相对跳转和绝对跳转的关系
@ 目录 为什么要有相对跳转和绝对跳转? 在程序中只有相对跳转/绝对跳转是否可以? B(BL)和LDR指令具体怎么执行的? B(BL)和LDR跳转范围是如何规定的? 为什么要有相对跳转和绝对跳转? 顺 ...
-
CSAPP阅读笔记-汇编语言初探(控制类指令)-来自第三章3.6的笔记-P135-P163
1.正溢出与负溢出: 首先,一个正数与一个负数相加,不可能溢出,因为结果的绝对值一定小于两个加数的绝对值,既然两个加数能合理表示出来,结果一定也能合理表示出来. 其次,正溢出是由于两个很大的正数相加, ...
随机推荐
-
2015弱校联盟(1) - B. Carries
B. Carries Time Limit: 1000ms Memory Limit: 65536KB frog has n integers a1,a2,-,an, and she wants to ...
-
一个ListView中显示不同的item(分组)
MainActivity: package com.zzw.qqgroup; import java.util.ArrayList; import java.util.HashMap; import ...
-
DoubanFm之设计模式(一)
前两版DoubanFm写的太戳,第一版可以忽略,当是熟悉WP手机的一些API.. 第二版用了比较多的依赖注入,熟悉了Messenger,过后越写越大,感觉不对,赶快打住..现在开始好好思考各模块了. ...
-
sql 自连接
这是一个部门表,里面存放了部门及其上级部门,但都放在同一张表中,我们假设现在需要用SQL查询出各部门及其上级部门!就如何做,当然,不用自连接也一样,可以如下: 我们达到预期目的!在这个查询中使用了一个 ...
-
vagrant yii2 Exception 'yii\db\Exception' with message 'SQLSTATE[HY000] [2002]
开发环境:vangrant + LAMP 安装了yii2 advanced版本之后,通过url访问fornted 报数据库user表不存在,看了安装yii2 advanced的教程,里面说需要需要运行 ...
-
2016 Multi-University Training Contest 2 第一题Acperience
Acperience Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Probl ...
-
Jmeter性能测试 及压测入门
Jmeter是一个非常好用的压力测试工具. Jmeter用来做轻量级的压力测试,非常合适,只需要十几分钟,就能把压力测试需要的脚本写好. 为什么要建立线程组?原因很简单,因为我们要模拟多个线程(用户 ...
-
C++之继承和动态内存分配
C++之继承和动态内存分配 如果基类使用动态内存分配,并重新定义赋值和复制构造函数,这将如何影响派生类的实现呢?这取决于派生类的属性,如果派生类也使用动态内存分配,这将如何实现呢?这种 ...
-
windows系统 docker + swoole 操作
之前文章讲过在windows系统安装 cgywin 从而安装swoole扩展的操作,但是安装cgywin的时候会出现这样那样的问题.所以今天记录下另一种方式使用docker 安装 swoole 环境! ...
-
[USACO5.3]校园网Network of Schools
题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 B 在 A 学校的分发列表中, A 也不一定在 B 学校的列表中. 你要写 ...