本帖最后由 杨为民 于 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指令集的四则运算指令 汇编语言 | | | |
|
| | | | | | | | | | | | | |
|
| | | | | | | | | | | | | |
|
| | | | | | | | | | | | | |
|
| | | | | | 32位无符号除法,结果32位商在EAX,32位余数在EBX | | | 32位有符号除法,结果32位商在EAX,32位余数在EBX | | | | | | | | | | | | | |
|
| | | | | | | | | | | | | | | | | | |
(18)STC 80351-L1指令集还有其他类型的指令。以上给出的是四则运算的全部指令,通过这些指令可以看出STC 80351-L1指令具有以下两个显著的特点: 首先L1指令集不是对称指令。比如只有“ADDS EAX,EBX”指令,没有“ADDS EBX,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位单片机的性能指标。
|