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

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

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

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 159
от 14.06.2005, 22:30

Администратор:Калашников О.А.
В номере:Вопросов: 2, Ответов: 4


Вопрос № 21971: Помогите пожалуста перевести с Паскаля в Assembler программку о восьми ферзях... Я не могу там оформить рекурсию......
Вопрос № 21983: Привет! Хочу написать свой эмулятор проца, дайте плзз ссылки на доки!! Заранее спасибо!!...

Вопрос № 21.971
Помогите пожалуста перевести с Паскаля в Assembler программку о восьми ферзях... Я не могу там оформить рекурсию...

Приложение:

Отправлен: 09.06.2005, 14:09
Вопрос задал: Пизний Владимир Владимирович (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Ayl
Здравствуйте, Пизный Владимир Владимирович!
Что ты не можешь оформить? Где твои ассемблерные наработки?
Рекурсия оформляется очень просто (см. Приложение)
В кратце - все дело в стеке. Если его правильно использовать, то рекурсия получится сама-собой. Естесственно, в теле подпрограммы не должно быть никаких переменных - все переменные определяются в стеке. С регистрами тоже нужно аккуратно работать, чтобы не затереть нужные данные.
А так все просто. Каждый вызов процедуры выделяет в стеке место для своей работы (фрейм стека). При возврате из процедуры фрейм возвращается. Т.к. данные из стека берутся в обратном порядке, то в результате выполнения рекурсивных вызовов ты сначала спустишься до самого нижнего уровня, а потом поднимешься обратно. Результат надо возвращать через регистры.

Приложение:

---------
Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени

Ответ отправил: Ayl (статус: Профессор)
Отправлен: 09.06.2005, 16:32

Отвечает: DSota
Здравствуйте, Пизный Владимир Владимирович!
Если хотите использовать MASM то там есть хорошая команда (local) для создания переменной в стеке:

Backtracking proc
local i:word;резервирует место для переменной
local y:word
...
mov i,ax;пример использования
...
ret
Backtracking endp

Если же пользуетесь старым ассемблером, или хотите все сделать руками, то есть команда процессора 286 (enter-leave) для резервирования и освобождения места в стеке:

Backtracking proc
y equ word ptr [bp-2]
i equ word ptr [bp-4];-6, -8, ... и так далее для нужных переменных
enter 0,2;резервируем в стеке 2 слова для неопределенных заранее переменных (у и i)
...
mov y,ax;пользуем так-же, как и в предыдущем примере
...
call Backtracking;при этом будут свои i и y
...
leave;освободим, все, что выделено предыдущим enter
ret
Backtracking endp

В программе нужно, чтобы размер стека прев ышал - максимальное_возможное_число_рекурсий*(2 или 4 + размер_памяти,_выделенный_локальным_переменным)...
И кстати - сама Паскалевская программа рабочая? Там рекурсий получаеться больше, чем возможных значений index...
---------
Открыть глаза навстречу солнцу.
Ответ отправил: DSota (статус: Практикант)
Отправлен: 09.06.2005, 17:38


Вопрос № 21.983
Привет!
Хочу написать свой эмулятор проца, дайте плзз ссылки на доки!! Заранее спасибо!!
Отправлен: 09.06.2005, 18:13
Вопрос задал: valix (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: DSota
Здравствуйте, valix!
На http://support.intel.com/support/processors/index.htm - есть все функции и тонкости их процессоров. Единственный минус - они на английском.

---------
Открыть глаза навстречу солнцу.
Ответ отправил: DSota (статус: Практикант)
Отправлен: 10.06.2005, 08:03

Отвечает: Котиев Зураб
Здравствуйте, valix!
http://plg.lrn.ru/doc/emu-howto.html
Ответ отправил: Котиев Зураб (статус: 5-ый класс)
Отправлен: 10.06.2005, 10:45


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

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

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

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

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


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


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться
Вспомнить пароль

В избранное