GNU 汇编程序 .long 声明归零
GNU Assembler .long Declaration Zeroed Out
使用 GNU Binutils 声明汇编代码时,例如:
.long MY_Label
.long MY_Second_label
Assemble 没有错误,但在进行十六进制转储时始终映射为清零的 32 位字符串,即使操作码和其他信息在地址 space 中将它们分开也是如此。我正在编译:
m68k-elf-gcc -c hello.s -o rom.o -nostdlib -static && m68k-elf-objcopy -O binary rom.o rom.bin
并转储我的二进制文件:
m68k-elf-objdump -D -m m68k --start-address=0x0000 --prefix-addresses -l -x -b binary --disassemble-zeroes rom.bin
我的汇编代码中缺少什么?
您从未 link 编辑过您的 .o
可重定位地址,因此地址仍然是占位符。 -c
告诉 GCC 不要 link,只是 assemble,所以 -static
和 -nostdlib
没有意义。
如果您使用 objdump -drwC rom.o
,您会在反汇编(-r
选项)旁边看到符号重定位。
从初始命令中删除 -c
并保持其他所有内容相同:
m68k-elf-gcc hello.s -o rom.elf -nostdlib -static
使用 GNU Binutils 声明汇编代码时,例如:
.long MY_Label
.long MY_Second_label
Assemble 没有错误,但在进行十六进制转储时始终映射为清零的 32 位字符串,即使操作码和其他信息在地址 space 中将它们分开也是如此。我正在编译:
m68k-elf-gcc -c hello.s -o rom.o -nostdlib -static && m68k-elf-objcopy -O binary rom.o rom.bin
并转储我的二进制文件:
m68k-elf-objdump -D -m m68k --start-address=0x0000 --prefix-addresses -l -x -b binary --disassemble-zeroes rom.bin
我的汇编代码中缺少什么?
您从未 link 编辑过您的 .o
可重定位地址,因此地址仍然是占位符。 -c
告诉 GCC 不要 link,只是 assemble,所以 -static
和 -nostdlib
没有意义。
如果您使用 objdump -drwC rom.o
,您会在反汇编(-r
选项)旁边看到符号重定位。
从初始命令中删除 -c
并保持其他所有内容相同:
m68k-elf-gcc hello.s -o rom.elf -nostdlib -static