在 AT&T x64 程序集中迭代堆栈
Iterate stack in AT&T x64 assembly
我必须遍历堆栈以临时将单词的值移动到寄存器中,如下所示:
movq ((i - 3)*8)(%rsp), %esi
或
movq %rcx, %rbx # where %rcx is the counter
subq , %rbx
movq , %rax
mulq %rbx
movq (%rbx)(%rsp), %esi
但很明显,以上都不起作用,那么我应该如何改变它才能使其起作用?
movl -24(%rsp,%rcx,8),%esi
请阅读 AT&T 语法文档(并随身携带)。
个人偏见:虽然通常我不介意替代方案,但在 x86 汇编的情况下,我认为 MASM quirk 模式应该被烧掉,AT&T 应该只被编译器用作进一步 compilation/etc 的机器格式,但不是人类。如果你非要用AT&T,那我就当你是受虐狂
只是为了比较,英特尔语法 (nasm):
mov esi,[rsp+rcx*8-24]
我必须遍历堆栈以临时将单词的值移动到寄存器中,如下所示:
movq ((i - 3)*8)(%rsp), %esi
或
movq %rcx, %rbx # where %rcx is the counter
subq , %rbx
movq , %rax
mulq %rbx
movq (%rbx)(%rsp), %esi
但很明显,以上都不起作用,那么我应该如何改变它才能使其起作用?
movl -24(%rsp,%rcx,8),%esi
请阅读 AT&T 语法文档(并随身携带)。
个人偏见:虽然通常我不介意替代方案,但在 x86 汇编的情况下,我认为 MASM quirk 模式应该被烧掉,AT&T 应该只被编译器用作进一步 compilation/etc 的机器格式,但不是人类。如果你非要用AT&T,那我就当你是受虐狂
只是为了比较,英特尔语法 (nasm):
mov esi,[rsp+rcx*8-24]