Нажатие и выталкивание одного и того же регистра через стек - PullRequest
0 голосов
/ 09 октября 2019

Мне кажется, я понимаю концепцию Push / Pop в / из стека в MSP430, но не уверен, что происходит в этой ситуации:

mov #8, R10
push R10
call #myfunc

Затем внутри подпрограммы 'myfunc':

push R10
push R11
push R12

..... do some ops with R10
pop R10
pop R11
pop R12
ret

Что происходит, когда мы снова нажимаем на R10 и щелкаем перед 'ret' и используем его таким образом? R5 больше не используется в 'main'.

Я все еще новичок в этом - спасибо

1 Ответ

0 голосов
/ 09 октября 2019

Если дважды нажать один и тот же регистр, значение будет существовать в двух адресах в стеке. Делать это дважды не имеет смысла.

Следует также помнить, что количество инструкций push и pop должно совпадать, чтобы предотвратить накопление бесполезных данных в стеке. Вы можете удалить «нажать R10» перед вызовом, так как вы уже делаете это после вызова.

РЕДАКТИРОВАТЬ: Вы должны также вытащить регистры в обратном порядке, в котором вы их нажимали, чтобы убедиться, что все заканчивается в их соответствующих регистрах

...