TL; DR : настройка регистра BX не влияет на сегментный регистр ES .
Учебное пособие OS , на которое вы смотрите, содержит потенциальные ошибки.Автор неправильно предполагает, что ES установлен в ноль BIOS перед передачей управления загрузчику.Это не гарантировано.Вам нужно явно установить ES на ноль самостоятельно.Мои советы по загрузчику охватывают эту тему:
- Когда BIOS переходит к вашему коду, вы не можете полагаться на регистры CS, DS, ES, SS, SP, имеющие действительныеили ожидаемые значения.Они должны быть настроены соответствующим образом при запуске вашего загрузчика.Вы можете только гарантировать, что ваш загрузчик будет загружен и запущен с физического адреса 0x00007c00 и что номер загрузочного диска загружен в регистр DL.
* * * * * * * * * * * * *Код учебного пособия для ОС, который вы просматриваете, должен был выглядеть следующим образом:
xor ax, ax ; AX=0 (XOR register to itself clears all bits)
mov es, ax ; ES=0
mov bx, 0x9000 ; ES:BX = 0x0000:0x9000 = 0x09000 . Memory location disk read will read to
Если учесть приведенный выше совет по загрузчику, то запуск загрузчика должен выглядеть примерно так:
mov bp, 0x8000
xor ax, ax ; AX=0 (XOR register to itself clears all bits)
mov es, ax ; ES=0
mov ds, ax ; DS=0
mov ss, ax ; SS=0
mov sp, bp ; SP=0x8000 (SS:SP = stack pointer)
mov bx, 0x9000 ; ES:BX = 0x0000:0x9000 = 0x09000 . Memory location disk read will read to
Обучающие программы по загрузчику нередко имеют неточную или вводящую в заблуждение информацию.