【发布时间】:2020-10-06 22:17:15
【问题描述】:
我正在用 nasm 组装一个程序以适应引导扇区(最大 512 字节)。
例如nasm -f bin boot.asm -o boot.bin
程序的最后两行用 0 填充剩余空间并添加魔术字节:
times 510 - ($-$$) db 0 ; Pad the remaining of the first 510 bytes with 0
dw 0xaa55 ; Magic bytes required at end of boot sector
输出的boot.bin 文件始终为 512 字节(预期),因此我不能随便查看boot.bin 的大小来获得有意义的(非填充和非魔术字节)指令的大小。
我想在汇编时打印 ($-$$) 会起作用(类似于 gcc 的 #warning 或 #pragma message),但我找不到在 nasm 汇编时打印的任何方法。
在填充之前是否有一种简洁或直接的方法来了解指令的大小?
最好避免在运行时打印或通过 boot.bin 向后搜索寻找非零值等 hacky 方法。
【问题讨论】:
-
只需使用
-l请求列表。或者使用您的构建环境将文件填充到 nasm 之外。 -
@Jester 的评论是最佳答案。我使用
-l listing.txt生成列表文件。在列表文件中,可以清楚地看到有意义的指令的大小。