Откуда программа узнает адрес сегмента? После компиляции стоит mov ax,1.
Q12:
mov ax,@data
mov ds,ax
Откуда программа узнает адрес сегмента? После компиляции стоит mov ax,1. А в отладчике появляется сразу нужный адрес: mov ax,140Fh
Кто его туда прописывает?
A: Т.к. EXE может быть загружен по различным адресам, вместо явных значений cегментов в EXE указаны номера 16-байтных параграфов [0...FFFF] этих cегментов, начиная от начала образа EXE. Загрузчик, после считывания образа EXE в память, используя информацию в заголовке EXE, находит ссылки на явные значения сегментов и прибавляет к значению параграфа, указанное непосредственно в команде, реальное значение сегмента, начиная с которого загружен EXE.
Hапример, образ EXE считан в память, начиная с адреса 140Eh:0 После корректировки значений сегментов вместо mov ax,1 получается mov ax,140F
Вернуться к списку вопросов >>
Другие новости