[ZLG-ARM] GNU ARM 汇编快速入门续1

[复制链接]
1784|1
 楼主| miclinux 发表于 2009-6-1 11:55 | 显示全部楼层 |阅读模式
ARM&nbsp;GNU&nbsp;汇编伪指令简介&nbsp;<br />1&nbsp;ARM&nbsp;GNU&nbsp;汇编伪指令简介<br />&nbsp;&nbsp;(1)abort<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.abort&nbsp;停止汇编<br />&nbsp;&nbsp;(2)align<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.align&nbsp;absexpr1,absexpr2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以某种对齐方式,在未使用的存储区域填充值.&nbsp;第一个值表示对齐方式,4,&nbsp;8,16或<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;32.&nbsp;第二个表达式值表示填充的值<br />&nbsp;&nbsp;(3)if...else...endif<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.if<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.endif:&nbsp;支持条件预编译<br />&nbsp;&nbsp;(4)include<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.include&nbsp;'file':&nbsp;包含指定的头文件,&nbsp;可以把一个汇编常量定义放在头文件中<br />&nbsp;&nbsp;(5)comm<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.comm&nbsp;&nbsp;symbol,&nbsp;length:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在bss段申请一段命名空间,该段空间的名称叫symbol,&nbsp;长度为length.&nbsp;Ld连接器在连接<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;会为它留出空间<br />&nbsp;&nbsp;(6)data<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.data&nbsp;subsection:&nbsp;说明接下来的定义归属于subsection数据段<br />&nbsp;&nbsp;(7)equ<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.equ&nbsp;symbol,&nbsp;expression:&nbsp;把某一个符号(symbol)定义成某一个值(expression).该<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指令并不分配空间<br />&nbsp;&nbsp;(8)global<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.global&nbsp;symbol:&nbsp;定义一个全局符号,&nbsp;通常是为ld使用<br />&nbsp;&nbsp;(9)ascii<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ascii&nbsp;'string':&nbsp;定义一个字符串并为之分配空间<br />&nbsp;&nbsp;(10)byte<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.byte&nbsp;expressions:&nbsp;定义一个字节,&nbsp;并为之分配空间<br />&nbsp;&nbsp;(11)short<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.short&nbsp;expressions:&nbsp;定义一个短整型,&nbsp;并为之分配空间<br />&nbsp;&nbsp;(12)int<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.int&nbsp;expressions:&nbsp;定义一个整型,并为之分配空间<br />&nbsp;&nbsp;(13)long<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.long&nbsp;expressions:&nbsp;定义一个长整型,&nbsp;并为之分配空间<br />&nbsp;&nbsp;(14)word<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;expressions:&nbsp;定义一个字,并为之分配空间,&nbsp;4&nbsp;bytes<br />&nbsp;&nbsp;(15)macro/endm<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.macro:&nbsp;定义一段宏代码,&nbsp;.macro表示代码的开始,&nbsp;.endm表示代码的结束,&nbsp;.exitm<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;跳出宏,&nbsp;示例如下:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.macro&nbsp;SHIFTLEFT&nbsp;a,&nbsp;b<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.if&nbsp;&nbsp;b&nbsp;&lt&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;a,&nbsp;a,&nbsp;ASR&nbsp;#-&nbsp;b<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.exitm<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.endif<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;a,&nbsp;a,&nbsp;LSL&nbsp;#&nbsp;b<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.endm<br />&nbsp;&nbsp;(16)req<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;.req&nbsp;register&nbsp;name:&nbsp;为寄存器定义一个别名<br />&nbsp;&nbsp;(17)code<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.code&nbsp;[16|32]:&nbsp;指定指令代码产生的长度,&nbsp;16表示Thumb指令,&nbsp;32表示ARM指令<br />&nbsp;&nbsp;(18)ltorg<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ltorg:&nbsp;表示当前往下的定义在归于当前段,并为之分配空间<br /><br />2&nbsp;ARM&nbsp;GNU专有符号<br />&nbsp;&nbsp;(1)@&nbsp;表示注释从当前位置到行尾的字符.<br />&nbsp;&nbsp;(2)#&nbsp;注释掉一整行.<br />&nbsp;&nbsp;(3);&nbsp;新行分隔符.<br /><br />3&nbsp;操作码<br />&nbsp;&nbsp;(1)NOP:&nbsp;nop&nbsp;空操作,&nbsp;相当于MOV&nbsp;r0,&nbsp;r0<br />&nbsp;&nbsp;(2)LDR:&nbsp;ldr&nbsp;,&nbsp;=&nbsp;相当于PC寄存器或其它寄存器的长转移<br />&nbsp;&nbsp;(3)ADR:&nbsp;adr&nbsp;相于PC寄存器或其它寄存器的小范围转移<br />&nbsp;&nbsp;(4)ADRL:&nbsp;adrl&nbsp;相于PC寄存器或其寄存器的中范围转移<br /><br />
arminfo 发表于 2009-6-1 13:09 | 显示全部楼层

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

64

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部