【发布时间】:2020-05-26 16:50:32
【问题描述】:
我需要创建一个计算矩形表面的简单函数(一个简单的 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 微控制器编写的。
【问题讨论】:
-
“似乎不起作用”不是错误描述。请发布您的代码应该做什么,您期望什么结果以及您得到什么的描述。理想情况下,创建一个minimal reproducible example。
-
你怎么知道它不起作用?没有输出。此外,您的代码运行一次然后执行 NOP ......然后会发生什么?程序计数器不会以 NOP 指令停止。它一直在继续。这不是对微控制器进行编程的正确方法。
标签: assembly atmega atmelstudio