|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 pulbieup 于 2019-7-10 11:21 编辑
9 @1 `, G8 _9 j% t5 F- a% p) |+ d4 v/ L: f
第一部分 Linux下ARM汇编语法' V+ f( j% l% d
尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针、设置页表、操作ARM的协处理器等。初始化完成后就可以跳转到C代码执行。需要注意的是,GNU的汇编器遵循AT&T的汇编语法,可以从GNU的站点(gnu.org)上下载有关规范。6 T1 v2 V& o% p, u
5 { f9 ?6 e# U2 D# h- w, S' Z) C
6 E% J7 y) S# l) } B一. Linux汇编行结构
. P7 a4 F8 M4 A* u- {6 w任何汇编行都是如下结构:
4 o* J- t4 p/ J4 j z. e! b0 U[:] [} @ comment
& @- v8 j! R- d+ ?[:] [} @ 注释" H; k3 f( H& x$ N0 s
Linux ARM 汇编中,任何以冒号结尾的标识符都被认为是一个标号,而不一定非要在一行的开始。
! v- _/ c' N, o" w+ C6 B, p- M【例1】定义一个"add"的函数,返回两个参数的和。
+ Y/ ]8 T" o. C.section .text, “x”! S/ Z1 u7 ~' ]8 R0 e' ^" i
.global add @ give the symbol add external linkage% s' r* k) M" Q0 K+ d# Q9 y) O
add:
& q+ e' @# n+ j! f4 t0 y1 NADD r0, r0, r1 @ add input arguments
4 y; c4 K# t& h7 iMOV pc, lr @ return from subroutine2 R, G- r/ ?; C/ ^3 n* @, L. g7 |
@ end of program) ~! R* \" U& H" u& c, y ~
; G: ]; M7 h! E+ |
3 Q" b; ?2 D' \二. Linux 汇编程序中的标号3 }5 T7 H) _7 |* \
) j/ r& E0 G3 ~8 |. d4 a+ q
1 w G5 ]& ~; d" l
* A3 @, W1 p$ h" Z+ Z' \ U- u! [7 }# Y i. C8 o
) ?' t0 W& Q- r' h2 `
2 K, \% O0 @) x1 s7 @6 Z; F% V4 \8 v! L- W6 ?
|
|