常⽤汇编伪指令
汇编语⾔中,指令语句在源程序汇编时会产⽣可供计算机执⾏的指令代码,即⽬标代码。汇编程序除指令语句外,还需要提供⼀些指令,⽤于辅助源程序的汇编。⽐如指定程序或数据存放的起始地址,为数据分配⼀段连续的内存单元等。这些指令在汇编时并不⽣成⽬标代码,不影响程序执⾏,因此称之为伪指令。本⽂简单总结了常⽤的伪指令,如下。
1、EQU(Equate)
⼀般格式为: 标号: EQU 操作数
指令功能为将操作数赋予标号,两边的值完全相等。使⽤EQU伪指令给⼀个标号赋值后,此标号在整个源⽂件中值固定。
AREA: EQU 1000H ;将标号AREA赋值为1000H
2、ORG(Origin)
⼀般格式为: ORG xxxxH(绝对地址或标号)
XxxxH决定此语句后第⼀条指令(或数据)的地址。该段源程序或数据被连续存放在此后的地址内,直到下⼀条ORG指令为⽌。
ORG 8000H ;此后⽬标代码存储在存储器中以0x8000h开始的地址空间中。
ADD R1, #1
MOV R2, #2
3、DB(Define Byte)
⼀般格式为: 标号: DB 字节常数或字符或表达式
标号字段可有可⽆,字节常数或字符是指⼀个字节数据。此伪指令的功能是把字节常数或字节串存放⾄内存连续的地址空间中。
ORG 8000H
DATA1: DB 43H,09H,08H
DATA2: DB 07H
伪指令DB指定了43H,09H,08H 顺序存放在8000H开始的存储单元中,DATA2中的07H紧挨着DATA1的地址空间存放,即07H存放在8003H单元中。
注:DW(Define Word)指令定义与DB类似,区别在于DW定义⼀个字,DB定义⼀个字节。
4、END
⼀般格式为: 标号: END 地址或标号
地址或标号可以忽略。此伪指令⽤于指⽰汇编语⾔程序段结束。因此⼀个源程序中仅有⼀个END,且⼀般放在程序最后。若END放在程序中间,则END后⾯的语句将不再被汇编。
5、AREA
⼀般格式为: 标号 sectionname{,attr}{,attr}……
Sectionname指定节的名称。节是不可分的已命名独⽴代码模块或数据模块,由连接器进⾏处理。
Attr则是⼀个或多个⽤逗号分隔的节的属性。属性有多种,⽐如:
ALIGN=expression。默认条件下节以四字节边界对齐。Expression取值范围为0-31.表征的对齐边界是
2的expression平⽅。
CODE 包含机器指令。默认值为READONLY
DATA 包含数据但不包含指令。默认值为READWRITE
READONLY 指⽰此节只读。代码区域默认值。
READWRITE 指⽰此节可读可写。数据区域默认值。
AREA Example, DATA, READWRITE
;data
以上代码定义了名为Example的可读写数据节。
6、PUBLIC
⼀般格式为: PUBLIC 标识符1,标识符2……
在开发较为复杂的应⽤程序时,其执⾏⽂件的⽣成⼀般由多个⽬标⽂件链接⽽成。多个⽬标⽂件之间
⼀般存在数据交互,汇编语⾔中通过伪指令PUBLIC及EXTRN来解决模块之间的联系。PUBLIC⽤来说明当前模块中可被其他模块所引⽤的公共标识符。
PUBLIC _STARTUP
声明标识符_STARTUP可被其他模块所引⽤。
7、EXTRN或EXTERN
⼀般格式为: EXTRN 标识符1:类型1,标识符2:类型2…….
表明标识符1、2是外部标识符,其已经在其他模块中被定义为类型1、类型2等。在⼀个模块中,可⽤多条EXTRN来说明本模块中所引⽤的外部标识符。实质为汇编器提供⼀个并未在当前汇编⽂件中定义的名称。
注:EXTRN所声明的标识符必须在其定义的模块中被PUBLIC声明为公共标识符,且声明的标识符类型需与该标识符定义类型⼀致。
类似:EXPORT或GLOBAL
声明⼀个符号,链接器可以使⽤此符号解析不同对象和库⽂件中的符号引⽤。即,可使其他⽂件中的代码能够访问当前⽂件中的符号。
8、PROC
⼀般格式为: <;过程名> PROC [类型]
此指令为过程定义指令。过程即⼦程序,⼀个过程可以被其他程序调⽤(CALL指令)。
<;过程名> PROC [类型]
…….
…….
ENDP
注:PROC和ENDP必须成对出现。
9、SPACE
⼀般格式为: 标号 SPACE 表达式
汇编语言结束指令此指令⽤于分配⼀⽚连续的存储区域并初始化为0。表达式为要分配的字节数。SPACE可⽤“%”来代替。
DataSpace SPACE 1000 ;分配连续1000个字节的存储单元DataSpace并初始化为0。
10、ENTRY
此指令⽤于声明程序的⼊⼝点。⼀个程序⾄少有⼀个⼊⼝点。
AREA TEST, CODE, READONLY
ENTRY ;程序⼊⼝点。
11、PRESERVE8
⼀般格式为: PRESERVE8 {bool}
PRESERVE8指令指定当前⽂件需保持堆栈⼋字节对齐⽅式。其通过设置PRES8编译属性通知连接器。
PRESERVE8 ;保持代码堆栈⼋字节对齐。
PRESERVE8 {FALSE} ;不保持代码堆栈⼋字节对齐。
12、CODE16、CODE32
⼀般格式为: CODE16(或CODE32)
CODE16通知编译器,其后的指令序列为16位的Thumb指令。
CODE32通知编译器,其后的指令序列为32位的ARM指令。
在实⽤ARM指令和Thumb指令混合编程的代码⾥,可使⽤这两天指令进⾏切换。注:指令只能通知编译器其后的指令类型,并不能对处理器进⾏状态的切换。
12、IMPORT
此指令类似于EXTERN。⽤于通知编译器即将使⽤的标号在其他源⽂件中定义。⽆论当前源⽂件是否引⽤该标号,该标号均会被加⼊到当前源⽂件的符号表中。
⼀般格式为: IMPORT 标号 {[WEAK]}
标号在程序中区分⼤⼩写,[WEAK]表⽰当所有源⽂件中均不到此标号时,编译器也不会显⽰错误信
息。
AREA INIT, CODE, READONLY
IMPORT Main ;通知编译器当前⽂件要引⽤标号Main,但其定义在其他源⽂件中。
END
Hope you enjoy!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论