8 / 5 / 1
Регистрация: 03.03.2018
Сообщений: 59
|
|||||||||||
1 | |||||||||||
Директива Assume06.10.2019, 10:07. Показов 20200. Ответов 4
Метки нет (Все метки)
Здравствуйте,господа. Никак не могу уяснить предназначение директивы ASSUME. Почитал Абеля, Шнайдера , некоторые статьи в интернете...Но у меня никак не откладывается в голове ЧТО и КАК она делает. Может кто скажет простым языком?. Или проследите за моей логикой и найдите в ней ошибку, например:
Ведь мы же загружаем в DS адрес сегмента позже.. И когда мы обращаемся к памяти
По моей логике нам достаточно оставить только одну строку, либо с директивой ASSUME, либо со строкой инициализации DS.. Зачем нам два раза указывать, что DS - это DATASG директивой, а потом ещё и строкой загрузки в DS адреса сегмента. Это вызывает у меня путаницу...то же самое и с остальными сегментными регистрами CS,ES,SS Спасибо большое за ваше внимание. Буду рад любым разъяснениям )
0
|
06.10.2019, 10:07 | |
Ответы с готовыми решениями:
4
ASSUME Помогите разобраться с assume Вопрос по использованию Assume Разница между использованием model small и segment/assume |
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
||||||
06.10.2019, 10:39 | 2 | |||||
Вы правильно мыслите.
В masm/tasm имеется также упрощённый синтаксис, где над этими моментами вообще задумываться не надо?
1
|
Модератор
|
||||||
06.10.2019, 10:55 | 3 | |||||
ASSUME - директива компилятора, присутствующая не во всех компиляторах ассемблера. Предназначена помочь компилятору брать точку отсчёта для инструкций со смещением к переменным. Это актуально при смене сегмента данных.
0
|
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
|
|
06.10.2019, 16:28 | 4 |
LAO_OAL,
Вроде все правильно, но не полно. Сперва Вам нужно понять как может быть организована программа, т.е. её модель: В своем коде Вы используете сокращенную форму описания сегмента. Есть ещё и полная форма: имя_сегмента segment readonly выравн. тип разряд 'класс'
Так вот, ASSUME - указывает компилятору, что на момент выполнения программы(или в нужной точке, т.к. директива может применятся несколько раз) сегментные регистры cs,ds.es.ss - будут иметь значения их реального разпожения в памяти и смещения в сегменте нужно будет считать относительно их во время компиляции. Реальные зачения будут записаны загрузчиком программы по адресам, которые есть в таблице настройки(начнете учить MZ-заголовок и Вы на таблицу настройки "наступите").
1
|
Ушел с форума
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
|
|
20.05.2021, 11:30 | 5 |
Сообщение было отмечено ФедосеевПавел как решение
Решение
3
|
20.05.2021, 11:30 | |
20.05.2021, 11:30 | |
Помогаю со студенческими работами здесь
5
Директива IRPC Директива Pentium 4 Как правильно использовать "assume" в ml64.exe? директива local и команда enter Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |