转换为 Intel 64 汇编

Converting into Intel 64 assembly

我有一段代码需要转换成带注释的 Intel 64 汇编。我试过了,但我知道我犯了一些错误,所以如果有人能为我指出这些错误并告诉我正确的做法,我将不胜感激。

待转换代码:

void test (int x)
{
    int y, z;
    y = 5;
    z = 2*y;
    x = z+x;
    if (z>0)
        z = -z;
    while (z<0) {
        y = y+y;
        z++;
    }
}

int main()
{
    int x = 8;
    test (x);
}

我的转换尝试:

test:       pop rax; x variable from stack
            mov rbx 5; y variable
            mov rcx rbx; z variable
            imul rcx 2; z = z*y
            add rdx rcx; x = z+x

ifz:        cmp rcx 0; if statement
            jle whilez;
            imul rcx -1; z = -z

whilez:     cmp rcx 0; while statement
            jge endwhile;
            add rbx rbx; y=y+y
            add rcx 1; z++
            jmp whilez; loop back

endwhile:   

main:       mov rax 8; int x = 8
            push rax; push x onto stack for method call
            jmp test;

您在 compiling/linking 执行此操作时遇到什么错误?

我马上注意到您有一些语法错误。对于基于 Intel 的程序集,mov 的语法是...

mov rax, rbx     ; You forgot the comma
add rcx, 8       ; Just another example

'imul'、'add' 和 'cmp' 调用也是如此。

此外,虽然从技术上讲并无不妥,但您在行尾添加了分号。在 Assembly 中,末尾不需要分号,而是注释的标识符。逗号是我注意到的主要问题。我会尝试编译并 link 如果它仍然不起作用我可以再看看。