0

下面是我想了解的汇编代码。用 nasm 组装此代码后如何填充 512 个字节?

因为我还不清楚510-($-$$)这里做的意思?根据下面的代码,$它的价值是什么?$$

http://www.brokenthorn.com/Resources/OSDev3.html

;***************************

org 0x7c00              ; We are loaded by BIOS at 0x7C00

bits    16              ; We are still in 16 bit Real Mode

Start:

    cli             ; Clear all Interrupts
    hlt             ; halt the system

times 510 - ($-$$) db 0   ; We have to be 512 bytes. Clear the rest of the bytes with 0

dw 0xAA55           ; Boot Signature

;*********************
4

1 回答 1

0

来自NASM 手册,“3.5 表达式”部分:

NASM 支持表达式中的两个特殊标记,允许计算涉及当前装配位置:$ 和 $$ 标记。$ 计算为包含表达式的行首的装配位置;因此您可以使用 JMP $ 编写无限循环。$$ 计算为当前部分的开头;所以你可以通过使用 ($-$$) 来判断你在该部分中的距离。

因此,上面的代码执行以下操作:

  1. 计算 'cli' 和 'hlt' 指令占用 N = $-$$ 的字节数。对于 x86 处理器,这将是 0x7C02-0x7C00=2,因为两条指令各占用 1 个字节。
  2. 保留 (510-N) 个零字节。对于 x86 处理器,它将是 508 字节。
  3. 保留一个字 0xAA55,占用 2 个字节。

目的是有一个 512 字节的块: N + ( 510 - N ) + 2 = 512

于 2013-11-05T06:12:31.030 回答