如何编译64位汇编代码

How to compile 64bit assembly code

我正在使用 window 7 并且不知道如何编译这个程序集 code.Do 我需要手动计算吗?我想知道更快的更好的方法或者想知道如何逐行计算。我需要 rax 的最终值。

start:
mov 20, %rax
mov 90, %rbx
mov 44, %rcx
xor %rdx, %rdx
sub %rcx, %rbx
cmp %rbx, %rax
jge loopa
jmp loopb
loopa:
cmp , %rdx
jg end
inc %rdx
loopb:
xchg %rax, %rbx
idiv %rbx
add %rdx, %rax
imul %rcx
jmp loopa
end:

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

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

.text
.global start

然后你可以assemble文件和link它:

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

-e 选项告诉 linker 什么函数将是可执行文件的入口点。

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

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

另一种选择是将此代码嵌入到 C 文件中的 asm 块中,并在 C 中执行 IO。不过,如果您没有安装任何工具链,您也许可以制作出手动结果更快。