首页 >> 大全

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

2023-10-11 大全 34 作者:考证青年

网上看到对于LDR指令解释是:

来自

对比我自己的程序:

ldr pc,

_arm指令对应的机器码_arm指令集的编码格式是什么

keil反汇编后的机器码是,伪指令是LDR PC,[PC,#]。

如果按上面的解释,那就是去[PC+0x18]=的地方取数来赋给PC,可这样就不对了,看程序可以发现这个label的值是即PC+0x20。

经过仿真,发现仿真波形里cpu确实是去到即PC+0x20地址取数(取到赋给PC),之后程序跳到地方开始执行。那就是从label角度来看是执行对了,但和上面LDR指令的解释不符。

再多搜寻了文章,发现上面LDR指令的解释对于R寄存器还好,对于PC寄存器就解释不够清晰了。

arm指令对应的机器码_arm指令集的编码格式是什么_

在文章里看到这样的解释

这样就说的通了,也和仿真结果匹配。由于流水线的硬件结构,所以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来输出机器码。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了