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

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


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

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 494
от 15.07.2006, 02:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 329, Экспертов: 22
В номере:Вопросов: 1, Ответов: 1


Вопрос № 48645: RETF достает со стека 2 слова (4 байта): смещение и сегмент для возврата в то место, откуда дальняя процедура вызывалась. Мы же имитируем вызов процедуры. При вызове дальней процедуры в стек кладется сперва смещение, а затем - сегмент для в...

Вопрос № 48.645
RETF достает со стека 2 слова (4 байта): смещение и сегмент для возврата в то место, откуда дальняя процедура вызывалась. Мы же имитируем вызов процедуры.

При вызове дальней процедуры в стек кладется сперва смещение, а затем - сегмент для возврата

Почему мы вначале заносим сегмент (CS), а затем смещение (BX)?

Приложение:

Отправлен: 09.07.2006, 21:12
Вопрос задал: Platon (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ayl
Здравствуйте, Platon!

Все правильно задается. В организации хранения многобайтных чисел в архитектуре процессоров x86 используется принцип "младшее слово по младшему адресу". Т.е. для хранения дальнего адреса в памяти сначала должно идти смещение (2 байта), потом - сегмент (тоже 2 байта).
Теперь вспомним, как устроен стек. Указатель стека после выполнения операции PUSH УМЕНЬШАЕТСЯ на 2! Т.е. стек "растет" от старших адресов к младшим. Т.е. для того, чтобы поместить в стек правильный дальний адрес надо сначала туда записать сегмент и только после этого - смещение.
Вторая строка твоего вопроса неверна: сначала помещается сегмент, потом смещение.
Кстати, если в COM-программе ты опишешь дальнюю процедуру, то компилятор будет ее вызывать следующим образом:
push cs
call My_Proc

Т.е. он просто помещает в стек адрес сегмента кода и потом вызывает процедуру как ближнюю.

---------
Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Академик)
Россия, Санкт-Петербург
ICQ: 5163321
----
Ответ отправлен: 10.07.2006, 12:47


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное