@lutokris

Прочитать из стека внутри подпрограммы реально же?

Всем добра. Читаю книжку по AVR, конспектируя по тихому. Так вот дошел до описания указателя стека. Там есть такая цитата - "Если записать данные в стек и перейти в подпрограмму, то в теле подпрограммы прочитать эти данные будет невозможно. Потому что при вызове подпрограммы текущий адрес из счетчика программ автоматически записывается в стек и при попытке чтения из подпрограммы внутри стека мы извлечем этот адрес и потом не сможем выйти из подпрограммы".

Но ведь я ж могу тупо так сделать в подпрограмме:
push [A]
push [B] ; заталкиваем два 8 разрядных числа в стек

call Spat ; в стек последним зашел адрес вызова этой процедуры
call IdiSrat

Spat:
pop dx ; сохраняем адрес в регистре dx
pop ax ; извлекаем переменную А
pop bx ; извлекаем переменную Б
add ax, bx ; о да, процедура суммирует две 8 разрядных числа из стека))
push dx ; снова заталкиваем адрес в стек
ret ; возвращаемся по адресу и идем спать

Вроде ж можно так сделать или в книге имелось в виду что так делать просто "неправильно"?
  • Вопрос задан
  • 87 просмотров
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Зачем использовать pop когда можно просто читать из стека со смещением, указывающем на нужный аргумент.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы