在 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]