打印
[其他ST产品]

stm32(ARM CPU)与x86 CPU架构组成的异同点 x86CPU组成

[复制链接]
403|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
x86CPU组成:
CPU的内部架构和工作原理



cpu架构一

这里的AC累加器、缓冲寄存器和ARM里的通用寄存器R0、R1是一个作用



ARM





使用特权

评论回复
沙发
hehhehee|  楼主 | 2024-2-28 14:17 | 只看该作者
stm32中指令、汇编语言、机器码

CPU的内部架构和工作原理

根据操作数的地址是在寄存器还是在内存还是立即数,将这些数据传输类型分为以下几种:

1、Cortex-CM3中的数据传输类型

1)、两个寄存器间的传输数据。MOV

2)、寄存器与存储器间传输数据。LDR、STR

3)、寄存器与特殊功能寄存器间传输数据。

4)、把一个立即数加载到寄存器。MOV

使用特权

评论回复
板凳
hehhehee|  楼主 | 2024-2-28 14:18 | 只看该作者
可以通过命令行来汇编与反汇编




Thumb/Thumb2指令集

使用特权

评论回复
地板
hehhehee|  楼主 | 2024-2-28 14:18 | 只看该作者
看下面这个例子:

LED0=0这条C指令编译器把它转换成了3条汇编指令MOVS、LDR、STR,这三句汇编分别对应的机器码就是2000、490B、6008。
图中,0x08。。。是CODE地址,然后该地址开始的机器码,最后就是这个机器对应的汇编语句。
F04F0001是对应汇编的机器码,你不用关心它的长度,有兴趣的可以去查汇编指令表,其中有对应机器码的格式

上面的机器码对三种操作数的寻址:寄存器(R0这些)、内存(flash等)、立即数
对立即数寻址就是确定该立即数的大小,

使用特权

评论回复
5
hehhehee|  楼主 | 2024-2-28 14:21 | 只看该作者


首先我们分析下上面的例子:

490B LDR R1,[PC,#44]
490A LDR R1,[PC,#40]

这两的机器码为啥只差了1,而立即数差了4

这是因为立即数寻址是有8位图决定的,不是直接映射数值的



我们可以看到它是将机器码的0-4位乘以4得到最终的立即数
0xb=11,114=44
0xa=10,104=40

使用特权

评论回复
6
hehhehee|  楼主 | 2024-2-28 14:22 | 只看该作者



为什么要通过这种方式来寻址:

寄存器寻址可以直接控制寄存器,在机器码中所需的位数不多,够用
内存中寻址,如果是32位的那地址就有0-2的32次方,32位指令的话不够用,但这里就可以采用【】的方式间接寻址
而立即数就没有办法通过直接和间接来,32位指令中间除去操作码,剩下的位数根本覆盖不了0-2的32次方,所有采用了位图加循环右移的方式

使用特权

评论回复
7
hehhehee|  楼主 | 2024-2-28 14:22 | 只看该作者

使用特权

评论回复
8
Henryko| | 2024-2-29 22:52 | 只看该作者
这个的指令集是不一样的吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

934

帖子

0

粉丝