如何计算我需要多少尺寸才能正确制作MBR

时间:2020-09-03 14:13:27

标签: assembly mbr

我知道在主引导记录(MBR)的末尾有一个魔术数字,告诉BIOS它是引导加载程序,并且我们需要填写剩余的字节数,直到达到512字节(MBR大小)为止,但是如何计算剩余的字节数?

[bits 16] ; 16 bits assembly
[org 0x7c00]

start:
    ;; Call VideoService interrupt 0x10
    ;; ah = 0x00 -> SetVideoMode
    ;; al = 0x13 -> 320x200 16 color
    mov ah, 0x00
    mov al, 0x13
    int 0x10

times 510 - ($ - $$) db 0 ; instead of 510, what number do I need to use?
dw 0xaa55 ; magic number tells BIOS it is the bootloader

我需要使用多少个数字而不是510?

1 个答案:

答案 0 :(得分:-2)

我们总是需要510。即512-2(签名),$-$$负责其余的事情

我们可以编写任何想要的内容而无需更改List<string> dgvHeaders = new List<string>(); foreach (DataGridViewColumn column in dataGridView.Columns) { dgvHeaders.Add(column.HeaderText); } 吗?

只要表达式510-($-$$)为非负,则为是。当代码大小(由$-$$给出)大于510字节时,就会发生这种情况。汇编器会抱怨,所以您会知道是否会发生这种情况。同样,从技术上讲,$-$$可以工作,只要您在引导加载程序的第一阶段只有一个代码段,但这几乎总是这种情况(如果不是始终如此)。 (Margaret Bloom

times如何工作?

times是当前地址,$是该部分的开头。因此$$给出了您到目前为止已使用了多少字节。 $-$$因此会为您提供510剩余的数量,并添加零数量。然后510-($-$$)在最后两个字节中提供签名,从而使总数达到512,以填充您的扇区。 (Jester

相关问题