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

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


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

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

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Советник
Рейтинг: 10885
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 4354
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2289
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска:1519
Дата выхода:10.06.2012, 14:00
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:90 / 38
Вопросов / ответов:1 / 1

Консультация # 186329: Здравствуйте, уважаемые эксперты. Есть простейшая программа, выводит "Hello, World!", вот она:

Код :
.model small
stack 100h
data
msg	db 'Hello, World!$'
code
start:
	mov ax,@data
	mov ds,ax

	mov ah,9
	mov dx,o
...

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

Здравствуйте, уважаемые эксперты. Есть простейшая программа, выводит "Hello, World!", вот она:

Код :
.model small
stack 100h
data
msg	db 'Hello, World!$'
code
start:
	mov ax,@data
	mov ds,ax

	mov ah,9
	mov dx,offset msg
	int 21h

	mov ax,4c00h
	int 21h
end start

Просматривая дамп, получил странную картину(прилагаю): данные идут не с нуля, как в коде, а с некоторым смещением. Проверял на других программах, то же самое. Заметил, что перед данными каким-то образом влезает хвост программы из сегмента кода. Изменил код с упрощенной записи(.model small и т.п.) на классическую - баг изчез. Что бы это могло быть, и можно ли исправить?

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


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

Здравствуйте, Антон!

Проблема связана с тем, как разработчики компиляторов MASM и TASM смотрят на упрощенные директивы определения сегментов. Оба компилятора одинаково генерируют служебную информацию о сегментах в том числе и о выравниваниии(masm,tasm соответственно):




Но по разному генерируют код:



Это видно по адресам 0х0000(В8 хх хх) и 0х0007(ВА хх хх).
MASM совмещает сегменты данных и кода учитывает выравнивание и сегмент данных начинается с ненулевой позиции текущего параграфа, тем самым сокращается длина сгенерированого кода. Полная противоположность TASM, сегмент всегда выравнивается на начало параграфа.

Удачи!

Консультировал: Зенченко Константин Николаевич (Модератор)
Дата отправки: 08.06.2012, 12:22

5
нет комментария
-----
Дата оценки: 08.06.2012, 14:09

Рейтинг ответа:

НЕ одобряю 0 одобряю!


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

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

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



В избранное