如何在程序集中创建函数?

问题描述 投票:-2回答:1

我需要创建一个简单的函数来计算矩形的表面(一个简单的a * b程序)。但是,调用函数后,寄存器(包括R0和R1)的值必须保持不变。我的问题是我必须使用命令POP和PUSH吗?

start:
.include "m8def.inc"
.DEF var1= R16
.DEF var2= R17
.DEF surface= R18
.DEF temp= R19
rjmp main

surfacerectangle:
pop R20
pop R21
pop temp
add surface, var1
mul surface, var2
push temp
push R21
push R20
ret

main:

ldi temp, low(RAMEND) 
out SPL, temp
ldi temp, high(RAMEND)
out SPH, temp
ldi var1, 3
ldi var2, 4
ldi surface, 0
push temp

rcall surfacerectangle
pop temp

end3:
 nop

这是我编写的代码,但是似乎无效。有人在我的代码中看到问题了吗?这是在Atmel Studio 7.0中为ATmega8微控制器编写的。

assembly atmega atmelstudio
1个回答
0
投票
start:
.DEF var1= R16
.DEF var2= R17
.DEF temp= R18
rjmp main

surfacerectangle:
mul var1, var2
ret

main:
ldi temp, low(RAMEND) 
out SPL, temp
ldi temp, high(RAMEND)
out SPH, temp
ldi var1, 3
ldi var2, 4

rcall surfacerectangle
end3:
 nop

发现问题,原来是POP和PUSH的错误使用是问题的原因(问题是无限循环)。>>

© www.soinside.com 2019 - 2024. All rights reserved.