ARM9的LDR PC,[PC,0x18]指令及机器码说明

2023-10-11 13:20

本文主要是介绍ARM9的LDR PC,[PC,0x18]指令及机器码说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网上看到对于LDR指令的解释是:
来自https://www.cnblogs.com/uestcbutcher/p/7244748.html
在这里插入图片描述
对比我自己的程序:
ldr pc,Reset_Addr
keil反汇编后的机器码是E59FF018,伪指令是LDR PC,[PC,#0x0018]。
如果按上面的解释,那就是去[PC+0x18]=0x20008018的地方取数来赋给PC,可这样就不对了,看程序可以发现Reset_Addr这个label的值是0x200080020即PC+0x20。
经过仿真,发现仿真波形里cpu确实是去到0x20008020即PC+0x20地址取数(取到20008250赋给PC),之后程序跳到0x20008250地方开始执行。那就是从label角度来看是执行对了,但和上面LDR指令的解释不符。
再多搜寻了文章,发现上面LDR指令的解释对于R寄存器还好,对于PC寄存器就解释不够清晰了。在这里插入图片描述

在文章https://www.sohu.com/a/270398818_464086里看到这样的解释在这里插入图片描述
这样就说的通了,也和仿真结果匹配。由于流水线的硬件结构,所以LDR指令执行地址运算时的PC值不是当前指令的PC值,此时的PC值是当前指令PC值+8。

LDR PC,[PC,0x18] //PC寄存器=从[硬件当前PC值+0x18]地方取值
LDR PC,[PC,0x18] //PC寄存器=从[当前LDR指令PC值+8+0x18]地方取值
由于硬件当前PC值=当前执行指令的PC值+8,而硬件执行是用硬件当前PC值,所以keil软件编译时做了处理就是把label值-8来输出机器码。

这篇关于ARM9的LDR PC,[PC,0x18]指令及机器码说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/188310

相关文章

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

Maven中的profiles使用及说明

《Maven中的profiles使用及说明》:本文主要介绍Maven中的profiles使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录主要用途定义 Profiles示例:多环境配置激活 Profiles示例:资源过滤示例:依赖管理总结Maven 中的

Before和BeforeClass的区别及说明

《Before和BeforeClass的区别及说明》:本文主要介绍Before和BeforeClass的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Before和BeforeClass的区别一个简单的例子当运行这个测试类时总结Before和Befor

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

idea报错java: 非法字符: ‘\ufeff‘的解决步骤以及说明

《idea报错java:非法字符:‘ufeff‘的解决步骤以及说明》:本文主要介绍idea报错java:非法字符:ufeff的解决步骤以及说明,文章详细解释了为什么在Java中会出现uf... 目录BOM是什么?1. BOM的作用2. 为什么会出现 \ufeff 错误?3. 如何解决 \ufeff 问题?最

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ