EDA365电子论坛网
标题:
汇编语言程序访问C语言全局变量
[打印本页]
作者:
fish1352
时间:
2016-7-13 16:51
标题:
汇编语言程序访问C语言全局变量
汇编语言程序可通过地址间访问在C语言程序中声明的全局变量。通过使用IMPORT关键词引入全局变量,并利用LDR和STR指令根据全局变量的地址来访问它们。对于不同类型的变量,需要采用不同选项的LDR和STR指令:
! z+ N( n, ?( j' ]# D! D0 H% X
unsigned char LDRB/STRB
4 ?( \8 {: ^& M# S6 u) {6 S
unsigned short LDRH/STRH
; C4 \5 M$ S* v
unsigned int LDR/STR
9 F) @% E: z+ q- p; |& L
char LDRSB/STRSB
$ n5 Z- t* R$ D. Q. X
short LDRSH//STRSH
. a- C9 W: I- {' E6 s7 ~
对于结构,如果知道各个成员的偏移量,则可通过加载和存储指令进行访问。如果结构所占空间小于8个字,则可用LDM和SRM一次性读/写。
2 R% A/ Y/ u# u" H; q8 I) j+ q
下面是一个在汇编语言程序中访问C语言程序全局变量的例子,它读取全局变量globvar,并将其加2后写回。程序中变量globvar是在C语言程序中声明的全局变量。
& z* e8 W; D. _5 H1 ~ m# K
示例 C语言程序全局变量在汇编语言程序中的访问。
+ h9 P( z- j. ]# `4 v
AREA globals,CODE,READONLY
5 x4 ~4 Q! Q) |, |# d. q( r
EXPORT asmsubroutine ;用EXPORT伪操作声明该变量可被其他文件引
& E! { S2 c! x6 e& y5 `+ H0 b
;用,相当于声明了一个全局变量
4 L" I; g: E$ O/ N
IMPORT globvar ;用IMPORT伪操作声明该变量时在其他文件中定
; c7 ?, V, T) x& Q2 L9 @* _
;义的,在本文件中可能要用到该变量
1 ?( ?5 H, U& a( \/ K* i# a% Y
asmsubroutine
( M, }. L6 I, V, A, o/ p
LDR R1,=globvar ;从文字池读globvar的地址,并将其保存到R1
% x* D7 G& m* M, h% ]3 s' u
LDR R0,[R1] ;再将其值读入到寄存器R0中
$ I7 J0 L" \$ G, W" w* y2 c
ADD R0,R0,#2
4 Q! C& u" f# ^, w1 Z8 t6 U- d
STR R0,[R1] ;修改后再将寄存器R0的值赋予变量globvar
% Y( g- `! a! G$ r
MOV PC,LR
- e$ i" I1 a$ Q
END
作者:
Haiting32451
时间:
2016-7-13 17:11
支持一下,很不错哦!
- ]1 F- g5 I7 i
作者:
ygcgsa
时间:
2016-7-14 14:20
路过捧场,谢谢分享!
' h& n! P- Y4 a) l
作者:
Gegu
时间:
2016-7-15 14:31
路过捧场,谢谢分享!
作者:
wl964423
时间:
2016-7-15 15:01
Haiting32451 发表于 2016-7-13 17:11
3 h% l* ?' F6 M
支持一下,很不错哦!
. h. ?/ e' d% o6 k' C0 }
谢谢分享,不错哦
! G: m f; x# ?3 u
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2