ARM伪指令

全局标号定义伪操作.global.globl

.global用于声明一个ARM程序中的全局变量,使得被声明的符号对连接器(ld)可见,变为整个工程都可使用的全局变量。两个拼写.globl和.global都可以,两种形式是为了兼容其他汇编器。以上两条伪操作用于定义全局变量,因此在整个程序范围内变量名必须唯一。

指令的语法格式 .global symbol .globl symbol

.global _start ;定义一个全局的符号_start

.local symbol  ;声明一个ARM程序中的局部的变量,这样它对外部就是不可见的,作用域在本个文件内。

.local loop

.set symbol, expr  ;用于给一个全局变量或局部变量赋值

.set start, 0x40

.set start, 0x50

mov r1, #start ;最后的r1的值为0x50,由此可知.set类似于C语言的赋值语句。

Symbol .equ expr ;宏替换伪操作.equ用于给一个全局变量或局部变量赋值。

start .equ, 0x40

start .equ, 0x50

mov r1, #start;;最后的r1的值为0x50,由此可知.equ类似于C语言的宏定义。

label: .byte expr 在存储器中分配一个字节的内存单元,label:程序标号。expr -128~255的数字,也可以是字符。

a: byte #1

label: .short expr 分配2字节的内存单元  -23768~65536

a: short 0x1234

label: .word expr 4字节 -2^16~2^32

a: .word 0x12345678

.long功能等价于.word

.quad 8字节 -2^32~2^64

a: quad 0x123456789abcdefg

label: .float expr

a: .float 1.11

label: .space size, expr;分配一片连续的存储区域

a: .space 8, 0x1 

.skip功能等价于.space

label: .string "str";定义一个字符串

rept count;重复执行后面的指令

...

.end   ;

cout:程序后面的指令要执行的次数

.rept 3

mov R0, #1

.endr;等价于

mov R0, #1

mov R0, #1

mov R0, #1

.if logical-expression

...

.else

... 

.endif

.macro macroname macargs...

;code

.endm

.macro sum from=0, to=2

.long \from

.if \to-\from

sum (\from+1), \to

.endif

.endm;等价于

.long 0

.long 1

.long 2

 

 

 

你可能感兴趣的:(ARM)