Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

Kdsfofwe21
Статус: 2-й класс
Рейтинг: 3
∙ повысить рейтинг »
cain52
Статус: 3-й класс
Рейтинг: 1
∙ повысить рейтинг »
Evgen aka Chuma
Статус: 6-й класс
Рейтинг: 0
∙ повысить рейтинг »

∙ Assembler

Номер выпуска:1740
Дата выхода:20.05.2019, 17:45
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:71 / 23
Вопросов / ответов:1 / 1

Консультация # 195621: Уважаемые эксперты! Объясните, пожалуйста, смысл директивы "org". От какого слова произошло название этой директивы? Свойства этой директивы, что она делает, для чего предназначена? Привожу свой конкретный пример, простая .com-программа (ниже). В которой, я для опыта ввел директиву не "org 100h", а "org 110h...

Консультация # 195621:

Уважаемые эксперты!
Объясните, пожалуйста, смысл директивы "org".
От какого слова произошло название этой директивы?
Свойства этой директивы, что она делает, для чего предназначена?
Привожу свой конкретный пример, простая .com-программа (ниже).
В которой, я для опыта ввел директиву не "org 100h", а "org 110h".
Как работает данная директива "org" в моем примере?
CSEG segment
; org 100h
; org 200h
org 110h ; набираю данный вариант org 110h – для опыта!
Start:
mov ah, 9
mov dx, offset String
int 21h
mov ah, 10h
int 16h
int 20h
String db 'Нажмите любую клавишу …$'
CSEG ends
end Start
Данный исходный код ассемблируется, но, компоновщик выдает предупреждение - "LINK: warning L4055: start address not equal to 0x100 for /TINY"

Но, данная программа, я назвал ее prog02op.asm(com) – работает, - выводит часть строки.

Объясните, пожалуйста, ка к директива "org 110h", повлияла на то, что забиты только данные – ровно на 16 байтов (10h). Т.е. не отражается вот эта часть строки – "Нажмите любую кл".
При этом, как показывает отладчик AFD, сами команды не забиты, а код программы "prog02op.com", начинается все равно с адреса – сегмент:0100h.

Почему отладчик показывает адрес выводимой строки именно по смещению – "011Dh"? Прилагаю файл со screenshot-ами.

На данном примере, как-то не могу объяснить слова:
"Директива ORG объявляет адрес, начиная с которого будет ассемблироваться программа". Сайт: http://zxpress.ru/book_articles.php?id=1085
М.з. (мое замечание) но программа то ассемблируется все равно с адреса сегмент:0100h, а не с адреса сегмент:011h.

Или другой сайт про директиву org.
http://citforum.ru/programming/tasm3/tasm3_9.shtml
Вы можете использовать директиву ORG, чтобы установить счетчик адреса в значение текущего сегмента.
Пе ред данными или кодом, которые уже введены в сегмент, вы можете восстановить значение счетчика адреса. …
Используйте этот метод с осторожностью: вы можете непреднамеренно что-либо затереть.
М.з. (мое замечание) – что за счетчик адреса? Почему, в моем подопытном примере, затирается часть строки?

Дата отправки: 15.05.2019, 17:43
Вопрос задал: kerenskyaf (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Зенченко Константин Николаевич (Старший модератор):

Здравствуйте, kerenskyaf!

Директива ORG ХХХХ -указывает, компилятору, что код будет расположен в памяти начиная с адреса ХХХХ, поэтому компилятор все смещения считает относительно этого адреса.

Смотрим(это снимок листинга компиляции):

Компилятор считая, что программист всегда знает, что он делает, создал код, как того хотел программист, расставив все смещения нужным образом. Создал СОМ-файл. Вот только смещение не стандартное и о нем не знает система, которая запускает этот файл, автоматически загружая его с адреса 0х100.
Думаю, теперь все ясно.

Удачи!

Консультировал: Зенченко Константин Николаевич (Старший модератор)
Дата отправки: 20.05.2019, 12:26
Рейтинг ответа:

НЕ одобряю +1 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное