【发布时间】:2016-10-07 18:52:03
【问题描述】:
我正在使用 Atmel Studio 6.2 为 Atmega328p 编写一些汇编代码。
但是,当我使用模拟器并逐步执行程序时,子程序的call 指令不起作用。它完全忽略了call 指令并继续下一行。
为了测试call指令,我写了一个简单的程序,如下所示:
.include "m328pdef.inc"
ldi R16, 11
call hello_world
mov R1, R0
nop
hello_world:
mov R0, R16
ret
但即使这样也行不通!它只是继续执行mov R1, R0。
可能是什么原因?当call 不起作用时真是太烦人了!
【问题讨论】:
-
在调试器中,你是使用命令“step”还是命令“next”?
-
我之所以问,是因为通常调试器既有一个执行处理器执行的下一条指令的命令,又有一个执行到程序中下一行代码的命令(例如,在
hello_world完成之后执行)。 -
哦哦!!!我只是傻!!是的我很傻!!!当它来电时,我应该点击“进入”!!!!!!!现在可以了 T.T 我不得不因为愚蠢而把头撞到墙上!!!!非常感谢:) :) :)
-
所以在那个“愚蠢的简单程序”中,您可以在
hello_world:中执行ldi R16,5并查看R16在call之后是否发生了变化。