我应该在 GAS 中使用哪些指令?我找到了“.org”指令,但 GAS 似乎没有“.bits”指令。
汇编器对我来说默认为 64 位,您可以使用--32
或--64
在命令行上选择。查看手册以了解如何在需要时更改代码内部的体系结构(例如.code16
,可用于为引导加载程序生成实模式代码)。
您很可能不想使用.org
指令来指定代码的位置,但可能希望使用链接脚本或指定文本和数据段在命令行上的加载位置。(org 0x0000000000200000
导致 2+ MB 的二进制文件)。
我应该将什么传递给 gcc 或生成一个普通的二进制文件?即 -f bin 选项对 NASM 的作用。
$ cat test.S
.section .text
.globl _start
_start:
xor %rax, %rax
mov test, %rax
ret
test: .quad 0x1234567812345678
$ as --64 -o test.o test.S
$ ld -Ttext 200000 --oformat binary -o test.bin test.o
$ objdump -D -b binary -m i386:x86-64 test.bin
test.bin: file format binary
Disassembly of section .data:
0000000000000000 <.data>:
0: 48 31 c0 xor %rax,%rax
3: 48 8b 04 25 0c 00 20 mov 0x20000c,%rax
a: 00
b: c3 retq
c: 78 56 js 0x64
e: 34 12 xor $0x12,%al
10: 78 56 js 0x68
12: 34 12 xor $0x12,%al