Откуда программа узнает адрес сегмента? После компиляции стоит 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

 

Вернуться к списку вопросов >>

 

 

Другие новости



Счетчики





Яндекс.Метрика