关于 mov ax,[6] 中 [6] 内存地址指向的问题

白天鹅下的黑咖啡 2017-11-09 07:54:40
第一张图中,调用mov al,[bx],将bx的值(为6)作为内存偏移地址,将ds作为段地址,找到内存中的值(图中所示为35),赋值给al,没有问题。




但是在第二张图中,调用mov al,[6]却发现赋值有问题,al变成06了。




mov al,[6] 这个语句中[6]不是应该是偏移地址吗?为什么在这里成为了值呢?
...全文
486 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
实验之后,的确使用nasm可以正确解析,多谢两位~@zara & @Intel0011 结帖。
  • 打赏
  • 举报
回复
引用 4 楼 Intel0011 的回复:
这个纯属MASM的语法解析问题,它就是这么解析的,我们没办法改变 但我们可以使用其他的汇编器,比如NASM,印象中NASM可以正确解析
好的,多谢。 周末玩一下nasm试一下~
  • 打赏
  • 举报
回复
引用 2 楼 zara 的回复:
编译器的问题吧,masm 好像就是这么设定的,不管加还是不加方括号,都会把 6 当做立即数而非内存地址;要想正确地被处理为内存地址,就得加上个不需要的默认段前缀 ds: 成 mov al, ds:[6] 而最后的代码里也并没有这个 ds: 的。


多谢zara解惑!

的确,加了前缀运行无问题,如下图。

但想深入了解下,为什么masm会有这个设定?这个设定的原理是怎么样的?可不可以自定义这个设置?有没有相关资料啊?我谷歌了一下没找到。还望不吝赐教,多谢!

Intel0011 2017-11-09
  • 打赏
  • 举报
回复
这个纯属MASM的语法解析问题,它就是这么解析的,我们没办法改变 但我们可以使用其他的汇编器,比如NASM,印象中NASM可以正确解析
zara 2017-11-09
  • 打赏
  • 举报
回复
编译器的问题吧,masm 好像就是这么设定的,不管加还是不加方括号,都会把 6 当做立即数而非内存地址;要想正确地被处理为内存地址,就得加上个不需要的默认段前缀 ds: 成 mov al, ds:[6] 而最后的代码里也并没有这个 ds: 的。

21,458

社区成员

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

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