assembly - 为什么要清除方向标志

标签 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类(class)的bootloader程序的起始部分。我想知道为什么我们需要清除方向标志。我明白清除方向标志的作用,但是清除它有什么必要?

最佳答案

如果引导加载程序将控制权转移给您的代码时恰好设置了方向标志,则字符串操作将不会按您期望的方式工作。大多数行为良好的引导加载程序可能不会这样做,但可以肯定的是,这是一个很好的做法。

关于assembly - 为什么要清除方向标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23965877/

相关文章:

assembly - Cortex M - IRQ 禁用的原子性

assembly - 如何将二进制 float 转换为十进制小数?

x86 - INT 13h 有效扇区大小

assembly - 在传统 BIOS 引导加载程序中打印特殊(非拉丁)字符

audio - 在引导加载程序中播放声音的最佳方式

linux - 打开一个 .ppm 文件并向其中写入一些数据。 AMD64 linux 汇编 Nasm

assembly - x87 可以对 UNsigned QUADword 整数执行精确除法吗?

x86 - 在没有 AVX(2) 的情况下进行 SIMD 收集的最快方法是什么?

assembly - x86汇编问题

c166 引导加载程序写入内部闪存