17.11.2017, 20:17 [+3 UTC]
в нашей команде: 2 266 чел. | участники онлайн: 5 (рекорд: 21)

:: РЕГИСТРАЦИЯ

:: консультации

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.41 (25.02.2017)

Общие новости:
23.02.2017, 09:51

Форум:
15.11.2017, 20:36

Последний вопрос:
17.11.2017, 17:46

Последний ответ:
17.11.2017, 15:37

Последняя рассылка:
17.11.2017, 04:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
07.07.2013, 20:20 »
Кравченко Сергей
Обратите внимание! Некто Александр Сергеевич отправляет отзывы через день. Как Модераторы это расценивают?
01.12.2010, 00:17 »
Посетитель - 348444
Всё очень понятно и наглядно, большое спасибо! [вопрос № 181030, ответ № 264445]
16.03.2012, 15:28 »
Сергей К.
Спасибо. Да, в понедельник сгоняю в поликлинику. [вопрос № 185604, ответ № 270240]

РАЗДЕЛ • Assembler

Создание программ на языке Assembler.

[администратор рассылки: Лысков Игорь Витальевич (Старший модератор)]

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

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 317
Зенченко Константин Николаевич
Статус: Модератор
Рейтинг: 283
Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 145

Перейти к консультации №:
 

Консультация онлайн # 191723
Раздел: • Assembler
Автор вопроса: kerenskyaf (Посетитель)
Отправлена: 10.11.2017, 19:46
Поступило ответов: 0

Уважаемые эксперты! Пожалуйста, ответьте на вопрос:

почему "Многие уже, наверное, заметили, что при запуске какой-нибудь COM-программы регистр sp равен 0FFFEh"? А не 0FFFFh?

Состояние: Консультация активна (до закрытия: 2 сут. 23 час. 29 мин.)

Oтветов пока не поступило.

Мини-форум консультации № 191723

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 1

 +1 
 
= общий = | 10.11.2017, 20:08 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
kerenskyaf:

На 16-битной машине регистр SP - 16-битный. Для работы с ним будет намного лучше, если и адресуемая память будет выровнена на 16 бит, т.е. на четное значение. Строго говоря, будет работать и с нечетной границей, но тогда при обращении к памяти будет тратиться лишний такт. Как-то неправильно и неэффективно. Именно поэтому память желательно выравнивать на необходимую величину. ОС и отладчики это делают автоматически.
То же самое относится и к 32- и 64-битным программам, где память желательно выравнивать , соответственно, на 4 и 8 байт.

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

Коцюрбенко Алексей aka Жерар
Мастер-Эксперт

ID: 312929

# 2

 +1 
 
= общий = | 11.11.2017, 05:14 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
kerenskyaf:

Тем более, что в современных процессорах Intel (начиная ещё с 80486) предусмотрен режим контроля выравнивания, в котором любая команда, обратившаяся по адресу, не кратному размеру аргумента, вызывает прерывание.

Зенченко Константин Николаевич
Модератор

ID: 31795

# 3

 +1 
 
= общий = | 13.11.2017, 10:51 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
kerenskyaf:

Когда компьютеры были большими, а ресурсов(памяти) мало, а 64-Кб кода так много(практически это 20 000 строчек кода). Разработчиками ОСей был придуман стандарт СОМ-файлов:код, данные и стек находятся в одном сегменте. В таких программах не нужно было настраивать сегменты и остальное что с этим связано. В целях экономии памяти носителей информации, система сама подставляла стандартный префикс программы(это аж 256-ть байт на каждую программу пользователя) и заносила в стек 0х0000(как метод защиты самой себя).
Смотрите пример с ошибкой:

Код (Assembler) :: выделить код
model	tiny
.code
org	100h
begin:
;какой то код пользователя
;вызов подпрограммы с ошибкой
	call	pppp
;вывод сообщения пользователю
	mov	ah,9
	lea	dx,dbMes
	int	21h
;завершение программы
	ret
pppp:
;какой то код подпрограммы
;ошибка пользователя - нарушение стека
	pop	ax
;какой то код и возврат из подпрограммы
	ret
;сообщение пользователю
dbMes	db	10,13,'message$'
	end	begin

Теперь пусть программист думает, почему сообщение не было выведено, а код завершился. При выполнении очередной команды выхода из подпрограммы - RET, управление передается по адресу CS : 0000, а там INT 20h - завершить СОМ-программу, а не непонятно куда.

Лысков Игорь Витальевич
Старший модератор

ID: 7438

# 4

 +1 
 
= общий = | 14.11.2017, 11:33 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
kerenskyaf:

Здесь все понятно?

=====
Каждый выбирает по себе -
Щит и латы, посох и заплаты.
Меру окончательной расплаты
Каждый выбирает для себя.

kerenskyaf
Посетитель

ID: 401455

# 5

= общий = | 15.11.2017, 23:12 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Лысков Игорь Витальевич:

СПАСИБО за консультации.
Данный вопрос Консультация онлайн # 191723, можно закрывать. В общих чертах - понятно! Мой уровень - "Hello! World!", поэтому ваш ответ от 10.11.2017, 21:08 - "... память желательно выравнивать на необходимую величину. ОС и отладчики это делают автоматически", мне более понятен. Пока этого достаточно!

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.13655 сек.

© 2001-2017, Портал RFPRO.RU, Россия
Авторское право: ООО "Мастер-Эксперт Про"
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.41 от 25.02.2017
Бесплатные консультации онлайн