我对LDR指令的理解

来源:互联网 发布:sql tools 编辑:程序博客网 时间:2024/06/16 16:50
LDR PC, =MyIRQHander
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内容所在的地址*/

















0 0
原创粉丝点击