我正在使用窗口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:
答案 0 :(得分:2)
鉴于这是AT& T语法,您可能需要MinGW工具链中的as
和ld
,您可以使用它来构建可执行文件。
您需要在开头添加一些额外的样板,以导出入口点的符号,并告诉链接器该函数进入.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。但是,如果您没有安装任何工具链,您可能能够更快地生成结果用手。