1、伪指令是什么

ARM伪指令不是ARM指令集中的指令,只是为了编程方便人们定义了伪指令。

在汇编时这些指令将会被等效的ARM指令或arm指令的组合代替。

编程时可以像其他ARM指令一样使用伪指令,区别是伪指令不像指令一样有对应的机器编码。

我今天主要给大家介绍4条这样的伪指令。其实还有与这四条伪指令形式类似但是作用完全不同的伪指令,他们主要是指导汇编器完成汇编工作,例如定义数据、分配储存区、程序初始化。我们这四条伪指令的作用仅仅是用一条指令代替多条指令,方便编程

在给大家演示之前,我想给介绍一下我碰见的一个关于PC的问题

2、PC

程序计数器存放下一条要执行的指令的地址。

ARM(ARM7) 采用三级流水线结构,取指、译码、执行,PC始终指向你要取的指令的地址,而不是执行完一条指令后指向下一条指令的地址。

汇编器把R15(PC)这个显示值进行了补偿,使“PC指向下一条要执行的指令的地址”这个逻辑看起来合理。

3、ADR/ADRL

指令书写格式:ADR(ADRL)[<cond>] <Rd>,<label>

将地址载入寄存器中。基于PC相对偏移的地址读取到寄存器中。通常会被一条ADD或SUB指令替代实现相同功能。

ADR是小范围地址读取伪指令当地址值是字节对齐时,取值范围为-255到255,当地址值是字对齐时,取值范围-1020到1020

ADRL是中等范围地址读取伪指令当地址值是字节对齐时,取值范围为-64KB到64KB,当地址值是字对齐时,取值范围为-256KB到256KB。ADRL伪指令比ADR伪指令可以读取更大范围的地址,这是因为在编译阶段,ADRL伪指令被编译器换成两条指令。如果汇编器不能再两条指令内完成操作,将报告错误,终止编译。

ADRL 始终汇编为两个 32 位指令。 即使使用单个指令就可完成地址访问,也会生成多余的第二个地址。

4、LDR

指令书写格式:LDR[<cond>][<.W>]<Rd>,<=expr>/<=label_expr>

由于编码格式的限制,ARM在使用MOV指令时所能操作的立即数值范围是有限的。为了编程方便可以使用LDR伪指令加载数值。

如果表达式expr的值能用一个MOV或MVN指令进行加载,那么汇编器就使用MOV或MVN指令。

如果立即数由于超出了 MOV 和 MVN 指令的范围,或者使用了label_expr,汇编器就把这个常量放在文字池里然后使用一条PC相对形式的LDR指令从文字池里读取这个常量。

其一般指令LDR和宏指令LDR格式相似。处理为宏指令的情况中,指令是否有“=”为区别的关键

5、MOV32

指令书写格式:MOV32 [<cond>] <Rd>,<expr>/<label_expr>

此指令只可用于ARMv6T2 及更高版本中的ARM和Thumb状态

将数值或地址装载到寄存器中,类似LDR

编译器会将MOV32翻译为movw和movt两条指令。

MOVW会把16位立即数放到寄存器的底16位,并将高16位清0。

MOVT 会把16 位立即数放到寄存器的高16位,同时低16位不受影响。

6、UND

UND [<cond>][<.W>] <#expr>

生成无体系结构定义的指令。此伪指令生成的编码将反汇编为 DCI

执行未定义指令会引发未定义的异常。程序员可以利用指令异常完成相应的异常处理

最新文章

  1. redis中的跳跃表
  2. android:digits属性
  3. 使用XtraReport的CalculatedFiled(计算字段)实现RDLC报表中表达式
  4. yii2.0自动登录功能的实现方法
  5. equals
  6. JSP/Servlet基础语法
  7. maven的安装,maven库配置和Eclipse插件的安装
  8. golang 阻塞的坑
  9. android 开发代码被黑客破译有那么容易吗?
  10. Java二叉排序树(转)
  11. NOI前的考试日志
  12. JS与CSS那些特别小的知识点区别
  13. acure使用
  14. K8S 部署 ingress-nginx (二) 部署后端为 tomcat
  15. AI 循环神经网络
  16. Hibernate的主配置文件hibernate.cfg.xml
  17. hdoj:2024
  18. VS2015 工具箱 保存位置
  19. Java语法基础学习DaySeven
  20. http协议以及http1.0和http1.1的区别

热门文章

  1. react修改app.js添加中文内容后中文部分乱码解决
  2. STO(Security Token Offering)证券型通证、代币发行介绍
  3. document.createDocumentFragment 以及创建节点速度比较
  4. WEB前端移动开发初始化
  5. POJ 3662 Telephone Lines (二分 + 最短路)
  6. element ui里dialog关闭后清除验证条件
  7. 【移动端】js禁止页面滑动与允许滑动
  8. java.lang.Object.wait(Native Method)
  9. django 表单常用field
  10. opencv学习之路(14)、形态学之膨胀腐蚀