通俗易懂:ARM指令的寻址方式(三)

一、为什么所有的ARM指令都是条件执行?

ARM处理器在拿到一条指令的时候,它首先要看条件码给出的条件和CPSR条件码标志位里现存的这个状况匹配不匹配,如果匹配,条件符合,它才执行。如果不匹配,这行ARM指令它就不执行。

二、对于立即数0xF132,能不能把它放在ARM当中?

不能。在ARM指令机器编码基本格式中,操作数2为立即数,且只占12位。

注:操作数2包括寄存器里的数据在ARM的CPU的算数逻辑单元和其他处理系统乘法器。这些东西在计算的过程当中,数据都要转换成32位数据。

三、12位数据转换成32位数据

12位编码包括8位常数和4位循环右移值,由8位常数循环右移4位值的2倍,得到最后的32位立即数。

例:

复制代码
MOV R0,#0x0000F200     ;R0<------#0x0000F200

机器代码:E3A00CF2


//MOV : [1]、[2];R0 : E ;

解析:[1]3A:指令码------MOV是指令助记符,3A是MOV的机器编码

2\]E:1110------指令助记符:AL。无条件执行,相当于MOV AL。 \[3\]00:原指令中只有目的寄存器,没有操作数1寄存器 \[4\]C:4位循环右移值位C(十进制为120 \[5\]0xF2:8位常数 ##3A如何译为"搬移",CPU(硬件)里有存有相应的译码机制,来完成·相应的译码和执行。 ##12位数据转换位32位数据方法如图: ![](https://i-blog.csdnimg.cn/direct/f871c74a9a3748d4b88e45dd4b3f36f6.png) 注:移位操作:以4位二进制数为1组,只需让这组循环右移6次(4\*6=24)。 ## 四、ARM指令的指令机器编码格式和指令一般格式(程序员书写格式) ### 1、ARM指令机器编码格式 ![](https://i-blog.csdnimg.cn/direct/29d9b12811504ab19c2cd743c9267583.png) 注:目的寄存器和操作数1寄存器必须是寄存器(16位寄存器)。操作数2可以是:立即数或寄存器 ### 2、指令一般格式(程序员书写格式) ![](https://i-blog.csdnimg.cn/direct/e987ed0caed44471ac783c3f17ae033b.jpeg)

相关推荐
cpp_25011 小时前
P10570 [JRKSJ R8] 网球
数据结构·c++·算法·题解
cpp_25011 小时前
P8377 [PFOI Round1] 暴龙的火锅
数据结构·c++·算法·题解·洛谷
季明洵2 小时前
C语言实现单链表
c语言·开发语言·数据结构·算法·链表
Yeats_Liao2 小时前
评估体系构建:基于自动化指标与人工打分的双重验证
运维·人工智能·深度学习·算法·机器学习·自动化
only-qi2 小时前
leetcode19. 删除链表的倒数第N个节点
数据结构·链表
cpp_25012 小时前
P9586 「MXOI Round 2」游戏
数据结构·c++·算法·题解·洛谷
浅念-2 小时前
C语言编译与链接全流程:从源码到可执行程序的幕后之旅
c语言·开发语言·数据结构·经验分享·笔记·学习·算法
爱吃生蚝的于勒2 小时前
【Linux】进程信号之捕捉(三)
linux·运维·服务器·c语言·数据结构·c++·学习
文艺理科生Owen2 小时前
Nginx 路径映射深度解析:从本地开发到生产交付的底层哲学
运维·nginx
期待のcode2 小时前
Redis的主从复制与集群
运维·服务器·redis