Как сохранить все переменные неизменными (одинаковыми) после вызова функции? - PullRequest
0 голосов
/ 27 мая 2020

Я написал простой ассемблерный код, который вычисляет поверхность прямоугольника. Однако все мои регистры (включая R0 и R1) должны оставаться неизменными после вызова моей функции.

start:

.DEF var1= R16
.DEF var2= R17
.DEF suma2= R18
.DEF temp= R19
rjmp main2

Rectangle:
mov suma2, var1
mul suma2, var2
ret

main2:
ldi temp, low(RAMEND) 
out SPL, temp
ldi temp, high(RAMEND)
out SPH, temp

ldi var1, 3
ldi var2, 4
ldi suma2, 0

rcall Rectangle
rjmp end4

end4:
nop

Это код, который я написал. Кто-нибудь случайно знает, как я могу улучшить свой код, чтобы эти регистры не меняли свое значение после вызова функции? Я использую Atmel Studio 7.0 и программирую для микроконтроллера ATmega8 (и, конечно, код написан на ассемблере).

...