【发布时间】:2015-04-07 17:33:48
【问题描述】:
我在 Ubuntu 上使用 x86 AT&T 程序集。
我需要将任何复杂的间接寻址模式(例如基于索引的模式)重写为简单的间接寻址模式。
以这个sn-p为例:
.L4:
movl i, %eax
movzbl ch, %edx
movb %dl, dict(%eax)
我认为movb %dl, dict(%eax) 行是基于索引寻址的。它的作用是接受 dict+%eax 并取消引用它,然后将 %dl 放入其中,对吗?
现在我这样写是为了使它成为简单的间接寻址:
.L4:
movl i, %eax
movzbl ch, %edx
addl dict, %eax
movb %dl, (%eax)
如您所见,我首先添加了dict 和%eax,并将结果也放入%eax。然后在下一行我只是取消引用结果。
这应该和上面一样,对吧?
它也可以编译,但是在运行它时,我的新 movb 行出现分段错误。
为什么这不起作用?
【问题讨论】:
标签: assembly x86 att addressing