由汇编指令mov ax,0和mov ax,[0]来看Debug和masm对指令的不同处理
时间:2011-12-13
来源:互联网
以前有人在群里问mov ax,0和mov ax,[0]什么情况下相同,很多人一口否决,说前者传送的是数据0,后者传送的是内存单元ds:0中存储的数据。后来在书上看到了这个知识点,总结了一下贴在这里,希望能纠正一些学习中的人对这个地方的错误认识,同时促进交流学习~~~废话不多说:
我们在debug中写过如下指令:mov ax,[0] 表示将ds:0处的数据送入ax中。但是在汇编源程序中,指令mov ax,[0]被编译器当作指令mov ax,0 处理。
下面通过具体例子来看一下Debug和汇编编译器masm对指令mov ax,[0]的不同处理。
程序任务:将内存2000:0 2000:1 2000:2单元中的数据送入al,bl,cl中。
一、 在debug 中编程实现:
mov ax,2000
mov ds,ax
mov al,[0]
mov bl,[1]
mov cl,[2]
二、 汇编源程序实现:
Assume cs:code
code segment
mov ax,2000h
mov ds,ax
mov al,[0]
mov bl,[1]
mov cl,[2]
mov ax,4c00h
int 21h
code ends
end
接下来看一下实施情况:
1) Debug 中的情况如图:
2) 将汇编源程序存储为.asm格式的,用masm编译运行成功,然后debug加载调试结果如下:
比较后可以很容易的得出,Debug和masm对mov ax,[0]这类指令的解释是不同的。Debug将”[整数]”解释为一个内存单元,整数 为内存单元的偏移地址;而masm将”[整数]”解释为一个 整数。
那么采取什么方法可以将内存2000:0 2000:1单元中的数据送入al,bl中?
有两种方法可以实现:
1. 先将偏移地址送入bx寄存器中,用[bx]的方式访问内存单元,具体代码:
mov ax,2000h
mov ds,ax
mov bx,0
mov al,[bx]
这样做可以实现将内存单元2000:0中的数据送入al 中,但是不够简洁,我们希望像Debug 中那样,在[]中直接给出偏移地址,于是,有了方法2.
2. 在”[]”前面给出段地址所在的段寄存器,比如:
mov ax,2000h
mov ds,ax
mov al,ds:[0]
我们在debug中写过如下指令:mov ax,[0] 表示将ds:0处的数据送入ax中。但是在汇编源程序中,指令mov ax,[0]被编译器当作指令mov ax,0 处理。
下面通过具体例子来看一下Debug和汇编编译器masm对指令mov ax,[0]的不同处理。
程序任务:将内存2000:0 2000:1 2000:2单元中的数据送入al,bl,cl中。
一、 在debug 中编程实现:
mov ax,2000
mov ds,ax
mov al,[0]
mov bl,[1]
mov cl,[2]
二、 汇编源程序实现:
Assume cs:code
code segment
mov ax,2000h
mov ds,ax
mov al,[0]
mov bl,[1]
mov cl,[2]
mov ax,4c00h
int 21h
code ends
end
接下来看一下实施情况:
1) Debug 中的情况如图:
2) 将汇编源程序存储为.asm格式的,用masm编译运行成功,然后debug加载调试结果如下:
比较后可以很容易的得出,Debug和masm对mov ax,[0]这类指令的解释是不同的。Debug将”[整数]”解释为一个内存单元,整数 为内存单元的偏移地址;而masm将”[整数]”解释为一个 整数。
那么采取什么方法可以将内存2000:0 2000:1单元中的数据送入al,bl中?
有两种方法可以实现:
1. 先将偏移地址送入bx寄存器中,用[bx]的方式访问内存单元,具体代码:
mov ax,2000h
mov ds,ax
mov bx,0
mov al,[bx]
这样做可以实现将内存单元2000:0中的数据送入al 中,但是不够简洁,我们希望像Debug 中那样,在[]中直接给出偏移地址,于是,有了方法2.
2. 在”[]”前面给出段地址所在的段寄存器,比如:
mov ax,2000h
mov ds,ax
mov al,ds:[0]
作者: Wang___123456789 发布时间: 2011-12-13
谁能告诉我怎么插入图片。。。
作者: Wang___123456789 发布时间: 2011-12-13
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28