2017-03-03 210 views
-1

我使用的是窗口7,不知道如何编译这个汇编代码。我是否需要手动计算?我想知道更快的方法或希望知道如何一行一行地计算。我需要rax的最终价值。如何编译64位汇编代码

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: 

回答

2

考虑到这是在& T语法,你可能想asld从MinGW的工具链,你可以用它来生成可执行出于此。

您需要在开始添加一些额外的样板导出的入口点的符号,并告诉链接的功能进入.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。但是,如果您没有安装任何工具链,则可能手动更快地产生结果。

+0

任何关于编译一步一步的教程。 –

+2

@MinKoKo请求非现场资源,如教程,是脱离主题。为此使用Google。 –

+0

downvoter的头脑会解释吗? –