如何编译64位汇编代码

时间:2017-03-03 06:51:23

标签: assembly x86 x86-64 disassembly

我正在使用窗口7并且不知道如何编译这个汇编代码。我需要手动计算吗?。我想知道更快的方法或希望知道如何逐行计算。我需要rax的最终值。

start:
mov $1020, %rax
mov $4090, %rbx
mov $2044, %rcx
xor %rdx, %rdx
sub %rcx, %rbx
cmp %rbx, %rax
jge loopa
jmp loopb
loopa:
cmp $4, %rdx
jg end
inc %rdx
loopb:
xchg %rax, %rbx
idiv %rbx
add %rdx, %rax
imul %rcx
jmp loopa
end:

1 个答案:

答案 0 :(得分:2)

鉴于这是AT& T语法,您可能需要MinGW工具链中的asld,您可以使用它来构建可执行文件。

您需要在开头添加一些额外的样板,以导出入口点的符号,并告诉链接器该函数进入.text段:

.text
.global start

然后你可以组装文件并链接它:

as filename.as -o filename.o
ld filename.o -e start -o output.exe 

-e选项告诉链接器哪个函数将成为可执行文件的入口点。

(我在Linux上对此进行了测试,但Windows上的MinGW工具链中的语法应该相同)

现在,您的汇编函数不执行任何IO,甚至没有正确终止,因此如果您运行可执行文件,您可能只会遇到段错误。您必须将它运行到调试器中,在函数末尾添加断点并在执行到达时检查rax

另一种选择是将此代码嵌入到asm块中的C文件中并在C中执行IO。但是,如果您没有安装任何工具链,您可能能够更快地生成结果用手。