У меня проблемы с пониманием разницы между сохраненными регистрами вызывающего и вызываемого абонентов и когда использовать что.
Я использую MSP430 :
процедура:
mov.w #0,R7
mov.w #0,R6
add.w R6,R7
inc.w R6
cmp.w R12,R6
jl l$loop
mov.w R7,R12
ret
приведенный выше код является вызываемым и использовался в примере из учебника, поэтому он следует соглашению. R6 и R7 сохраняются для вызываемого абонента, а R12 - для сохраненного вызывающего абонента. Насколько я понимаю, сохраненные регистры вызываемого объекта не являются «глобальными» в том смысле, что изменение его значения в процедуре не повлияет на его значение за пределами процедуры. Вот почему вам нужно вначале сохранить новое значение в регистре вызываемого объекта.
R12, сохраненный вызывающий абонент является «глобальным» из-за отсутствия лучших слов. То, что делает процедура, оказывает длительное влияние на R12 после вызова.
Я правильно понимаю? Я что-то упустил?