【发布时间】:2017-09-07 15:09:36
【问题描述】:
我发现程序员通常会在他们的引导加载程序的第一行修复寄存器(有时是段),他们通常建议养成这个习惯。例如:
inc cx
dec bx
inc bp
dec di
xor ax, ax
我知道的是:BIOS 在引导过程中清除所有寄存器!
在引导加载程序中初始化寄存器和段是一个好习惯吗?为什么?什么是默认寄存器、段和指针值(可能取决于芯片组)?
【问题讨论】:
-
英特尔文档确实指定了 CPU 上电时每个寄存器包含的值。但是您是在询问 BIOS 移交给引导加载程序后的状态,所以谁知道...
-
谢谢@Nayuki。你是对的。
-
当您执行引导加载程序时,您只能假设一件事(除了一些 1980 年代不太兼容的计算机)。也就是说,由 BIOS 引导的驱动器 lnumber 位于 DL 寄存器中,除此之外,您不应假设标志的状态、段寄存器的状态和任何通用寄存器的状态.
-
谢谢@MichaelPetch。总是有帮助的。
-
@MichaelPetch,IMO,这应该是一个答案。
标签: assembly memory-management x86-16 bootloader bios