转换为Intel 64程序集

时间:2015-03-30 12:06:45

标签: assembly intel

我有一段代码需要转换为注释的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;

1 个答案:

答案 0 :(得分:1)

编译/链接时会出现什么错误?

我发现你有一些语法错误。对于基于Intel的程序集,mov的语法是......

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

“imul”,“add”和“cmp”调用的情况也是如此。

此外,虽然技术上不正确,但您可以在行尾添加分号。在汇编中,最后不需要分号,而是用于注释的标识符。逗号是我注意到的主要问题。我会尝试编译并链接它,如果它仍然无效,我可以再看看。