设为首页 加入收藏

TOP

4.2.3 从汇编程序中访问C程序变量
2013-10-12 06:56:37 来源: 作者: 【 】 浏览:95
Tags:4.2.3 汇编 程序 访问 变量

4.2.3  从汇编程序中访问C程序变量

在C程序中声明的全局变量可以被汇编程序通过地址间接访问,具体访问方法如下。

使用IMPORT伪指令声明该全局变量。

使用LDR指令读取该全局变量的内存地址,通常该全局变量的内存地址值存放在程序的数据缓冲区中。

根据该数据的类型,使用相应的LDR指令读取该全局变量的值,使用相应的STR指令修改该全局变量的值。

各数据类型及其对应的LDR/STR指令如下。

对于无符号的char类型的变量通过指令LDRB/STRB来读写。

对于无符号的short类型的变量通过指令LDRH/STRH来读写。

对于int类型的变量通过指令LDR/STR来读写。

对于有符号的char类型的变量通过指令LDRSB来读取。

对于有符号的char类型的变量通过指令STRB来写入。

对于有符号的short类型的变量通过指令LDRSH来读取。

对于有符号的short类型的变量通过指令STRH来写入。

对于小于8个字节的结构型变量,可以通过一条LDM/STM指令来读写整个变量。

对于结构型变量的数据成员,可以使用相应的LDR/STM指令来访问,这时必须知道该数据成员相对于结构型变量开始地址的偏移量。

下面是一个汇编程序访问C程序全局变量的具体例子:

  1. AREA    global_exp,CODE,READONLY  
  2. EXPORT  asmsub  
  3. IMPORT  globv           ;声明全局变量  
  4. asmsub  
  5.     LDR     r1,=globv           ;将内存地址读入到r1中  
  6.     LDR     r0,[r1]         ;将数据读入到r0中  
  7.     ADD     r0,r0,#2  
  8.     STR     r0,[r1]         ;修改后再将值赋给变量  
  9.     MOV pc,lr  
  10.     END 

程序中,变量globv是在C程序中声明的全局变量,在汇编程序中首先使用IMPORT伪指令声明该变量,再将其内存地址读入到寄存器r1中,将其值读入到寄存器r0中,修改后再将寄存器r0的值赋给变量globv。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.3.3 vi编辑器 下一篇4.2.2 C语言中内嵌汇编代码

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: