Адрес в регистрах ds и es
У меня есть такой код загрузчика ОС:
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 шт):
Автор решения: Fonar Siny
→ Ссылка
Как может быть code = 0? Если code == 7c00h.
Нет, значение регистра CS (как и других сегментных регистров) здесь действительно устанавливается в 0. А значение 7C00h, которое задаётся меткой ORG - это смещение внутри сегмента CS. То есть код будет загружен в ОЗУ по адресу 0000h:7C00h (или - абсолютному адресу 7C00h).