logo资料库

ARMV7 NEON汇编指令详解中文版.pdf

第1页 / 共466页
第2页 / 共466页
第3页 / 共466页
第4页 / 共466页
第5页 / 共466页
第6页 / 共466页
第7页 / 共466页
第8页 / 共466页
资料共466页,剩余部分请下载后查看
RealView® 编译工具 3.1 版 汇编程序指南
目录
前言
关于本手册
适用对象
使用本手册
更多参考出版物
反馈
RealView 编译工具的反馈信息
关于本手册的反馈
简介
1.1 关于 RealView 编译工具汇编程序
1.1.1 ARM 汇编语言
1.1.2 无线 MMX 技术指令
1.1.3 NEON 技术
1.1.4 使用示例
编写 ARM 汇编语言
2.1 简介
2.1.1 代码示例
2.2 ARM 体系结构概述
2.2.1 体系机构的版本
2.2.2 ARM、Thumb、Thumb-2 和 Thumb-2EE 指令集
2.2.3 ARM、Thumb 和 ThumbEE 状态
2.2.4 处理器模式
2.2.5 寄存器
2.2.6 指令集概述
2.2.7 指令功能
2.3 汇编语言模块的结构
2.3.1 汇编语言源文件的编排
2.3.2 ARM 汇编语言模块的示例
2.3.3 调用子例程
2.4 条件执行
2.4.1 ALU 状态标记
2.4.2 条件执行
2.4.3 使用条件执行
2.4.4 使用条件执行的示例
2.4.5 Q 标记
2.5 将常数加载到寄存器
2.5.1 用 MOV 和 MVN 直接加载
2.5.2 用 MOV32 加载
2.5.3 用 LDR Rd, =const 加载
2.5.4 加载浮点常数
2.6 将地址加载到寄存器中
2.6.1 用 ADR 和 ADRL 直接加载
2.6.2 用 LDR Rd, =label 加载地址
2.7 加载和存储多个寄存器指令
2.7.1 加载和存储可在 ARM 和 Thumb 中使用的多个指令
2.7.2 用 LDM 和 STM 执行堆栈
2.7.3 用 LDM 和 STM 执行块复制
2.8 使用宏
2.8.1 测试并跳转宏示例
2.8.2 无符号整数除法宏示例
2.9 添加符号版本
2.10 使用框架指令
2.11 汇编语言变更
汇编程序参考
3.1 命令语法
3.1.1 获得可用选项列表
3.1.2 使用环境变量指定命令行选项
3.1.3 AAPCS
3.1.4 浮点模型
3.1.5 CPU 名称
3.1.6 FPU 名称
3.1.7 内存访问属性
3.1.8 预先执行 SET 指令
3.1.9 分割长 LDM 和 STM
3.1.10 列表输出到文件中
3.1.11 工程模板选项
3.1.12 控制诊断消息的输出
3.1.13 控制异常表生成
3.2 源语句行格式
3.3 预定义的寄存器和协处理器名称
3.3.1 预先声明的寄存器名称
3.3.2 预先声明的扩展寄存器名称
3.3.3 预先声明的 XScale 寄存器名称
3.3.4 预先声明的协处理器名称
3.4 内置变量和常数
3.5 符号
3.5.1 符号命名规则
3.5.2 变量
3.5.3 数字常数
3.5.4 汇编时的变量替换
3.5.5 标签
3.5.6 局部标签
3.6 表达式、文本和运算符
3.6.1 字符串表达式
3.6.2 字符串文本
3.6.3 数字表达式
3.6.4 数字文本
3.6.5 浮点文本
3.6.6 相对寄存器和程序相对的表达式
3.6.7 逻辑表达式
3.6.8 逻辑文本
3.6.9 运算符优先级
3.6.10 一元运算符
3.6.11 二元运算符
3.7 诊断消息
3.7.1 互锁
3.7.2 IT 块生成
3.7.3 Thumb 跳转目标对齐
3.8 使用 C 预处理程序
ARM 和 Thumb 指令
4.1 指令汇总
4.2 Thumb 中的指令宽度选择
4.2.1 指令宽度说明符:.W 和 .N
4.2.2 同一指令的不同行为
4.2.3 诊断警告
4.3 内存访问指令
4.3.1 地址对齐
4.3.2 LDR 和 STR(直接偏移量)
4.3.3 LDR 和 STR(寄存器偏移)
4.3.4 LDR 和 STR(用户模式)
4.3.5 LDR(相对 pc)
4.3.6 ADR
4.3.7 PLD 和 PLI
4.3.8 LDM 和 STM
4.3.9 PUSH 和 POP
4.3.10 RFE
4.3.11 SRS
4.3.12 LDREX 和 STREX
4.3.13 CLREX
4.3.14 SWP 和 SWPB
4.4 通用数据处理指令
4.4.1 灵活的第二操作数
4.4.2 ADD、SUB、RSB、ADC、SBC 和 RSC
4.4.3 SUBS pc, LR
4.4.4 AND、ORR、EOR、BIC 和 ORN
4.4.5 CLZ
4.4.6 CMP 和 CMN
4.4.7 MOV 和 MVN
4.4.8 MOVT
4.4.9 TST 和 TEQ
4.4.10 SEL
4.4.11 REV、REV16、REVSH 和 RBIT
4.4.12 ASR、LSL、LSR、ROR 和 RRX
4.4.13 IT
4.4.14 SDIV 和 UDIV
4.5 乘法指令
4.5.1 MUL、MLA 和 MLS
4.5.2 UMULL、UMLAL、SMULL 和 SMLAL
4.5.3 SMULxy 和 SMLAxy
4.5.4 SMULWy 和 SMLAWy
4.5.5 SMLALxy
4.5.6 SMUAD{X} 和 SMUSD{X}
4.5.7 SMMUL、SMMLA 和 SMMLS
4.5.8 SMLAD 和 SMLSD
4.5.9 SMLALD 和 SMLSLD
4.5.10 UMAAL
4.5.11 MIA、MIAPH 和 MIAxy
4.6 饱和指令
4.6.1 饱和算法
4.6.2 QADD、QSUB、QDADD 和 QDSUB
4.6.3 SSAT 和 USAT
4.7 并行指令
4.7.1 并行加法和减法
4.7.2 USAD8 和 USADA8
4.7.3 SSAT16 和 USAT16
4.8 组合和分离指令
4.8.1 BFC 和 BFI
4.8.2 SBFX 和 UBFX
4.8.3 SXT、SXTA、UXT 和 UXTA
4.8.4 PKHBT 和 PKHTB
4.9 跳转指令
4.9.1 B、BL、BX、BLX 和 BXJ
4.9.2 CBZ 和 CBNZ
4.9.3 TBB 和 TBH
4.10 协处理器指令
4.10.1 CDP 和 CDP2
4.10.2 MCR、MCR2、MCRR 和 MCRR2
4.10.3 MRC、MRC2、MRRC 和 MRRC2
4.10.4 LDC、LDC2、STC 和 STC2
4.11 其他指令
4.11.1 BKPT
4.11.2 SVC
4.11.3 MRS
4.11.4 MSR
4.11.5 CPS
4.11.6 SMC
4.11.7 SETEND
4.11.8 NOP、SEV、WFE、WFI 和 YIELD
4.11.9 DBG、DMB、DSB 和 ISB
4.11.10 MAR 和 MRA
4.12 ThumbEE 指令
4.12.1 ENTERX 和 LEAVEX
4.12.2 CHKA
4.12.3 HB、HBL、HBLP 和 HBP
4.13 伪指令
4.13.1 ADRL 伪指令
4.13.2 MOV32 伪指令
4.13.3 LDR 伪指令
4.13.4 UND 伪指令
NEON 和 VFP 编程
5.1 扩展寄存器组
5.1.1 寄存器组的 NEON 视图
5.1.2 扩展寄存器组的 VFPv3 视图
5.2 条件代码
5.3 一般信息
5.3.1 浮点异常
5.3.2 体系机构的版本
5.3.3 NEON 和 VFP 数据类型
5.3.4 NEON 中的正常指令、长指令、宽指令、窄指令和饱和指令
5.3.5 NEON 标量
5.3.6 扩展记号
5.3.7 {0,1} 上的多项式算法
5.3.8 VFP 协处理器
5.3.9 VFP 寄存器
5.4 NEON 和 VFP 共享的指令
5.4.1 VLDR 和 VSTR
5.4.2 VLDM、VSTM、VPOP 和 VPUSH
5.4.3 VMOV(在两个 ARM 寄存器和一个扩展寄存器之间)
5.4.4 VMOV(在一个 ARM 寄存器和一个 NEON 标量之间)
5.4.5 VMOV(在一个 ARM 寄存器和一个单精度 VFP 之间)
5.4.6 VMRS 和 VMSR
5.5 NEON 逻辑运算和比较运算
5.5.1 VAND、VBIC、VEOR、VORN 和 VORR(寄存器)
5.5.2 VBIC 和 VORR(立即数)
5.5.3 VBIF、VBIT 和 VBSL
5.5.4 VMOV、VMVN(寄存器)
5.5.5 VACGE 和 VACGT
5.5.6 VCEQ、VCGE、VCGT、VCLE 和 VCLT
5.5.7 VTST
5.6 NEON 通用数据处理指令
5.6.1 VCVT
5.6.2 VDUP
5.6.3 VEXT
5.6.4 VMOV、VMVN(立即数)
5.6.5 VMOVL、V{Q}MOVN、VQMOVUN
5.6.6 VREV
5.6.7 VSWP
5.6.8 VTBL、VTBX
5.6.9 VTRN
5.6.10 VUZP、VZIP
5.7 NEON 移位指令
5.7.1 VSHL、VQSHL、VQSHLU 和 VSHLL(按立即数)
5.7.2 V{Q}{R}SHL(按有符号变量)
5.7.3 V{R}SHR{N}、V{R}SRA(按立即数)
5.7.4 VQ{R}SHR{U}N(按立即数)
5.7.5 VSLI 和 VSRI
5.8 NEON 通用算术指令
5.8.1 VABA{L} 和 VABD{L}
5.8.2 V{Q}ABS 和 V{Q}NEG
5.8.3 V{Q}ADD、VADDL、VADDW、V{Q}SUB、VSUBL 和 VSUBW
5.8.4 V{R}ADDHN 和 V{R}SUBHN
5.8.5 V{R}HADD 和 VHSUB
5.8.6 VPADD{L}、VPADAL
5.8.7 VMAX、VMIN、VPMAX 和 VPMIN
5.8.8 VCLS、VCLZ 和 VCNT
5.8.9 VRECPE 和 VRSQRTE
5.8.10 VRECPS 和 VRSQRTS
5.9 NEON 乘法指令
5.9.1 VMUL{L}、VMLA{L} 和 VMLS{L}
5.9.2 VMUL{L}、VMLA{L} 和 VMLS{L}(按标量)
5.9.3 VQDMULL、VQDMLAL 和 VQDMLSL(按向量或标量)
5.9.4 VQ{R}DMULH(按向量或标量)
5.10 NEON 加载/存储元素和结构指令
5.10.1 交叉存取
5.10.2 加载/存储元素和结构指令中的对齐限制
5.10.3 VLDn 和 VSTn(单个 n 元素结构到一条向量线)
5.10.4 VLDn(单个 n 元素结构到所有向量线)
5.10.5 VLDn 和 VSTn(多个 n 元素结构)
5.11 NEON 和 VFP 伪指令
5.11.1 VLDR 伪指令
5.11.2 VMOV2
5.11.3 VAND 和 VORN(立即数)
5.11.4 VACLE 和 VACLT
5.11.5 VCLE 和 VCLT
5.12 NEON 和 VFP 系统寄存器
5.12.1 FPSCR,浮点状态和控制寄存器
5.12.2 FPEXC,浮点异常寄存器
5.12.3 FPSID,浮点系统标识寄存器
5.12.4 修改 NEON 和 VFP 系统寄存器的个别位
5.13 清零模式
5.13.1 何时使用清零模式
5.13.2 使用清零模式的影响
5.13.3 不受清零模式影响的运算。
5.14 VFP 指令
5.14.1 VABS、VNEG 和 VSQRT
5.14.2 VADD、VSUB 和 VDIV
5.14.3 VMUL、VMLA、VMLS、VNMUL、VNMLA 和 VNMLS
5.14.4 VCMP
5.14.5 VCVT(在单精度数和双精度数之间)
5.14.6 VCVT(在浮点数和整数之间)
5.14.7 VCVT(在浮点数和定点数之间)
5.14.8 VMOV
5.15 VFP 向量模式
5.15.1 寄存器组
5.15.2 向量
5.15.3 VFP 向量和标量运算
5.15.4 VFP 指令和向量记号
无线 MMX 技术指令
6.1 简介
6.2 ARM 对无线 MMX 技术的支持
6.2.1 寄存器
6.2.2 WRN 和 WCN 指令
6.2.3 Frame 指令
6.2.4 无线 MMX 加载和存储指令
6.2.5 无线 MMX 技术和 XScale 指令
6.3 无线 MMX 指令
6.3.1 伪指令
指令参考
7.1 按字母顺序排列的指令表
7.2 符号定义指令
7.2.1 GBLA、GBLL 和 GBLS
7.2.2 LCLA、LCLL 和 LCLS
7.2.3 SETA、SETL 和 SETS
7.2.4 RELOC
7.2.5 RN
7.2.6 RLIST
7.2.7 CN
7.2.8 CP
7.2.9 QN、DN 和 SN
7.3 数据定义指令
7.3.1 LTORG
7.3.2 MAP
7.3.3 FIELD
7.3.4 SPACE
7.3.5 DCB
7.3.6 DCD 和 DCDU
7.3.7 DCDO
7.3.8 DCFD 和 DCFDU
7.3.9 DCFS 和 DCFSU
7.3.10 DCI
7.3.11 DCQ 和 DCQU
7.3.12 DCW 和 DCWU
7.3.13 COMMON
7.3.14 DATA
7.4 汇编控制指令
7.4.1 嵌套指令
7.4.2 MACRO 和 MEND
7.4.3 MEXIT
7.4.4 IF、ELSE、ENDIF 和 ELIF
7.4.5 WHILE 和 WEND
7.5 Frame 指令
7.5.1 FRAME ADDRESS
7.5.2 FRAME POP
7.5.3 FRAME PUSH
7.5.4 FRAME REGISTER
7.5.5 FRAME RESTORE
7.5.6 FRAME RETURN ADDRESS
7.5.7 FRAME SAVE
7.5.8 FRAME STATE REMEMBER
7.5.9 FRAME STATE RESTORE
7.5.10 FRAME UNWIND ON
7.5.11 FRAME UNWIND OFF
7.5.12 FUNCTION 或 PROC
7.5.13 ENDFUNC 或 ENDP
7.6 报告指令
7.6.1 ASSERT
7.6.2 INFO
7.6.3 OPT
7.6.4 TTL 和 SUBT
7.7 指令集和语法选择指令
7.7.1 ARM、THUMB、THUMBX、CODE16 和 CODE32
7.8 其他指令
7.8.1 ALIGN
7.8.2 AREA
7.8.3 END
7.8.4 ENTRY
7.8.5 EQU
7.8.6 EXPORT 或 GLOBAL
7.8.7 EXPORTAS
7.8.8 GET 或 INCLUDE
7.8.9 IMPORT 和 EXTERN
7.8.10 INCBIN
7.8.11 KEEP
7.8.12 NOFP
7.8.13 REQUIRE
7.8.14 REQUIRE8 和 PRESERVE8
7.8.15 ROUT
RealView® 编译工具 3.1 版 汇编程序指南 版权所有 © 2002-2007 ARM Limited。 保留所有权利。 ARM DUI 00204HC
RealView 编译工具 汇编程序指南 版权所有 © 2002-2007 ARM Limited。 保留所有权利。 版本信息 本手册进行了以下更改。 日期 发行号 A B C D E F G H 2002 年 8 月 2003 年 1 月 2003 年 9 月 2004 年 1 月 2004 年 12 月 2005 年 5 月 2006 年 3 月 2007 年 3 月 所有权声明 更改历史记录 保密性 非保密 非保密 非保密 非保密 非保密 非保密 非保密 非保密 更改 1.2 版 2.0 版 RVDS v2.0 的 2.0.1 版 RVDS v2.1 的 2.1 版 RVDS v2.2 的 2.2 版 RVDS v2.2 SP1 的 2.2 版 RVDS v3.0 的 3.0 版 RVDS v3.1 的 3.1 版。 带有 ® 或 ™ 标记的词语和徽标是 ARM 公司的注册商标或商标。 此处提及的其他品牌和名称可能是 其各自所有者的商标。 除非事先得到版权所有人的书面许可,否则不得以任何形式修改或复制本文档包含的部分或全部信 息以及产品说明。 本文档描述的产品还将不断发展和完善。 ARM 公司将如实提供本文档所述产品的所有特性及其使 用方法。 但是,所有暗示或明示的担保,包括但不限于对特定用途适销性或适用性的担保,均不包括 在内。 本文档的目的仅在于帮助读者使用产品。 对由于使用本文档任何信息出现的遗漏、损坏或错误使用 产品造成的任何损失,ARM 公司概不负责。 使用 ARM 一词时,它表示“ARM 或其任何相应的子公司”。 保密状态 本文档的内容是非保密的。 根据 ARM 与 ARM 将本文档交予的参与方的协议条款,使用、复制和公 开本文档内容的权利可能会受到许可限制的制约。 产品状态 本文档的信息是开发的产品的最新信息。 网址 http://www.arm.com ii 版权所有 © 2002-2007 ARM Limited。 保留所有权利。 ARM DUI 00204HC
目录 RealView 编译工具 汇编程序指南 第 1 章 第 2 章 前言 简介 1.1 关于本手册 ................................................................................................... viii 反馈 ................................................................................................................ xi 关于 RealView 编译工具汇编程序 ............................................................... 1-2 编写 ARM 汇编语言 简介 ............................................................................................................. 2-2 2.1 ARM 体系结构概述 ..................................................................................... 2-3 2.2 汇编语言模块的结构 .................................................................................. 2-11 2.3 条件执行 .................................................................................................... 2-17 2.4 将常数加载到寄存器 .................................................................................. 2-25 2.5 将地址加载到寄存器中 .............................................................................. 2-33 2.6 加载和存储多个寄存器指令 ....................................................................... 2-39 2.7 使用宏 ....................................................................................................... 2-45 2.8 2.9 添加符号版本 ............................................................................................ 2-49 2.10 使用框架指令 ............................................................................................ 2-50 2.11 汇编语言变更 ............................................................................................ 2-51 ARM DUI 00204HC 版权所有 © 2002-2007 ARM Limited。 保留所有权利。 iii
第 3 章 第 4 章 第 5 章 汇编程序参考 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 命令语法 ..................................................................................................... 3-2 源语句行格式 ............................................................................................ 3-17 预定义的寄存器和协处理器名称 ............................................................... 3-18 内置变量和常数 ........................................................................................ 3-20 符号 .......................................................................................................... 3-22 表达式、文本和运算符 .............................................................................. 3-28 诊断消息 ................................................................................................... 3-41 使用 C 预处理程序 .................................................................................... 3-43 ARM 和 Thumb 指令 指令汇总 ..................................................................................................... 4-2 4.1 Thumb 中的指令宽度选择 ........................................................................... 4-9 4.2 内存访问指令 ............................................................................................ 4-11 4.3 通用数据处理指令 ..................................................................................... 4-40 4.4 乘法指令 ................................................................................................... 4-72 4.5 饱和指令 ................................................................................................... 4-93 4.6 并行指令 ................................................................................................... 4-98 4.7 组合和分离指令 ...................................................................................... 4-106 4.8 4.9 跳转指令 ................................................................................................. 4-114 4.10 协处理器指令 .......................................................................................... 4-120 4.11 其他指令 ................................................................................................. 4-128 4.12 ThumbEE 指令 ....................................................................................... 4-144 4.13 伪指令 ..................................................................................................... 4-148 NEON 和 VFP 编程 扩展寄存器组 .............................................................................................. 5-7 5.1 条件代码 ..................................................................................................... 5-9 5.2 一般信息 ................................................................................................... 5-11 5.3 NEON 和 VFP 共享的指令 ........................................................................ 5-18 5.4 NEON 逻辑运算和比较运算 ...................................................................... 5-25 5.5 NEON 通用数据处理指令 ......................................................................... 5-33 5.6 NEON 移位指令 ........................................................................................ 5-44 5.7 NEON 通用算术指令 ................................................................................. 5-50 5.8 NEON 乘法指令 ........................................................................................ 5-63 5.9 NEON 加载 / 存储元素和结构指令 ............................................................ 5-68 5.10 NEON 和 VFP 伪指令 ............................................................................... 5-76 5.11 5.12 NEON 和 VFP 系统寄存器 ........................................................................ 5-82 5.13 清零模式 ................................................................................................... 5-86 VFP 指令 .................................................................................................. 5-88 5.14 5.15 VFP 向量模式 ........................................................................................... 5-97 第 6 章 无线 MMX 技术指令 6.1 6.2 6.3 简介 ............................................................................................................ 6-2 ARM 对无线 MMX 技术的支持 ................................................................... 6-3 无线 MMX 指令 ........................................................................................... 6-7 iv 版权所有 © 2002-2007 ARM Limited。 保留所有权利。 ARM DUI 00204HC
第 7 章 指令参考 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 按字母顺序排列的指令表 ............................................................................ 7-2 符号定义指令 .............................................................................................. 7-4 数据定义指令 ............................................................................................ 7-17 汇编控制指令 ............................................................................................ 7-31 Frame 指令 ............................................................................................... 7-40 报告指令 .................................................................................................... 7-55 指令集和语法选择指令 .............................................................................. 7-60 其他指令 .................................................................................................... 7-62 ARM DUI 00204HC 版权所有 © 2002-2007 ARM Limited。 保留所有权利。 v
vi 版权所有 © 2002-2007 ARM Limited。 保留所有权利。 ARM DUI 00204HC
前言 本前言介绍 《RealView 编译工具汇编程序指南》。 它包含以下几节: 第viii 页的关于本手册 第xi 页的反馈 ARM DUI 00204HC 版权所有 © 2002-2007 ARM Limited。 保留所有权利。 vii
前言 关于本手册 适用对象 使用本手册 本手册提供有关 RealView® 编译工具 (RVCT) 汇编程序的指导和参考信息。 这包 括 armasm、独立的汇编程序以及 C 和 C++ 编译器中的嵌入式汇编程序。 本手册 介绍汇编程序的命令行选项,可供汇编语言程序员使用的汇编语言助记符、伪指 令、宏和指令。 本手册是为所有使用 RVCT 编写应用程序的开发者编写的。 本手册假定您是一 位有经验的软件开发人员,并且熟悉 RealView 编译工具要点指南中所述的 ARM 开发工具。 本手册由以下章节组成: 第 1 章 简介 本章简要介绍了 RVCT 汇编程序和汇编语言。 第 2 章 编写 ARM 汇编语言 本章提供了可帮助您使用 ARM 汇编程序和汇编语言的指导信息。 第 3 章 汇编程序参考 本章介绍了有关 ARM 汇编程序提供的语法和结构的参考材料。 第 4 章 ARM 和 Thumb 指令 本章介绍了有关 ARM 和 Thumb 指令集的参考材料,涵盖了 Thumb-2 和以前版本的 Thumb 以及 Thumb-2EE。 第 5 章 NEON 和 VFP 编程 本章介绍了有关 ARM NEON™ 技术和 VFP 指令集的参考材料。 本 章还介绍了其他 VFP 特定的汇编语言信息。 第 6 章 无线 MMX 技术指令 本章介绍了有关 ARM 对无线 MMX™ 技术的支持的参考材料。 第 7 章 指令参考 本章介绍了有关可在 ARM 汇编程序 armasm 中使用的汇编程序指令 的参考材料。 viii 版权所有 © 2002-2007 ARM Limited。 保留所有权利。 ARM DUI 00204HC
分享到:
收藏