mov eax,0 、mov eax,[0]区别

船过水无痕 2011-10-31 09:29:47
mov eax,0
mov eax,[0]
mov eax,dword ptr[0]

这几条语句,反汇编后机器码为什么都是 B8 00 00 00 00?
按我的理解,第一条是立即数寻址,这是正常的。第二条是直接寻址,可是反汇编后怎么不是 mov eax,dword ptr ds:[0] 呢??? 第三条和第二条应该是一样的取[0]偏移的位置内容,可是仍然还是和mov eax,0的机器指令一样,这是什么原因?

在debug中测试,mov ax,[0]是读取ds:[0]内存的值,为什么32位的编译器产生的结果不同呢?

...全文
614 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
船过水无痕 2011-11-01
  • 打赏
  • 举报
回复
总算是解开迷惑了,谢谢各位
Areslee 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liuyu60305002 的回复:]
那是不是意味着要进行直接寻址,就得使用变量,标号。

.data
time dd 0

.code
.....
mov eax,[dd] ;这样masm汇编编译器才不将其编译成立即数?
[/Quote]是这样的
或者加上段前缀,比如:
mov eax,ds:[0]
abee23 2011-11-01
  • 打赏
  • 举报
回复
关注....
船过水无痕 2011-11-01
  • 打赏
  • 举报
回复
那是不是意味着要进行直接寻址,就得使用变量,标号。

.data
time dd 0

.code
.....
mov eax,[dd] ;这样masm汇编编译器才不将其编译成立即数?
oneleafpz 2011-11-01
  • 打赏
  • 举报
回复
用nasm吧
Areslee 2011-10-31
  • 打赏
  • 举报
回复
因为MASM不允许
mov 寄存器,[立即数]这种语法
它会将这样的语句识别为
mov 寄存器,立即数

21,494

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧