04 arm thumb thumb2 指令系统4学时4 6 1 常用伪指令_第1页
04 arm thumb thumb2 指令系统4学时4 6 1 常用伪指令_第2页
04 arm thumb thumb2 指令系统4学时4 6 1 常用伪指令_第3页
04 arm thumb thumb2 指令系统4学时4 6 1 常用伪指令_第4页
04 arm thumb thumb2 指令系统4学时4 6 1 常用伪指令_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、4.6汇编语言伪指令除了第四章讨论的与多条指令等效的伪指令外,还包含 下列用于汇编控制:段定义(AREA)数据定义(DB,DW,DD)数据缓冲池定义() 数据表定义数据空间配(SPACE)汇编控制等(IF ELSE ENDIFEND)4.6.1 段定义伪指令格式: AREA 段属性 ,段属性,.;示例:AREAInit, CODE, READONLY用途:定义汇编程序逻辑段,指定段的名称、范围,指明 段的类型属性。段名:字母或下画线 开头的字符串属性含义表属 性 含义备注CODE代码段 默认读/写属性为:readonly DATA数据段 默认读/写属性为:readwrite READONLY

2、只读段READWRITE 可读可写段ALIGN表达式字对齐ELF代码数据段COMMON多个源文件共享段4.6.2 符号定义伪指令要求:符号标号区分大小写符号作用范围必须唯一符号定义不能与指令、伪指令等保留字相同1. 全局变量定义伪指令:GBLA、GBLL、GBLS;示例 :2. 全局变量定义伪指令:LCLA、LCLL、LCLSGBLA(GBLL/GBLS)GBLAint_var;定义数值变量,默认初值0GBLLlogic_var;定义逻辑型变量,默认初值FGBLSstr_var;字符串型变量,默认初值空串4.6.3 变量赋值伪指令:SETA、SETL、SETS 可以对全局和局部变量赋值格式:S

3、ETA;只对编译器有用,不是运行时变量;示例:GBLAint_var;定义数值变量,默认初值0LCLLlogic_var;定义逻辑型变量,默认初值F GBLSstr_var;字符串型变量,默认初值空串int_varSETA0xAA;变量名与标号有相同属性,;编译器为之分配存储地址空间,顶格logic_varSETLTRUEstr_varSETStesting4.6.4 寄存器列表定义伪指令RLIST 格式: RLIST;示例 :Reglist RLIST R1-R5,R8,R10 LDRR0,=0x80001000STMDA R0,Reglist LDMIBR0, Reglist4.6.5 程

4、序标号使用(编译连接前,标号绝对地址未知) 包含两类:数据区地址,目标程序地址示例:LDR R0,=0x80001000; LDR R0,PC,tmpAddrLoop1LDR R1,0xffSTRR1,R0 ADDR0,R0,#4 ADDR1,R1,#1Bloop1 tmpAddr DCW 0x80001000LDR R0,= Table;Table 是一个地址标号,编译器会在代码段;自动定义一个32位地址常量,;常量数值根据空间分配确定loop2LDR R1,0x1STR R1,R0 ADDR0,R0,#4 ADDR1,R1,#1B loop2TableDCW 0x010101014.6.6

5、 定义数据伪指令该类伪指令用来定义存贮空间及其所存数据1. DCB :定义字节,即每个数据是1个8bit字节;2. DCW(DCWU) :定义半字区,即每个数据占半个字(16bit 2个字节);3. DCD(DCDU) :定义字,即每个数据占32bit 4个字节;4. DCFD(DCFSU) :双精度浮点数,8Byte字长;5. DCFS(DCFSU) :单精度浮点数,4Byte字长;6. DCQ(DCQU) :定义双精度长整数,8个字节长;格式: DCB示例:Data1DCB0x80,0x90,0x86,A,b,”abcdefg” Data2DCW 0x1000f000,0x20001000

6、Data3DCFD 0.12345,890.899,5.6089E+67. SPACE(%):为地址标号分配一片连续缓存储冲区,并置0初值;8. LTORG : 用于说明暂存数据区或文字池, 大代码段可以有多个文字池9. MAP():定义结构化数据区(或表)的首地址;格式:LTORG SPACE MAP,base_reg FIELD10. FIELD(#):为给定长度的结构化数据(表等)分配空间;示例:DATA SPACE40;为DATA分配40字节存储区DATA2%40LTORGMAPaddr1 ;addr1内存数据表首地址,未分配真实空间100,R9 ;R9+100内存数据表首地址,未分配

7、真实空间Tab0_A FIELD 0x10 ; tab0_A = R9,#0x100 ;分配0x10字节表项Tab0_A FIELD 0x20 ; tab0_B = R9,#0x110 ;分配0x10字节表项MAP0x100;内存表首地址为0x100 , 相当于x86的ORG伪指令tab1_A FIELD16;A项长度16字节,首址0x100,tab_A=0x100 tab1_B #32; B项长度32字节,首址0x110tab1_C FIELD256; C项长度256字节,首址0x130,tab_C=0x130;FIELD必须与MAP配合使用,起地址才确定定了基地址reg的数据表LDRR9,

8、=tab1_A;未指定基地址reg的数据表,直接引用地址标号LDRR1,R94.6.7 汇编控制伪指令1. IF、ELSE 和 ENDIF,用于选择编译指令if ;例 if (test=TURE)汇编程序段1 else汇编程序段2 endif2. While wend重复编译指令,相当与把程序段copy多次GBLA countercounterSETA 3 while counter10程序段wend4.6.8 其他汇编伪指令1. ALIGN:通过字节插入实现数据字对齐ALIGN expr,偏移量例:AREA Init,code,readonly,ALIGN=3;指示该程序段按23即字节方式对齐2. CODE16/CODE32:定义代码执行状态3. ENTRY程序入口,完整程序可有多个入口点,由连接指定入口4. END: 汇编结束指令,END后面程序无效5. EQU:符号常量定义伪指令EQU伪指令给符号定义一个值, 在程序中,凡是出现该符号的地方,汇编时均用其值代替.;示例:COUNTEQU100;COUNT代替常数100SUMEQU30*25;SUM代替数值表达式STR_ABCEQU“ABC”;;需要注意的是,一个符号一经EQU伪指令赋值后,;在整个程序中,不允许再对同一符号重新赋值。6. E

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论