阿域的笔记 https://passport2.21ic.com/?360916 [收藏] [复制] [RSS]

日志

LDR伪指令与LDR加载指令

已有 1768 次阅读2006-4-6 12:16 |个人分类:ARM点滴|系统分类:ARM


ARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令。


LDR伪指令的形式是“LDR Rn,=expr”。下面举一个例子来说明它的用法。


 


COUNT EQU       0x40003100


……


LDR       R1,=COUNT


MOV      R0,#0


STR       R0,[R1]


 


COUNT是我们定义的一个变量,地址为0x40003100。这中定义方法在汇编语言中是很常见的,如果使用过单片机的话,应该都熟悉这种用法。


LDR       R1,=COUNT是将COUNT这个变量的地址,也就是0x40003100放到R1中。


MOV      R0,#0是将立即数0放到R0中。最后一句STR      R0,[R1]是一个典型的存储指令,将R0中的值放到以R1中的值为地址的存储单元去。实际就是将0放到地址为0x40003100的存储单元中去。可见这三条指令是为了完成对变量COUNT赋值。用三条指令来完成对一个变量的赋值,看起来有点不太舒服。这可能跟ARM的采用RISC有关。


下面还有一个例子


 


;将COUNT的值赋给R0


LDR       R1,=COUNT


LDR       R0,[R1]


 


LDR       R1,=COUNT这条伪指令,是怎样完成将COUNT的地址赋给R1,有兴趣的可以看它编译后的结果。这条指令实际上会编译成一条LDR指令和一条DCD伪指令。


欢迎访问阿域的笔记


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)