【问题标题】:MASM alternative for NASM padding to 510 bytes with times 510 - ($-$$) db 0MASM 替代 NASM 填充到 510 字节,时间为 510 - ($-$$) db 0
【发布时间】:2013-01-31 18:51:09
【问题描述】:

此 NASM 声明的 MASM 替代方案是什么?

times 510 - ($-$$) db 0

我正在制作 MBR 引导加载程序。基本上这条语句用 0 填充内存上剩余的 510 字节,因为引导加载程序的大小应该是 512 字节。

【问题讨论】:

  • 它是经常在引导扇区末尾找到的代码,它将可执行文件补零至 512 字节,以便它完全适合 MBR。
  • Jasper Bekkers,MASM 有什么替代品吗?
  • 我不知道,但创建一个执行此操作的工具应该很容易。最多应该是 5 行代码,只需在最后添加零字节,直到您到达 512 :-)

标签: assembly nasm padding masm bootloader


【解决方案1】:
code segment use16
assume cs:code
org 7c00h
start:

; your code
db 510-($-start) dup(0)
dw 0AA55h

code ends
end start

另一种选择是使用org 在输出文件中实际seekmentioned by the NASM manual 在 MASM 但不适用于 NASM:

; MASM only
        ORG 0 

        ; some boot sector code 

        ORG 510 
        DW 0xAA55

【讨论】:

  • 非常感谢。这真的很有帮助。最后1最后一个请求,你能向我解释一下这行代码:TIMES 0Bh-$+start DB 0。我知道times是什么意思,甚至$是什么意思,甚至是DB 0部分。但是你能为我简化剩下的部分吗 - 0BH 和 start(段名)。
  • 我不确定我明白你不明白的地方。
  • 基本上我不明白 0bh 或 0xb 是什么。以及最终的结果是什么。例如。 $-$$ 是程序的大小,0bh-$+start 的计算结果是什么?
  • 0Bh 和 0xB 是十六进制数。听说过那些吗?我不知道0bh-$+start 的评估结果是什么(我什至不完全确定它是否有效,但我不会解释为什么我不确定,这不相关)没有看到代码,它在哪里使用。
  • 谢谢,我会尽快添加代码截图。如果可以,请你帮助我。再次感谢。
猜你喜欢
  • 2016-07-03
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
相关资源
最近更新 更多