设为首页 加入收藏

TOP

ARM之汇编学习---如何编写ARM汇编程序
2014-11-24 12:31:33 】 浏览:2027
Tags:ARM 汇编 学习 --- 如何 编写 程序

一.前言


1. 看一个程序:


AREA TigerJohn,CODE,READONLY;声明代码段


CODE32 ;声明为32ARM指令


ENTRY ;声明程序入口


START MOV R0 ,#0


MOV R1 ,#1


ADD R1, R1,R0


B START


END


2. ARM汇编程序中用“;”号进行注释。


二.汇编语言程序格式


一个完整的ARM汇编由两部分组成:声明,实际代码段两部分组成。


1. 声明:在一个程序之前先要进行声明


1>都要声明什么


l 声明代码段:


AREA指令定义一个段,说明所定义段的相关属性


(说明段的名字,段的属性)


l 声明ARM指令:


CODE32CODE16来声明程序为32ARM指令或是16Thumb指令。


l 声明程序入口:用ENTRY指令标识程序的入口点。


2>3个声明缺一不可。


3>在程序完成后要用END 指令声明程序结束。每一个汇编程序段都必须有一条END指令,指示代码段的结束。


2.


1>ARM汇编语言程序中,以程序段为单位组织代码。段是相对独立的指令或数据序列,具有特定的名称。


2>段的分类


代码段:代码段的内容为执行代码


数据段:数据段存放代码运行时需要用到的数据。


注:一个汇编程序至少有一个代码段。如果程序较长时,可以分割为多个代码段和数据段。多个段在程序编译连接时最终形成一个可执行的映像文件。


3>段具有以下的属性


READONLY


READWRITE


三.汇编语言的语句格式


[LABEL] OPERATION [OPERAND] [COMMENT]


标号域 操作助记符域 操作数域 注释域


1. 标号域(LABLE


1>标号域用来表示指令的地址、变量、过程名、数据的地址和常量。


2>标号是可以自己起名的标识符,语句标号可以是大小写字母混合,通常以字母开头,由字母、数字、下划线等组成。


3> 语句标号不能与寄存器名、指令助记符、伪指令(操作)助记符、变量名同名。


4> 语句标号必须在一行的开头书写,不能留空格


2. 操作助记符域(OPERATION)


1>操作助记符域可以为指令、伪操作、宏指令或伪指令的助记符。


2> ARM汇编器对大小写敏感,在汇编语言程序设计中,每一条指令的助记符可以全部用大写、或全部用小写,但不允许在一条指令中大、小写混用


3> 所有的指令都不能在行的开头书写,必须在指令的前面有空格,然后再书写指令。


4> 指令助记符和后面的操作数或操作寄存器之间必须有空格,不可以在这之间使用逗号。


3. 操作数域(OPERAND)


操作数域表示操作的对象,操作数可以是常量、变量、标号、寄存器名或表达式,不同对象之间必须用逗号分开。


四.ARM指令集格式


opcode {}{S} , {,}


1. 其中<>中的项是必须的,{}中的项是可选的。


2. opcode 表示指令助记符。


cond:表示执行条件。


S:表示是否影响CPSR寄存器的值。


Rd:表示目标寄存器。


Rn:表示第一个操作数的寄存器。


operand2:表示第2个操作数。


3.operand2”具有如下的形式:


1>#immed_8r:常数表达式


eg:MOV R0,#1


ADD R0,R1,#0X0F


2>Rm:寄存器形式。


即在寄存器方式下,操作数即为寄存器的数值。


eg:MOV PC,R0


ADD R1,R1,R2


3>Rm,shift:寄存器移位方式。


将寄存器的移位结果作为操作数,当Rm值保持不变。


ASR #n:表示算术右移n位。


LSR #n:表示逻辑右移n位。


ROR #n:表示循环右移n位。


RRX #n:带扩展的循环右移n位。


LSL #n:逻辑左移n位。


3. 使用条件码“cond”可以实现高效的逻辑操作,提高代码的效率。


所有的ARM指令都可以条件执行。


Thumb指令只有B(跳转)指令具有条件执行功能。


注:如果执行中不表明条件码,默认为无条件(AL)执行。


五.汇编程序中常用的符号


在汇编语言程序设计中,经常使用各种符号表示变量、常量和地址


符号由大小写字母、数字以及下划线组成。


符号区分大小写,同名的大、小写符号会被编译器认为是两个不同的符号。


符号在其作用范围内必须唯一,即在其作用范围内不可有同名的符号。


自定义的符号名不能与系统的保留字相同。


符号名不应与指令或伪指令同名。


1. 程序中的变量:


1>ARM汇编程序所支持的变量有数字变量,逻辑变量和字符串变量


2>ARM汇编程序设计中,可使用GBLA,GBLL,GBLS伪定义声明全局变量,使用LCLA,LCLL,LCLS声明局部变量,并可使用SETA,SETLSETS对其经行初始化。


2. 程序中的常量


1>ARM汇编程序所支持常量有数字常量,逻辑常量和字符串常量。


3. 程序中的变量代换


1>程序中的变量可通过代换操作取的一个常量。代换操作符为”$”


2>使用示例:



LCLS S1


LCLS S2 ;定义局部字符串变量S1S2


S1 SETS “Test!”


S2 SETS “This is a $ S1”;S2的值为“This is a Test


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇基于uCOS-II的UDP网络编程 下一篇基于ARM LPC2210的以太网RTL8019A..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目