[汇编语言]-第八章 div指令,伪指令dd,dup
2014-02-27 16:14
155 查看
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
![](http://images.cnitblog.com/blog/578570/201402/271640362253371.png)
编程:利用除法指令计算1001/100(8位的除法)
被除数可以用ax存放,除数可以用8位寄存器bl
![](http://images.cnitblog.com/blog/578570/201402/271647467675032.png)
(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
![](http://images.cnitblog.com/i/578570/201402/280936269574429.png)
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
(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
![](http://images.cnitblog.com/blog/578570/201402/271640362253371.png)
编程:利用除法指令计算1001/100(8位的除法)
被除数可以用ax存放,除数可以用8位寄存器bl
![](http://images.cnitblog.com/blog/578570/201402/271647467675032.png)
(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 100001 dw 100 dw 0 dw 0 datasg ends codesg segment start: mov ax,datasg mov ds,ax mov ax,ds:[0] ;ax存储低16位 mov dx,ds:[2] ;dx存储高16位 div word ptr ds:[4] ;计算除法 mov ds:[6],ax ;商存储第3个单元 mov ds:[8],dx ;余数存储第4个单元 mov ax,4c00h int 21h codesg ends end start
![](http://images.cnitblog.com/i/578570/201402/280936269574429.png)
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
相关文章推荐
- 汇编语言摘录35:伪指令dd、dup
- 170406 汇编-第八章数据类型、div和dup
- 8086汇编语言自学经验分享 除数16位的DIV指令
- 汇编语言 第三版 王爽 div指令笔记
- [BX]和loop指令01 - 零基础入门学习汇编语言23
- [BX]和loop指令05 - 零基础入门学习汇编语言27
- 汇编语言-转移指令的原理
- 汇编语言常用伪指令
- [汇编语言]-第五章[bx]和loop指令
- 利用汇编语言编程实现:将mov ax,4c00h之前的指令复制到内存0:200处,上机调试,跟踪运行结果。
- 8086汇编语言自学经验分享 cx=0则跳转。指令jcxz实例
- 汇编语言:第九章 转移指令的原理
- 16位汇编语言寄存器及指令整理
- 汇编语言常用指令
- 汇编语言学习笔记18086指令系统
- 汇编语言指令大全
- 汇编语言——第八章(数据处理的两个基本问题)
- 汇编语言-转移指令的原理
- 转移指令的原理02 - 零基础入门学习汇编语言44
- 学 Win32 汇编[27] - 乘除指令: MUL、IMUL、DIV、IDIV