为什么要明确方向旗

时间:2014-05-31 02:39:00

标签: assembly x86 bootloader

.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程序的起始部分。我想知道为什么我们需要清除方向标志。我理解清除方向标志的作用,但清除它的必要性是什么?

1 个答案:

答案 0 :(得分:2)

如果在引导加载程序将控制转移到您的代码时恰好设置了方向标志,则字符串操作将无法按预期方式工作。大多数表现良好的引导加载程序可能不会这样做,但确保这是好的做法。