Адрес в регистрах ds и es

Рейтинг: 0Ответов: 1Опубликовано: 07.06.2023

У меня есть такой код загрузчика ОС:

BITS 16

org 7C00h

jmp short bootloader_start  ; Jump past disk description section
nop     

;---- skip code

bootloader_start:
    cli         ; Disable interrupts while changing stack
    xor AX,AX
    mov SS,AX       ;Work in stack just below this routine
    mov SP,7C00h
    sti         ; Restore interrupts

    xor AX,AX
    mov     es, ax

    push    ES
    pop DS      ; DS = ES = code = 0.

Мне не понятен коментарий DS = ES = code = 0 в последней строке кода. Имеется в виду что DS и ES равно 0 и этот 0 это начало всей памяти компьютера, или этот 0 обозначает нулевое смещение от начала кода т.е. смещение от 7c00h? Как может быть code = 0? Если code == 7c00h.

Ответы

▲ 1

Как может быть code = 0? Если code == 7c00h.

Нет, значение регистра CS (как и других сегментных регистров) здесь действительно устанавливается в 0. А значение 7C00h, которое задаётся меткой ORG - это смещение внутри сегмента CS. То есть код будет загружен в ОЗУ по адресу 0000h:7C00h (или - абсолютному адресу 7C00h).