我使用NASM 2.16.01,Arch Linux。我尝试使用vstart=0x7C00属性写入一个 Boot 扇区(8086,IBM PC),以便下面的地址计算应该与此相关。但是,它不起作用,因为所有地址仍然是相对于0计算的。为什么会这样(我不理解NASM文档)?我想让第33行中的jmp 0:$+5求值为EA xx7C 0000。我的代码:
vstart=0x7C00
0
jmp 0:$+5
EA xx7C 0000
zz2j4svz1#
正如@MichaelPetch指出的那样(谢谢!)nasm在其代码清单中用[]显示可重定位地址,因此
nasm
[]
33 0000004A EA[4F00]0000 jmp 0:$+5
实际上是在生成的二进制文件中编码为EA 4F 7C 00 00。(带hexdump -C的)但是,使用yasm -p nasm生成的清单不显示方括号,而是直接显示存储在二进制文件中的正确的二进制数据。(正如人们所期望的那样)。因此,nasm显示的可重定位二进制数据是误导性的,因为二进制文件没有重定位表。
EA 4F 7C 00 00
hexdump -C
yasm -p nasm
1条答案
按热度按时间zz2j4svz1#
正如@MichaelPetch指出的那样(谢谢!)
nasm
在其代码清单中用[]
显示可重定位地址,因此实际上是在生成的二进制文件中编码为
EA 4F 7C 00 00
。(带hexdump -C
的)但是,使用
yasm -p nasm
生成的清单不显示方括号,而是直接显示存储在二进制文件中的正确的二进制数据。(正如人们所期望的那样)。因此,
nasm
显示的可重定位二进制数据是误导性的,因为二进制文件没有重定位表。