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

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

ARM伪指令的更多相关文章

  1. ARM伪指令,王明学learn

    ARM伪指令 在ARM汇编语言程序中里,有一些特殊指令助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作.伪指令在元程序中的作用是为完成汇编 ...

  2. ARM汇编初探---汇编代码中都有哪几类指令---ARM伪指令介绍

    要学习一个东西首先要把概念搞清楚,以下仅仅是自己的一些关于汇编的理解. 可运行文件里的01码是机器码,机器码不等于汇编码,尽管机器码能够非常easy翻译成汇编码. 汇编码中包括非常多汇编指令.伪指令和 ...

  3. ARM伪指令与伪操作

    一.伪指令 ARM伪指令有四个,分别是LDR.ADR.ADRL和NOP,下边对其分别介绍. 1.1 LDR LDR 伪指令用于加载 32 位的立即数或一个地址值到指定寄存器 .形式如  LDR{con ...

  4. [国嵌笔记][026][ARM伪指令]

    ARM机器码 1.汇编程序通过汇编器变成机器码,然后才能在ARM处理器上运行 2.ARM机器码是一个32位的数,被分成了多个段,每个段都有各自的含义 3.格式: cond:表示条件(4位) I:表示源 ...

  5. ARM伪指令和协处理器访问指令

    伪指令本身没有对应的机器码 .global声明全局符号,点事GUN汇编的特点 .data定义数据段 .equ DA #0x89 定义宏 .align 4 4字节对齐 mov 指令里的立即数只能是8位的 ...

  6. ARM学习笔记9——ARM汇编汇编语言中的伪指令

    ARN汇编器支持ARM伪指令,这些伪指令在汇编阶段被翻译成ARM或Thumb指令.ARM伪指令包含ADR.ADRL.MOV32和LDR.一.ADR伪指令 1.作用 ADR是小范围地址读取伪指令,基于P ...

  7. 【嵌入式开发】 ARM 汇编 (指令分类 | 伪指令 | 协处理器访问指令)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42408137 转载请著名出处 本博客相关文档下载 :  -- AR ...

  8. ARM指令教程

    ARM指令教程 ARM汇编程序特点: l         所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理 ...

  9. ARM指令集(下)

    A.2.5   ARM 协处理器指令         ARM 支持协处理器操作,协处理器的控制要通过协处理器命令实现.表A-7给出全部的ARM协处理器指令. 表A-7  ARM 协处理器指令 CDP ...

随机推荐

  1. Nexus3.x.x上传第三方jar

    exus3.x.x上传第三方jar: 1. create repository 选择maven2(hosted),说明: proxy:即你可以设置代理,设置了代理之后,在你的nexus中找不到的依赖就 ...

  2. Eclipse创建maven工程后没有build path解决方案

    1.修改maven工程下的.project文件为如下内容 <?xml version="1.0" encoding="UTF-8"?> <pr ...

  3. Locust 分布式测试

    转:http://www.testclass.net/locust/distributed/ 参考:官方文档 分布式运行Locust 一旦单台机器不够模拟足够多的用户时,Locust支持运行在多台机器 ...

  4. flask 文件上传(单文件上传、多文件上传)

    文件上传 在HTML中,渲染一个文件上传字段只需要将<input>标签的type属性设为file,即<input type=”file”>. 这会在浏览器中渲染成一个文件上传字 ...

  5. Linux基础命令---检查密码文件pwck

    pwck 检查用户密码文件“/etc/passwd”和“/etc/shadow”的完整性,将验证结果送到标砖输出.提示用户删除格式不正确或有其他不可更正错误的条目.检查以验证每个条目是否具有:正确的字 ...

  6. php 获取ip地址的5种方法,插入用户登录日志实例

    php 获取ip地址的5种方法,插入用户登录日志实例,推荐使用第二种方法 <?php //方法1: $ip = $_SERVER["REMOTE_ADDR"]; echo $ ...

  7. ajax处理文件下载

    ajax中处理文件下载,可能大数会遇到我和一样的问题,什么问题呢?就是下载程序执行了,但是浏览器没有任何下载操作,这是为什么呢? 那是因为response原因,一般请求浏览器是会处理服务器输出的res ...

  8. zabbix实现电话、短信、邮件报警

    该报警方式提前说明:(1)该方式可以实现zabbix免费电话报警以及微信.短信.邮件报警,但有数量限制.详见如下:如数量不能满足需要以及人员需要,可以考虑购买收费版.(2)毕竟是免费版,电话通知要省着 ...

  9. ubuntu 常见命令整理

    SSH 查看ssh服务的进程是否已经开启ps -e | grep ssh 安装ssh服务组件sudo apt-get install openssh-server 服务启动和关闭 方法1:servic ...

  10. Kattis之旅——Prime Reduction

    A prime number p≥2 is an integer which is evenly divisible by only two integers: 1 and p. A composit ...