我知道在主引导记录(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?
答案 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)