- 杂志
 搜 索: 
 论坛 » ARM开发 » 在Keil for ARM的嵌入汇编中引用C变量的方法
广告招商
版主: l0p0c , twentyone , sunshine0606
 发表新贴 
 发表回复 
 在Keil for ARM的嵌入汇编中引用C变量的方法  发表于 2008-09-17 14:18:51 [您是本帖的第104位阅读者]     [1楼] 
呢称:patton
加我为好友

Keil AARM中,LDAV指令可以把一个局部变量或者函数的参数放入一个寄存器中,STAV指令把寄存器内容存入到局部变量。

用法:

1、LDAV

LDAV    Rd, Rn, var

Rd - 要存放变量var内容的寄存器
Rn - 临时使用的寄存器(当变量var放在堆栈中时有可能使用),必须与Rd不同。
var - 变量名

LDAV并非ARM或Thumb指令,而是Keil的嵌入汇编特有的标识符,在编译时会根据情况生成下列3种代码:

(1) 当变量var存放在寄存器Rv中

        MOV     Rd, Rv

(2) 当变量var存放在堆栈,而堆栈在指令的寻址范围内

        LDR     Rd, [R13, #(偏移量)]

(3) 当变量var存放在堆栈,但堆栈在指令的寻址范围外

        LDR     Rn, #(偏移量)      // 借助临时寄存器Rn
        ADD     Rn, R13
        LDR     Rd, [Rn]

2、STAV

STAV    Rd, Rn, var

Rd - 要存放至变量var的寄存器
Rn - 临时使用的寄存器(当变量var放在堆栈中时有可能使用),必须与Rd不同。
var - 变量名

与LDAV类似,编译时会被分为3种情况:

(1) 当变量var存放在寄存器Rv中

        MOV     Rv, Rd

(2) 当变量var存放在堆栈,而堆栈在指令的寻址范围内

        STR     Rd, [R13, #(偏移量)]

(3) 当变量var存放在堆栈,但堆栈在指令的寻址范围外

        LDR     Rn, #(偏移量)      ; 借助临时寄存器Rn
        ADD     Rn, R13
        STR     Rd, [Rn]

注意的是LDAV和STAV不能操作全局变量。要操作全局变量,可以先定义一个局部指针变量指向全局变量再间接操作。例如有全局变量char var_static,则可以先定义局部指针变量

char *p = &var_static;

然后再使用

LDAV    R1, R0, p     ; r1 = var_static的地址
LDRB    R2, [R1]      ; var_static的值放入R2中
......
STRB    R2, [R1]      ; var_static的值置为R2的内容


 
共1条 1/1 1   
   快速回复主题
  用户名 : 匿名不能发帖!请先 [ 登陆 ]
  标 题:
  内 容 :
 
关于我们 | 广告服务 | 企业会员服务 | 新手上路 | 联系我们 | 友情链接
《电子产品世界》杂志社 版权所有 北京东晓国际技术信息咨询有限公司
Copyright ©2002 ELECTRONIC ENGINEERING & PRODUCT WORLD. All rights reserved.
京ICP备060382号