ARM汇编伪指令

伪指令分为以下四类

  1. 符号定义伪操作 global, local, set, equ
  2. 数据定义伪操作 byte, short, word, long, quad, float, space, skip, string, ascii, asciz, rept
  3. 汇编控制伪操作 if, else, endif, macro, endm, exitm
  4. 杂项伪操作 align, section, data, text, include, arm, code, thumb, weak, end

伪指令作用和使用方法详解

伪指令使用格式:   .伪指令

1、符号定义伪操作

符号定义作用:定义全局变量或局部变量、给全局变量或局部变量赋值

①全局标号定义,伪指令.global

作用:定义一个全局符号,通常是为连接器ld使用

格式:.global  symbol 等价于 .globl symbol。

②局部标号定义伪指令.local

作用:定义对外部不可见的局部符号,作用域仅在当前文件中

格式: .local symbol

③变量赋值 伪指令.set

作用:给一个全局变量或局部变量赋值

格式:.set symbol, expr  示例.set start, 0x50

④宏替换 伪指令.equ

作用:给一个全局变量或局部变量赋值

格式: .equ  Symbol,  expr  (部分教程写法为Symbol  .equ  expr,经试验此写法编译不通过,有知道的同学可以说一下)

2、数据定义伪指令

数据定义伪指令作用:为特定的数据分配存储单元、初始化存储单元。简单来就是在当前的位置放一个指定类型的数字

①字节分配伪指令.byte

作用:在存储器中分配一个字节,用指定的数据对其初始化

格式: label: .byte expr  (expr为数值)

示例:a: .byte #1  以C语言形式理解为char a=1;

②双字节分配  -------》形式和字节分配相同只是把 .byte替换为 .short ;

③四字节分配  -------》换为.word或.long,四字节分配较为常见,应该是因为32位系统较多。

④八字节分配  -------》换为.quad

⑤单精度浮点变量 -》.float

⑥连续存储区域 伪指令 .space  .skip

作用:分配一片连续的存储器区域并初始化

格式:label:  .space size, expr   或者    label:  .skip    size, expr

size指内存字节数,expr为size指定字节的数值

示例:a: .space 8,0x1 以C语言形式为char a[8]={0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1};

⑦字符串定义

作用:定义一个字符串

格式:label: .string str  或   label: .ascii str  或  label: .asciz str  示例如下

a: .string “abc” //分配了4字节(含\0)

a: .ascii “abc” //分配了3字节

a: .asciz “abc” //分配了4字节

⑧重复

作用:重复执行后面的命令

格式:

.rept count      /*count 表示重复次数*/

commands     /*重复的commands命令体*/

.endr

3、汇编控制操作

作用:控制汇编程序的执行流程

①.选择

作用:根据条件判断,决定是否执行某个指令序列

格式:

.if logical-expression     
commands    
[ .else     
commands]     
.endif 

.if logical-expression     
    commands    
.elseif logical-expression     
    commands    
[.elseif logical-expression     
commands]         
.endif

②.宏

作用:定义宏代码段,.macro: 定义一段宏代码, .macro表示代码的开始, .endm表示代码的结束, .exitm跳出宏

4、其他伪操作

①伪指令.align

作用:通过填充字节的方式,使当前位置满足一定的对齐方式

格式: .align abs-expr

示例 .align 2 意为后面的部分以4(2^2)字节对齐。.align 4 @ 以16(2^4)字节对齐

.balignl 16, 0xdeadbeef @ 对齐 + 填充

b表示位填充;align表示要对齐;l表示long,以4字节为单位填充;16表示16字节对齐;0xdeadbeef是用来填充的原料。

②伪指令.section

作用:定义一个段,用于连接器连接时识别。

格式: .section sectioname

③伪指令.data

作用:定义数据段,

格式: .data subsectionname

④伪指令.text

作用:定义指令段或叫代码段

格式: .text subsectioname

⑤伪指令.include

作用:包含头文件

格式: .include “filename”

⑥伪指令.arm

作用:定义一下代码使用arm指令集编译,功能等价于.code32

格式: .arm

⑦伪指令.thumb

作用:定义一下代码使用thumb指令集编译,功能等价于.code16

格式: .thumb

⑧伪指令.weak  

作用:声明一个弱符号,即可重新声明覆盖弱声明。

格式: .weak symbol

⑨伪指令.end  

作用:汇编结束,不在处理此条指令后的汇编代码

格式: .end

⑩伪指令.extern  

作用:声明一个外部符号

格式: .extern symbol

⑪.type

作用:用于定义符号类型

格式:.type symbol whichtype

示例:.type .type Reset_Handler, %function 定义Reset_Handler为函数。具体用途不是很清楚,查了很多资料都没解释 。

 

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值