|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 pulbieup 于 2019-7-10 11:21 编辑
3 {9 J8 j; ]8 p9 O5 A4 p$ A5 I0 o# i% h$ X+ Z: ^( r' L' ]/ o D
第一部分 Linux下ARM汇编语法3 A0 M2 d4 l! |
尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针、设置页表、操作ARM的协处理器等。初始化完成后就可以跳转到C代码执行。需要注意的是,GNU的汇编器遵循AT&T的汇编语法,可以从GNU的站点(gnu.org)上下载有关规范。
9 j2 x) V( x8 s% S# ]; z R( c& e1 t8 W, `- M
0 V$ h( l: H6 f; C, `# [- h7 `
一. Linux汇编行结构$ W5 k$ w5 i' @ a
任何汇编行都是如下结构:; j- K% U* J: z% k7 C( p! l
[:] [} @ comment- l0 E! q; X' i3 R' R8 [+ J
[:] [} @ 注释) v6 S: D0 `4 c. B9 z
Linux ARM 汇编中,任何以冒号结尾的标识符都被认为是一个标号,而不一定非要在一行的开始。# g$ @6 N8 s; v
【例1】定义一个"add"的函数,返回两个参数的和。8 k( }; S3 R) H: u
.section .text, “x”
+ m5 y: \ h' h.global add @ give the symbol add external linkage0 C% q* ^3 \) ~ z5 d
add:* y& l" H0 [5 x1 J. v$ m. r# Z
ADD r0, r0, r1 @ add input arguments
3 Q d* c6 e D5 B: EMOV pc, lr @ return from subroutine- c h/ R/ Y3 N+ s9 z# U
@ end of program
" J# r5 t# Q2 o9 f) H! B4 a8 ] ], \' _9 Y* V1 b4 ]1 F4 ^$ Y
+ @3 L/ P9 d* \* L# G) M- ?+ @3 b二. Linux 汇编程序中的标号
9 z; Z. s$ ^% q3 w( @. T
6 ~) v& W( r* @% _% m# k- ~6 ]& c' x$ \2 v& Y& p% x1 h
$ v5 j/ G+ z6 `, v ?+ x2 w& S6 w z* h
! X( P* L5 r5 K7 f3 a# j% d; g- Q+ Y/ u5 Q: T4 I% V ~/ m
5 ]+ O2 U6 W- r/ `1 U* I$ [ |
|