|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 pulbieup 于 2019-7-10 11:21 编辑 3 p. S! k: O) }' L/ x
' s- S; Q7 t5 B; E
第一部分 Linux下ARM汇编语法
5 G3 Y+ I: W; C7 w0 ~尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针、设置页表、操作ARM的协处理器等。初始化完成后就可以跳转到C代码执行。需要注意的是,GNU的汇编器遵循AT&T的汇编语法,可以从GNU的站点(gnu.org)上下载有关规范。
% {: Q5 g+ l/ _" a7 ?2 y0 A7 [2 w7 f; b7 z* o2 s0 e
7 J4 W' E* I D2 _5 y" c# C1 x g一. Linux汇编行结构3 x4 h# g& z% y# A6 j7 K4 ?
任何汇编行都是如下结构:
- c L+ n6 ^: P; s: p[:] [} @ comment
T1 Q" P- M& p0 k" X; E! {[:] [} @ 注释7 N( a) u: e2 e j$ e. K% ]
Linux ARM 汇编中,任何以冒号结尾的标识符都被认为是一个标号,而不一定非要在一行的开始。0 V" V5 A8 A$ n3 e; w& h: N9 J
【例1】定义一个"add"的函数,返回两个参数的和。9 w! x9 A8 m2 z" }* `
.section .text, “x”( s- }4 u- O7 T, `+ a
.global add @ give the symbol add external linkage5 I, T7 u! e' b1 P+ G- X6 i+ \
add:5 J, H" R. { o+ m: n( A E& M0 T
ADD r0, r0, r1 @ add input arguments
( K/ H: V- A7 jMOV pc, lr @ return from subroutine; K* P, w8 O; W5 O, I/ c
@ end of program5 E! P, u4 O, }
2 M( `" T6 W$ i1 U" b
8 V6 v# ` M; O. y, e6 X3 L二. Linux 汇编程序中的标号) N/ e; f8 A. K: b0 Y2 n- x
( T @+ W* Z0 N% Z
! |/ I, p* T5 i( z* n' e0 ^0 G0 u: X: \9 {- M& @2 j; l
/ n8 ~% C4 P. V; c; ]
y8 F1 s2 ?) t- \6 b+ ?6 h
4 o' p8 r( P4 ?; p* e% T$ W& f
: ?( H2 D) V& G. F |
|