我正在编写一个引导加载程序,我正在关注的教程提供了以下代码:
main:
;----------------------------------------------------
; code located at 0000:7C00, adjust segment registers
;----------------------------------------------------
cli ; disable interrupts
mov ax, 0x07C0 ; setup registers to point to our segment
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
;----------------------------------------------------
; create stack
;----------------------------------------------------
mov ax, 0x0000 ; set the stack
mov ss, ax
mov sp, 0xFFFF
sti ; restore interrupts
我可能误解了一些东西,但是如果 SS 寄存器包含 0x0000 是否意味着 ds、es、fs 和 gs 会与堆栈重叠?fs 和 gs 寄存器的功能是什么?另外,cs段是由BIOS自动设置的吗?因为它说代码位于 0000:7c00。此外,本教程从不讨论为什么禁用中断。我在某处读到通常禁用中断以避免死锁。这是什么意思,为什么会发生?