.set PROT_MODE_CSEG, 0x8 # kernel code segment selector
.set PROT_MODE_DSEG, 0x10 # kernel data segment selector
.set CR0_PE_ON, 0x1 # protected mode enable flag
.globl start
start:
.code16 # Assemble for 16-bit mode
cli # Disable interrupts
cld # clear direction flag -> String operations increment
# Set up the important data segment registers (DS, ES, SS).
xorw %ax,%ax # Segment number zero
movw %ax,%ds # -> Data Segment
movw %ax,%es # -> Extra Segment
movw %ax,%ss # -> Stack Segment
这是mit 6.828课程的bootloader程序的起始部分。我想知道为什么我们需要清除方向标志。我理解清除方向标志的作用,但清除它的必要性是什么?
答案 0 :(得分:2)
如果在引导加载程序将控制转移到您的代码时恰好设置了方向标志,则字符串操作将无法按预期方式工作。大多数表现良好的引导加载程序可能不会这样做,但确保这是好的做法。