|
Вопрос # 6 328/ вопрос решён / |
|
Здравствуйте! Имею в своей программе предложение:
MOV DX, [Mes_db]
после компиляции, транслятор заменил имя переменной Mes_db на адрес 02F1h.
Вопрос: но ведь для формирования адреса в DOS еще нужна и сегментная часть! Как команды вроде MOV DX,[имя_переменной] узнают относительно какого сегмента ведется отсчет? Очень рассчитываю на Вашу помощь, спасибо!
 |
Вопрос задал: Phantom (статус: Посетитель)
Вопрос отправлен: 7 декабря 2012, 11:37
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 16 декабря 2012, 16:13; участников в обсуждении: 2.
|
Drinkenz (статус: 1-ый класс), 8 декабря 2012, 10:04 [#1]:
По умолчанию используются сегменты CS для кода DS для данных SS для стека, однако команды процессора, обращающиеся к памяти, могут в качестве первого байта своего кода содержать префикс замены сегмента, с помощью которого процессор определяет, из какого сегментного регистра взять сегментный адрес. Для сегментного регистра ES код префикса составляет 26h, для SS - 36h, для CS - 2Eh, для FS - 64h, GS - 65h. Если префикс отсутствует, сегментный адрес берется из регистра DS (хотя для него тоже предусмотрен свой префикс - 3Eh).
Если в начале программы с помощью директивы assume указано соответствие сегменту данных сегментного регистра DS
assume DS:data
то команды обращения к памяти транслируются без какого-либо префикса, а процессор при выполнении этих команд берет сегментный адрес из регистра DS.
Если в директиве assume указано соответствие сегмента данных регистру ES
assume ES:data
|
|
Phantom (статус: Посетитель), 8 декабря 2012, 15:03 [#2]:
Благодарю за ответ в столь развернутой форме Т.е. предложения в которых встречается обращение к памяти, по умолчанию работают с сегментным регистром DS?
|
|
Drinkenz (статус: 1-ый класс), 12 декабря 2012, 19:49 [#3]:
да
|
|
Phantom (статус: Посетитель), 16 декабря 2012, 16:13 [#4]:
спасибо
|
18 марта 2013, 21:26: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|