(一)金水明80451指令集简介 (1)“金水明”是笔者过去的一个“单片机虚拟CPU指令集”研究项目的代号,该项目的主要研究目的是利用软件模拟的方法提前研究一个新架构的单片机CPU的指令集,通过典型的应用模拟来确定新架构的CPU指令集的完备性和工作模式。 (2)单片机CPU指令集也分为CISC和RISC两种,未来的技术主流是RISC。随着技术的不断发展,单片机CPU的应用场景越来越复杂。对于RISC指令集,虽然可以用编译器来实现各种复杂的算法,但是对于特殊领域的应用,RISC指令集的到底应该包括哪些指令?这些指令的应该如何使用和配合?在单片机CPU正式定型之前就需要用“单片机虚拟CPU指令集”的方法来进行提前研究。 (3)“金水明80451指令集”是“金水明80451 64位单片机虚拟CPU指令集”的简称,是“金水明”研究项目的一项成果。 (4)CPU架构按应用分为两种类型:面向运算的和面向控制的,就像ARM Cortex分为A和M两个系列一样。“金水明80451指令集”的定位是面向控制的单片机RISC指令集。 (5)为了适应单片机工业控制领域的各种传输控制协议和网络数据流,80451指令集需要单独支持8/16/32位的数据处理,因此80451采用了类似80x86/80251的等级式寄存器结构,本文将介绍金水明80451指令集中的寄存器组的构成和设计思路。
二、金水明80451 CPU 8位、16位、32位和64位寄存器地址映射表 其中:寄存器按高端定义,左边的字节是高位字节。
80451 CPU寄存器在设计时就考虑了与Intel 80251 CPU的兼容性,它们之间的对应关系如下表。 从上表中可以看到,除系统堆栈段页寄存器“SS”外,二者是一一对应的。由于80451指令集有一个80251指令子集,因此在80451的汇编语言中,当你使用那些80251指令时,也可以直接使用80251寄存器名,在同一地址的不同名寄存器存取的内容是一样的。 三、金水明80451寄存器设计思路 (6)80451运算指令是面向寄存器的。这是指运算是在两个寄存器之间进行的。 (7)许多的80451运算指令是不对称的,比如64位乘法只有 “MULU QAX, QCX”(QAX=QAX*QCX)指令,没有“MULU QCX, QAX”(QCX=QCX*ACX)指令。 因此80451寄存器是配对,不对称的运算操作只在这些配对的寄存器之间。 (8)80x86汇编语言项目当年是很多高校和计算机等级考试的的标准汇编语言,因此80451指令集的寄存器名借用了80x86的寄存器等级命名规则。 (9)在C51/C251里面,函数调用(Z=F(X,Y)的基本规范是第一个参数的寄存器是X=R7(8位变量)、X=R6R7(16位变量)和X=R4R5R6R7(32位变量),第二个参数的寄存器是Y=R3(8位变量)、Y=R2R3(16位变量)和Y=R0R1R2R3(32位变量),函数的返回值的寄存器是Z=R7(8位变量)、Z=R6R7(16位变量)和Z=R4R5R6R7(32位变量)。 在80x86汇编语言中,不对称指令(比如乘法)的结果通常在AX中,因此在80451的寄存器名称中,AX对应了R6R7而不是R2R3. (10)80451指令集当年的研究目标之一是设计和验证一组面向内存大规模数据运算(比如AI常用的矩阵和卷积运算)的指令,因此80451有两个32位的通用指针寄存器“EFP”和“EGP”。32位的地址指针支持4TB的内存,这个规模对于64位单片机内核在若干年内应该是足够了,因此80451指令集就没有更高位数的指针了。 (11)80451指令集当年的研究目标之一是设计和验证一组专门用于单片机RTOS和单片机DOS的指令,因此设置了两个32位的专用指针寄存器“EBP”和“EVP”,前者用于RTOS的可重入函数堆栈指针,后者用于DOS的任务内存动态分配和回收。 四、结束语
(12)寄存器组是CPU内核的最重要的组成部分,所有的CPU操作都是围绕它们进行的。虽然80451指令集只支持32位的地址和数据总线,但是80451指令集有两个64位的寄存器QAX和QCX,并且支持这两个寄存器之间的64位的乘除法,因此金水明80451指令集属于64位单片机指令集。
|