|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
汇编语言程序可通过地址间访问在C语言程序中声明的全局变量。通过使用IMPORT关键词引入全局变量,并利用LDR和STR指令根据全局变量的地址来访问它们。对于不同类型的变量,需要采用不同选项的LDR和STR指令:
, p$ L- J3 W. u% F1 l+ `unsigned char LDRB/STRB
& k7 w( s- X1 Z$ n" B8 Y+ kunsigned short LDRH/STRH
7 k5 R3 M3 R1 C7 @- Funsigned int LDR/STR) h$ d; }3 E2 d- Y4 |
char LDRSB/STRSB. n. W. v R0 V6 z) r* m
short LDRSH//STRSH
8 h" C& }- t. _/ c) g对于结构,如果知道各个成员的偏移量,则可通过加载和存储指令进行访问。如果结构所占空间小于8个字,则可用LDM和SRM一次性读/写。
% W" j, k1 k# v下面是一个在汇编语言程序中访问C语言程序全局变量的例子,它读取全局变量globvar,并将其加2后写回。程序中变量globvar是在C语言程序中声明的全局变量。& S: `7 t9 h6 {9 J d1 R
示例 C语言程序全局变量在汇编语言程序中的访问。( ]# M0 b& J8 `5 ~
AREA globals,CODE,READONLY
& T. _9 ^; `4 f: \EXPORT asmsubroutine ;用EXPORT伪操作声明该变量可被其他文件引
/ v ?* F& u$ q s8 ]# k4 d ;用,相当于声明了一个全局变量2 D6 W2 C2 ]# V
IMPORT globvar ;用IMPORT伪操作声明该变量时在其他文件中定% |: [+ A: D( _* d/ ^
;义的,在本文件中可能要用到该变量8 a/ h8 |6 u$ k, n" i
asmsubroutine$ P" e4 {; K9 d7 K B+ K
LDR R1,=globvar ;从文字池读globvar的地址,并将其保存到R15 k) p) q$ M9 k, B
LDR R0,[R1] ;再将其值读入到寄存器R0中9 Y( d( K1 P* b3 G9 w h3 a
ADD R0,R0,#2 7 k' M3 Z% l* l9 `) j; H
STR R0,[R1] ;修改后再将寄存器R0的值赋予变量globvar
9 k1 B1 Q- e( v) A5 x0 f- aMOV PC,LR
7 y, ?2 j0 W( c0 p- N0 HEND |
|