ARM体系结构与编程学习(四)
来源:互联网 发布:淘宝企业店铺公司简介 编辑:程序博客网 时间:2024/05/29 10:16
4.3 arm汇编语言格式
{symbol} {instruction|directive|pseudo-instruction} {;comment}
其中:symbol为符号。符号必须从一行的行头开始,并且符号不能有空格。在指令和伪指令中,符号用作地址标号。在伪操作中,符号用作
变量或者常量
instruction,指令不能从一行的行头开始,前面必须有空格或者符号
directive 伪操作
pseudo-instruction,伪指令
comment为注释,以;开头
在arm汇编语言中,各个指令、伪指令、伪操作的助记符必须全部用大写字母或者全部用小写字母
/这个符号表示下一行将续在本行之后,/之后不能有其他符号,空格和制表符也不行
4.3.2 arm汇编语言中的表达式
表达式的优先级
1、括号内的表达式优先级最高
2、各种操作都有一定的优先级
3、相邻的单目操作符的执行顺序为从右到左,单目操作符优先级高于其他操作符
4、优先级相同的双目操作符执行顺序为从左到右
字符串表达式
GBLS STRING1 ;声明字符串变量STRING1
GBLS STRING2 ;声明字符串变量STRING2
STRING1 SETS "AAACCC" ;给字符串变量赋值
STRING2 SETS "BB":CC:(STRING1:LEFT:3) ;为变量STRING2赋值为"BBAAA"
数字表达式
注意:数字表达式表示一个32位的整数,进行大小比较时都是无符号数,DCQ及DCQU表示的数的范围是0~2^64-1
4.4 arm汇编语言程序格式
arm汇编语言以段(section)为单位。段分为代码段和数据段。
AREA EXAMPLE ,CODE ,READNOLY
ENTRY
start
MOV r0,#10
MOV r1, #3
ADD r0, r0,r1
END
4.4.2 汇编语言子程序调用
子程序调用时通过BL指令完成
AREA EXAMPLE2 ,CODE ,READONLY
ENTRY
start MOV R0 ,#10 ;设置输入参数R0
MOV R1 ,#3 ;设置输入参数R1
BL doadd ;调用子程序doadd
doadd ADD R0,R0 ,R1 ;子程序
MOV PC ,LR ;从子程序返回
END
arm汇编程序设计实例
;声明两个字符变量,用以存放两个函数参数
GBLS _arg0
GBLS _arg1
;宏_spaces_remove
;删除全局变量wstring开头和结尾的空格
MACRO
_spaces_remove $wstring
WHILE ( ("*" :CC:$wstring):RIGHT :1=“ ”)
$wstring SETS ($wstring :LEFT: (:LEN:$wstring-1))
WEND
WHILE ( ($string:CC: "*"):LEFT:1=" ")
$wstring SETS ($wstring :RIGHT: (:LEN:$wstring-1))
WEND
MEND
;宏_lbracket_remove
;删除一起左括号-如果不存在左括号则报错
MACRO
_lbracket_remove $s
ASSERT $s:LEFT:1="("
$s SETS $s:RIGHT:(:LEN:$s-1)
_spaces_remove $s
MEND
;宏_rbracket_remove
;删除一起右括号-如果不存在右括号则报错
MACRO
_lbracket_remove $s
ASSERT $s:RIGHT:1=")"
$s SETS $s:LEFT:(:LEN:$s-1)
_spaces_remove $s
MEND
;宏_comment_remove
;删除行末的所有注释及空格
MACRO
_comment_remove $s
_spaces_remove $s
IF (("**":CC:$s):RIGHT:2)="*/"
WHILE ($s:RIGHT:2)<> "/*"
$s SETS $s:LEFT:(:LEN:$s-1)
WEND
$s SETS $s:LEFT:(:LEN:$s-2)
_spaces_remove $s
ENDIF
MEND
;宏_arg_remove
;从一个用空格分割的串中获取一个变量
MACRO
_arg_remove $s,$arg
LCLA _arglen
LCLL _ok
_arglen SETA 0
_ok SETL {TRUE}
WHILE _ok
IF _arglen>=:LEN:$s
_ok SETL {FALSE}; break if used up input string
ELSE
$arg SETS ($s:LEFT:(_arglen+1)):RIGHT :1 ;下一个字符
IF $arg=" "
_ok SETL {FALSE}
ELSE
_arglen SETA _arglen+1
ENDIF
ENDIF
WEND
$arg SETS $s:LEFT:_arglen
$s SETS $s:RIGHT:(:LEN:$s-arglen)
_spaces_remove $s
MEND
;宏define
;作用:使用#define定义C/Assembler变量
;语法格式如下:#<space/tab>define<spaces><symbol><spaces><value></*comment*/>
MACRO
$la define $a
_arg0 SETS "$a"
ASSERT "$la"="#"
_comment_remove _arg0
_arg_remove _arg0,_arg1
IF "$_arg0" /=""
$_arg1 EQU $_arg0
ELSE
$_arg1 EQU 1
ENDIF
MEND
MACRO
$la ifndef $a
MEND
MACRO
$la endif $a
MEND
;comment
;作用:用于注释
;语法格式:comment <anything you like>
MACRO
COMMENT $a,$b,$c
MEND
ASSERT $s:LEFT:1="("
$s SETS $s:RIGHT:(:LEN:$s-1)
_spaces_remove $s
MEND
- ARM体系结构与编程学习(四)
- ARM体系结构与编程学习(四)
- ARM体系结构与编程学习(一)
- ARM体系结构与编程学习(二)
- ARM体系结构与编程学习(三)
- ARM体系结构与编程学习(五)
- ARM体系结构与编程学习(六)
- ARM体系结构与编程学习(七)
- ARM体系结构与编程学习(八)
- ARM体系结构与编程学习(九)
- ARM体系结构与编程学习(十)
- ARM体系结构与编程学习(十一)
- ARM体系结构与编程学习(十二)
- ARM体系结构与编程学习(十三)
- ARM体系结构与编程学习(五)
- ARM体系结构与编程学习(一)
- ARM体系结构与编程学习(二)
- ARM体系结构与编程学习(三)
- Oracle comment on的用法
- string和xml的相互转化
- Android应用程序开发以及背后的设计思想深度剖析(5)
- linux chmod命令参数及用法详解
- POJ1166 the clocks
- ARM体系结构与编程学习(四)
- DEDE织梦标签dede:arclist 详解
- 简单的key-value实现
- 用HTML5来开发一款android本地化App
- 各路推荐算法
- i/o使用,文件操作
- webview中cookie的读取与保存
- linux下修改主机名(red hat 5.5)
- ARM体系结构与编程学习(五)