这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 请教两个ARM 汇编 傻瓜问题,[em01]斑竹手下留情:)

共7条 1/1 1 跳转至

请教两个ARM 汇编 傻瓜问题,[em01]斑竹手下留情:)

菜鸟
2005-08-31 19:43:03     打赏

LDR R0,=0X12345678
LDR R0,#0X123465678
这两句有什么区别,这里的=号是什么意思。

STMFD SP!,{R0-R7,LR} ;现场保存,将R0-R7 LR 入堆栈
LDMFD SP!,{R0-R7,PC}^ ;恢复现场,异常处理返回

堆栈遵守先进后出的原则,那么用STMFD入栈后SP应该指向存储LR的字单元,则使用LDMFD返回时按照堆栈原则应该是LR先出栈,那么它不是就存储到了RO中了吗?那么现场又怎么能恢复呢。




关键词: 请教     两个     汇编     傻瓜     问题     斑竹     手下留情    

菜鸟
2005-08-31 21:42:00     打赏
2楼

LDR R0, #0X12345678 是ARM指令
LDR R0, =0X12345678 是伪指令

你编译的时候,第一条指令肯定会报错,#后面跟的是一个立即数,这个立即数应该包括在指令当中,因为指令的长度是32位,还要包括opcode,所以,对能包括在LDR指令里的立即数是有限制的。

第二条指令是伪指令,你可以用ADS编译一下,看看具体的汇编代码是怎样的,你看一下就明白了。


菜鸟
2005-08-31 21:58:00     打赏
3楼
谢谢twentyone师兄指点,下面的堆栈问题能不能也给解答一下[em04]

菜鸟
2005-09-01 00:47:00     打赏
4楼

Hi

堆栈的问题你自己写个小程序试一试也就明白了,你自己注意看看入栈和出栈顺序。


STMFD SP!, {R0-R7, LR} - 入栈顺序是:LR R7 R6 R5 ... R0
LDMFD SP!, {R0-R7, PC} - 出栈顺序是: R0 R1 R2 ...... LR

[align=right][color=#000066][此贴子已经被作者于2005-8-31 17:02:58编辑过][/color][/align]

菜鸟
2005-09-01 00:50:00     打赏
5楼

先进后出是没错,但并不反映在寄存器书写的次序上。这个例子中,LR出栈后写入PC,正好完成程序的返回。


菜鸟
2005-09-01 01:07:00     打赏
6楼
版主一语中的。实不确定的时候,用ADS提供的ARMULATE做个软件仿真,自己试验一下就可以知道答案了。

菜鸟
2005-09-03 00:10:00     打赏
7楼

感谢版猪和twentyone师兄解惑,我刚开始学ARM,还没有自己写过自己的程序和调试程序呢^_^

[em01][em01][em01][em01][em01][em01][em01]

共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]