STCx51虚拟单片机(4):STC32位单片机的内核架构和指令集简介
本帖最后由 杨为民 于 2024-2-19 12:47 编辑近十年来STC一直在稳步地实施其自己的32位系列单片机计划。STC32位单片机采用了STC 80351内核架构和STC 80351指令集,本文将简单介绍STC32位单片机内核架构和组成,并通过对L1指令集中的四则运算的指令部分的分析介绍STC 80351指令集的特色。 一、8051和80251内核架构与指令集(1)Intel 8051内核由一个8位数据处理器、一个8位的直接地址存储控制器和一个16位的扩展存储控制器组成。8051单片机由8051内核、外部端口控制器和片上设备组成,用户使用8051指令集来控制整个单片机的运行。(2)Intel 8051指令集管理4个存储空间:8位的直接寻址DATA空间(MOV指令存取)8位的间接寻址IDATA空间(MOV@R0/@R1指令存取)16位的代码CODE空间(MOVC 指令存取)16位的扩展间接寻址XDATA空间(MOVX @DPTR指令存取)其中DATA和IDATA的低128字节空间共用,DATA的高128字节空间留给SFR(特殊功能寄存器)使用。(3)Intel 80251内核由一个准32位数据处理器(乘除法是16位的,其他操作大部分是32位的)、一个16位的直接地址存储控制器和一个24位的扩展存储控制器组成。80251单片机由80251内核、外部端口控制器和片上设备组成,用户使用80251指令集来控制整个单片机的运行。(4)Intel 80251指令集包括一个全8051指令集作为其子集。Intel 80251指令集的二进制代码分为两种模式:1)在二进制代码(Binary)模式下,80251指令集的8051子集的二进制代码与8051指令集的完全相同,其他的80251独有的指令的二进制代码均加有“A5”前缀。这样8051编译器生成的二进制代码可以直接在80251单片机上运行。不过这种二进制兼容模式的整体指令执行效率较低,一般单片机均不选择这种模式。2)在源代码(Source)模式下,80251指令集中的8051指令子集的部分指令的二进制代码加有“A5”前缀。因此这时8051编译器生成的二进制代码不能直接在80251单片机上运行,需要将汇编语言源代码用80251编译器重新进行编译。不过这种源代码兼容模式的整体运行速度较快。STC32位单片机采用源代码模式。(5)Intel 80251指令集除了管理8051指令集管理的4个存储空间外,还管理专有的3个存储空间:16位的直接寻址EDATA空间(MOV指令存取)16位的间接寻址EDATA空间(MOV@WRi指令存取)24位的间接寻址HDATA空间(MOV@DRi指令存取),HDATA空间以64KB为一页,分为00H~FFH共256个页。其中EDATA的低256字节空间与DATA和IDATA空间共用,位于00H页。8051子集的XDATA空间位于HDATA空间的01H页,8051子集的CODE空间位于HDATA空间的FFH页。二、STC 80351内核架构与指令集(6)STC 80351内核由一个32位数据处理器“DPU32”(乘除操作是32位的)和一个存储控制器组成。(7)32位数据处理器“DPU32”根据情况可以再分为整数处理单元MDU32和FPU32浮点数处理单元。(8)存储控制器分为两类,对于已经推出的STC32G/32F系列的单片机,内核采用80251的“HMC24”存储控制器。对于即将推出的带32位数据处理器MDU32C的STC8H系列单片机,内核采用8051的“XMC16”存储控制器。(9)STC32位单片机由STC 80351内核、外部端口控制器和片上设备组成,用户使用STC 80351指令集来控制整个单片机的运行。(10)STC 80351指令集是一个分等级(Level)的指令系统,不同等级的指令集可以组合起来构成一个具体的指令集供某个系列的单片机使用。(11)STC 80351-L0指令集为8051指令集全集。适用于那些不带DPU32的STC8系列单片机。(12)STC 80351-L1指令集为使用DPU32位数据处理器扩展指令。(13)STC 80351-L2指令集为80251指令集全集。适用于已经推出的带MDU32的STC32G/32F系列单片机。三、STC 80351指令集寄存器(14)STC 80351-L0指令集使用8051全部寄存器,STC 80351-L2指令集使用80251全部寄存器,他们之间共用R0~R7这8个8位寄存器。(15)STC 80351-L1指令集将8051和80251的R0~R7这8个8位寄存器改名为BR0~BR7,将8051和80251的R6R7寄存器组合为“AX”16位寄存器,将8051和80251的R2R3寄存器组合为“BX”16位寄存器,将8051和80251的的R4R5R6R7寄存器组合为“EAX”32位寄存器, 将8051和80251的的R0R1R2R3寄存器组合为“EBX”32位寄存器。四、STC 80351-L1指令集四则运算指令简介(16)按照内核分工,存储控制器如果是XMC16,DPU32与存储器之间的数据交流指令为STC 80351-L0指令集—8051指令,存储控制器如果是HMC24,DPU32与存储器之间的数据交流指令为STC 80351-L2指令集—80251指令。因此STC 80351-L1指令集主要是DPU32的运算指令。(17)STC 80351-L1指令集的四则运算指令
汇编语言操作内容说明
加法
ADDF EAX, EBXEAX=EAX + EBX单精度浮点数加法
ADDS EAX, EBXEAX=EAX + EBX32位加法
ADDS AX, BXAX=AX + BX16位加法
ADDS BR7, BR6R7=R7 +R3X8位加法
减法
SUBF EAX, EBXEAX=EAX - EBX单精度浮点数减法
SUBS EAX,EBXEAX=EAX - EBX32位减法
SUBS AX,BXAX=AX - BX16位减法
SUBS BR7,BR3R7=R7 - R38位减法
乘法
MULF EAX,EBXEAX=EAX * EBX单精度浮点数乘法,结果在EAX
MULS EAX,EBXEAX=EAX * EBX32位乘法,结果32位在EAX
MULS AX,BXEAX=AX * BX16位乘法,结果32位在EAX,低16位在AX
MULS BR7,BR3AX=R7 *R38位乘法,结果16位在AX, 低8位在R7
除法
DIVF EAX,EBXEAX=EAX / EBX单精度浮点数除法,结果位商在EAX
DIVU EAX,EBXEAX=EAX / EBX32位无符号除法,结果32位商在EAX,32位余数在EBX
DIVS EAX,EBXEAX=EAX / EBX32位有符号除法,结果32位商在EAX,32位余数在EBX
DIVU AX,BXAX=AX / BX16位无符号除法,结果16位商在AX
DIVS AX,BXAX=AX / BX16位有符号除法,结果16位商在AX
DIVU BR7,BR3R7=R7 / R38位无符号除法,结果8位商在R7
DIVS BR7,BR3R7=R7 / R38位有符号除法,结果8位商在R7
求余数
MODU EAX,EBXEAX=EAX % EBX32位无符号求余,余数在EAX
MODS EAX,EBXEAX=EAX % EBX32位有符号求余,余数在EAX
MODU AX,BXAX=AX % BX16位无符号求余,余数在AX
MODS AX,BXAX=AX % BX16位有符号求余,余数在AX
MODU BR7,BR3R7=R7 % R38位无符号求余,余数在R7
MODS BR7,BR3R7=R7 % R38位有符号求余,余数在R7
(18)STC 80351-L1指令集还有其他类型的指令。以上给出的是四则运算的全部指令,通过这些指令可以看出STC 80351-L1指令具有以下两个显著的特点:首先L1指令集不是对称指令。比如只有“ADDSEAX,EBX”指令,没有“ADDSEBX,EAX”指令。其次L1指令集的8位、16位和32位每个数据等级只有一条指令。比如虽然有BR6和BR2这个两个8位寄存器,却只有“ADDSBR7,BR3”指令,没有“ADDS BR6,BR2”指令。五、总结 (19)STC32位单片机采用的STC80351内核架构分为32位数据处理器“DPU32”和存储控制器两个部分组成,其中存储控制器分为两类,“XMC16”存储控制器适合STC8系列单片机, “HMC24”存储控制器适合STC32系列单片机。(20)STC32位单片机采用的STC80351指令集目前有三个等级,其中“L0+L1”等级组合适合STC8系列单片机,“L1+L2”等级组合适合STC32系列单片机。(21)STC 80351-L1指令集是一个比RISC还精简的又与“8051”和“80251”指令集高度兼容的最小指令集“MISC”。这种精简使得实现这些指令的“DPU32”硬件部分可以像RISC内核一样脱离存储控制器以单独的超高内主频工作,大大提高STC32位单片机的性能指标。
沿着杨老师指引的方向,前进{:4_196:}
给 STC8H2K32U-45I-LQFP32,TSSOP28/20, 设计的 MDU32C 已设计完成
在设计DPU32中,会用来增强现全力以赴的 STC32G400K256-180MHz
采用 MDU32C, PWM硬件移相的 STC8H2K32USB-45I-LQFP32/TSSOP28/TSSOP20
===MDU32C 是老许建议的,MDU32C = MDU32 + MDU16的其他功能扩充到32位
===在最后制图阶段,即将流片,春节后供货
希望STC8H2K08U-45I-TSSOP20/SOP16能同步上架零售商城 社区闲人 发表于 2023-12-26 14:11
希望STC8H2K08U-45I-TSSOP20/SOP16能同步上架零售商城
希望STC8H2K08U-45I-TSSOP20/SOP16能同步上架零售商城
===实际有需求吗,可以先用 STC8H8K64U 隐隐感觉到杨老师是高手中的高手{:4_197:} 杨老师, 你的 求余指令 明显是错误的, 求余 返回结果(余数), 和 除法返回结果(商), 怎么可能在同一寄存器中 ???
采用 MDU32C, PWM硬件移相的 STC8H2K32USB-45I-LQFP32/TSSOP28/TSSOP20
===MDU32C 是老许建议的,MDU32C = MDU32 + MDU16的其他功能扩充到32位
===在最后制图阶段,即将流片,春节后供货
在设计DPU32中,会用来增强现全力以赴的 STC32G400K256-180MHz
本帖最后由 杨为民 于 2024-1-17 10:58 编辑
LAOXU 发表于 2024-1-17 00:19
杨老师, 你的 求余指令 明显是错误的, 求余 返回结果(余数), 和 除法返回结果(商), 怎么可能在同一寄存器中 ...
使用微指令技术就可以实现了:
(1)如果有一条除法微指令: DIVUEAX, EBX
(2)那么可以定义新的一条微指令:MODU { DIVUEAX, EBX ;MOVREAX, EBX}
(3)我利用微指令技术已经实现了
杨为民 发表于 2024-1-17 10:57
使用微指令技术就可以实现了:
(1)如果有一条除法微指令: DIVUEAX, EBX
(2)那么可以定义新的一条 ...
多了一条 数据 搬家 指令, 呵呵~~~ 神农鼎 发表于 2024-1-17 07:49
采用 MDU32C, PWM硬件移相的 STC8H2K32USB-45I-LQFP32/TSSOP28/TSSOP20
===MDU32C 是老许建议的,MDU32C =...
总算 有 TSSOP28 封装了 {:lol:}