LDR PC,MyIRQHander
LDR PC, =MyIRQHander
MyIRQHander:
MOV R1,R2
MyIRQHander 是内存的地址,MOV R1,R2是内容,也就是1个32bit的数(机器码)。
指令执行后,PC的内容是机器码所在内存处的地址,也就是MyIRQHander
如果写成:
LDR PC, MyIRQHander
MyIRQHander:
MOV R1,R2
那么PC的内容就是MyIRQHander地址处的内容,即MOV R1,R2指令的机器码,不是我们想要的。
如果写成:
LDR PC, MyIRQHander
MyIRQHander:
.word IRQHanderFunc
IRQHanderFunc:
MOV R1,R2
意思是PC取得的是MyIRQHander地址处的内容,也就是IRQHanderFunc的值,即MOV R1,R2指令所在的地址。
在C语言中:
void (*MyIRQHander)(void); MyIRQHander是一个函数指针,其实也就是一个指针型的变量。
void IRQHanderFunc(void)
{
R1 = R2;/*伪代码*/
}
MyIRQHander:
.word IRQHanderFunc
相当于:MyIRQHander = IRQHanderFunc;
//
LDR R1,VAR
VAR:
.word 0x12345678
类似于
int VAR = 0x12345678;
R1 = VAR;
LDR R1,VAR
VAR:
.word VAR2
VAR2:
.word 0x12345678;
int *VAR;
int VAR2;
VAR = &VAR2;
R1 = VAR;/*R1最后存储的是0x12345678内容所在的地址*/