| 
| 
 | Вопрос # 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: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |