我有一段代码需要转换为注释的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;
答案 0 :(得分:1)
编译/链接时会出现什么错误?
我发现你有一些语法错误。对于基于Intel的程序集,mov的语法是......
mov rax, rbx ; You forgot the comma
add rcx, 8 ; Just another example
“imul”,“add”和“cmp”调用的情况也是如此。
此外,虽然技术上不正确,但您可以在行尾添加分号。在汇编中,最后不需要分号,而是用于注释的标识符。逗号是我注意到的主要问题。我会尝试编译并链接它,如果它仍然无效,我可以再看看。