一.什么是汇编伪指令
-
汇编指令句子
每一条指令句子在源程序汇编时都要发生可供核算机履行的指令代码(即方针代码),所以这种句子又名可履行句子。每一条指令句子表明核算机具有的一个根本才能,如数据传送,两数相加或相减,移位等,而这种才能是在方针程序(指令代码的有序调集)运转时完结的,是依赖于汁算机内的中央处理器(CPU)、存储器、I/O接口等硬件设备来完结的。 -
汇编伪指令句子
伪指令句子是用于指示汇编程序怎么汇编源程序,所以这种句子又名指令句子。例如源程序中的伪指令句子告知汇编程序:该源程序怎么分段,有哪些逻辑段在程序段中哪些是当时段,它们分别由哪个段寄存器指向;界说了哪些数据,存储单元是怎么分配的等等。伪指令句子除界说的详细数据要生成方针代码外,其他均没有对应的方针代码。伪指令句子的这些指令功用是由汇编程序在汇编源程序时,经过履行一段程序来完结的,而不是在运转方针程序时完结的。 -
汇编伪指令的效果
二 .ARM GNU 汇编伪指令简介
(1)abort
.abort 中止汇编
(2)align
.align absexpr1,absexpr2
以某种对齐方法,在未运用的存储区域填充值. 第一个值表明对齐方法,4, 8,16或32. 第二个表达式值表明填充的值.
(3)if…else…endif
.if
.else
.endif: 支撑条件预编译
(4)include
.include “file”: 包括指定的头文件, 能够把一个汇编常量界说放在头文件中
(5)comm
.comm symbol, length:
在bss段请求一段命名空间,该段空间的称号叫symbol, 长度为length. Ld衔接器在衔接
会为它留出空间
(6)data
.data subsection: 阐明接下来的界说归属于subsection数据段
(7)equ
.equ symbol, expression: 把某一个符号(symbol)界说成某一个值(expression).该
指令并不分配空间
(8)global
.global symbol: 界说一个大局符号, 通常是为ld运用
(9)ascii
.ascii “string”: 界说一个字符串并为之分配空间
(10)byte
.byte expressions: 界说一个字节, 并为之分配空间
(11)short
.short expressions: 界说一个短整型, 并为之分配空间
(12)int
.int expressions: 界说一个整型,并为之分配空间
(13)long
.long expressions: 界说一个长整型, 并为之分配空间
(14)word
.word expressions: 界说一个字,并为之分配空间, 4 bytes
(15)macro/endm
.macro: 界说一段宏代码, .macro表明代码的开端, .endm表明代码的完毕, .exitm
跳出宏, 示例如下:
.macro SHIFTLEFT a, b
.if /b < 0
mov /a, /a, ASR #-/b
.exitm
.endif
mov /a, /a, LSL #/b
.endm
(16)req
name .req register name: 为寄存器界说一个别号
(17)code
.code [16|32]: 指定指令代码发生的长度, 16表明Thumb指令, 32表明ARM指令
(18)ltorg
.ltorg: 表明当时往下的界说在归于当时段,并为之分配空间
注:PC寄存器长搬运
三.ARM GNU专有符号
(1)@ 表明注释从当时方位到行尾的字符.
(2)# 注释掉一整行.
(3); 新行分隔符.
四. 操作码
(1)NOP: nop 空操作, 相当于MOV r0, r0
(2)LDR: ldr
(3)ADR: adr