Я написал простой ассемблерный код, который вычисляет поверхность прямоугольника. Однако все мои регистры (включая 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 (и, конечно, код написан на ассемблере).