【问题标题】:How to compile 64bit assembly code如何编译 64 位汇编代码
【发布时间】:2017-03-03 06:51:23
【问题描述】:

我使用的是window 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:

【问题讨论】:

    标签: assembly x86 x86-64 disassembly


    【解决方案1】:

    鉴于这是 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。不过,如果您没有安装任何工具链,您可以手动更快地生成结果.

    【讨论】:

    • 任何关于编译的教程。
    • @MinKoKo 请求场外资源,如教程,是题外话。为此请使用 Google。
    猜你喜欢
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 2021-09-27
    • 2022-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多