转换为 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 如果它仍然不起作用我可以再看看。
我有一段代码需要转换成带注释的 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 如果它仍然不起作用我可以再看看。