首页
社区
课程
招聘
[旧帖] [讨论]由汇编指令mov ax,0和mov ax,[0]来看Debug和masm对指令的不同处理 0.00雪花
发表于: 2011-12-13 22:51 2051

[旧帖] [讨论]由汇编指令mov ax,0和mov ax,[0]来看Debug和masm对指令的不同处理 0.00雪花

2011-12-13 22:51
2051
以前有人在群里问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]

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 130
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
nasm的BUG。mov ax,[0]==mov ax,0 是不合理的。
2011-12-14 00:59
0
雪    币: 110
活跃值: (194)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=nfgfgo;1029103]nasm的BUG。mov ax,[0]==mov ax,0 是不合理的。[/QUOTE]

可是它确实是这么处理的。。
2011-12-14 08:41
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
在编辑器里写入mov ax,[0]  跟debug 里写入mov ax,0是一样的
在编辑器里写入mov ax,ds:[0]  跟debug 里写入mov ax,[0]是一样的
是这样的吧?
2011-12-14 12:50
0
雪    币: 110
活跃值: (194)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
[QUOTE=灭灵;1029209]在编辑器里写入mov ax,[0]  跟debug 里写入mov ax,0是一样的
在编辑器里写入mov ax,ds:[0]  跟debug 里写入mov ax,[0]是一样的
是这样的吧?[/QUOTE]

确实是这样的。。。
2011-12-14 21:39
0
雪    币: 31
活跃值: (48)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
这个在 王爽的<<汇编语言>>中有详细说明的.
2011-12-14 21:51
0
雪    币: 110
活跃值: (194)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
确实,我也是在那本书上摘下来的
2011-12-15 14:56
0
雪    币: 31
活跃值: (48)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
2011-12-15 20:03
0
游客
登录 | 注册 方可回帖
返回
//