@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 ; возвращаемся по адресу и идем спать

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

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

Похожие вопросы