一种高效的浮点数除法指令设计实现方法

2021-01-15 01:17宗德才王康康
实验室研究与探索 2020年12期
关键词:指令控制器算法

宗德才, 王康康

(1.常熟理工学院计算机科学与工程学院,江苏常熟215500;2.江苏科技大学数理学院,江苏镇江212003)

0 引 言

目前,国内很多高校计算机组成原理实验教学内容主要是基于TEC-XP16 教学计算机而开展的。为使学生更好地掌握计算机各个组成部件的工作原理,理解指令的执行流程,系统地建立计算机整机概念,需要开发一些设计性实验,如在TEC-XP16 教学计算机中设计一些浮点运算指令。

文献[1]中设计了一种4 bit 乘法指令与除法指令,文献[2-3]中将EDA 软件Proteus 应用于教学实验中,缺点是很难形成对计算机硬件的直观了解,文献[4]中设计了一个8 bit模型机,设计了14 条指令,文献[5]中设计了加法等指令,文献[6]中要求学生至少设计实现7 条指令,文献[1-6]中都未设计浮点除法等复杂指令。

文献[7]中介绍了TH-union 教学机微程序控制器的原理及实验步骤,没有扩展新指令。文献[8]中在TEC-2000 教学机微程序控制器中设计实现了4 条简单的扩展指令。文献[9]中在TEC-2000 教学机微程序控制器中设计实现了两条简单的扩展指令。文献[8-9]中在TEC-2000 教学机微程序控制器中扩展的指令都比较简单。文献[10]中研究了在TEC-XP16 组合逻辑控制器中扩展简单指令的方法。文献[11]中提出一种微程序控制器中8 bit 无符号乘法指令与8 bit无符号除法指令的设计方法,均需要20 多条微指令组成的微程序来实现,文献[8-9,11]中设计好微程序后都采用手工方式修改控制器源程序,效率低、速度慢且容易出错。

基于TEC-XP16 教学机,设计了一种32 bit IEEE 754 格式的浮点数除法指令以及实现32 bit 浮点数除法运算的算法。用TEC-XP16 教学机的汇编指令设计了实现浮点数除法算法的汇编语言程序。为解决人工方式设计微程序和修改微程序控制器源程序效率低且容易出错等问题,提出了一种能够由汇编语言程序自动生成微程序以及能够由微程序自动修改控制器ABEL 语言源程序的方法。实验结果表明,所设计的32 bit浮点除法指令的功能是正确的,平均只需要2.16 s就能根据汇编语言程序表自动生成微程序表,平均只需1.3 s 就能根据微程序表、微指令转移判断条件表和微程序入口地址表自动修改并生成控制器ABEL语言源程序,极大提高了浮点除法指令的设计效率。该方法也可推广到其他复杂指令的设计过程。

1 微程序控制器中设计浮点除法指令

在TEC-XP16 教学机微程序控制器中扩展指令时,首先,设计新指令对应的微程序,根据微程序修改描述MACH 芯片功能的ABEL 语言源程序[12],然后将修改后的ABEL 语言程序用ISP LEVER 软件编译成.jed文件,接着将.jed 文件下载到MACH 芯片中,最后,在教学机上调试运行包含新指令的教学机程序。

本文在TEC-XP16 教学机微程序控制器中设计实现了一种32 bit浮点数除法指令。

1.1 浮点数除法指令的设计过程

在TEC-XP16 教学机微程序控制器中设计浮点除法指令的主要过程如下:

(1)确定32 bit浮点除法指令FDIV 的格式和功能,见表1。

表1 FDIV的指令格式与功能

(2)按32 bit 浮点除法指令的功能和格式,设计32 bit浮点除法算法,如算法1。

图1 32 bit IEEE754浮点数格式

如图1 所示,在IEEE 754 格式的32 bit浮点数中最高位是数符,表示浮点数的正负,阶码用移码表示,阶码的真值都被加上一个偏移量,对于32 bit 浮点数的偏移量为127。

在IEEE 754 格式浮点数中尾数部分通常都是规格化表示的,即非0 的有效位最高位总是1,有效位呈如下形式:1.ffff……fff,在实际的表示中,对于32 bit浮点数,这个整数位的1 被省略,称为隐藏位。

TEC-XP16 教学机中共有16 个16 bit的通用寄存器R0 ~R15。32 bit浮点数需要用两个通用寄存器来表示。

算法132 bit 浮点数除法运算算法。被除数与除数都用32 bit IEEE 754 浮点数表示,被除数存放在R1、R0 寄存器,除数存放在R3、R2 寄存器,商为32 bit IEEE 754 浮点数,商存放在R1、R0 寄存器中。

(1)如果R2和R3都是0,即除数近似为0,则置除数为0标记,否则,转(2);

(2)如果R1和R0都是0,即被除数近似为0,则结果近似为0,结束,否则,转(3);

(3)取被除数阶码部分,并右移一位,保存在R6 寄存器中,R6中结果为00JJ JJJJ JJ00 0000,其中,J表示阶码部分;

(4)取除数阶码部分,并右移一位,保存在R7 寄存器中,R7中结果为00JJ JJJJ JJ00 0000,其中,J表示阶码部分;

(5)阶码相减:(R6)-(R7)→R6;

(6)浮点数中阶码用移码表示,移码是在阶码真值基础上加127,阶码相减时,127 被减去了,因此,需要把阶码差加上127。即(R6)+(0001 1111 1100 0000)2→R6;

(7)将除法的符号位保存在R7最高位;

(8)取被除数的尾数部分,并恢复隐藏位,存放在R1、R0寄存器,R1、R0 中结果为0000 0000 1WWW WWWW WWWW WWWW WWWW WWWW,其中,W表示阶码部分;

(9)取得除数的尾数部分,并恢复隐藏位,存放在R3、R2寄存器,R3、R2 中结果为0000 0000 1WWW WWWW WWWW WWWW WWWW WWWW,其中,W表示阶码部分;

(10)将R9、R8寄存器清为0,R9、R8寄存器存放商;

(11)令R10寄存器为24,24为相除的次数;

(12)比较R1和R3,相等,转(13),否则,转(14);

(13)比较R0和R2,如果(R0)≥(R2),C为1,转(15);否则,C为0,转(16)

(14)如果(R1)≥(R3),则C 为1,转(15),否则,C 为0,转(16)

(15)R1/ /R0-R3/ /R2→R1/ /R0,

(16)带进位C循环左移R9、R8,即R9←R8←C

(17)R10减1;

(18)如果R10为0,则执行(20),否则转(19);

(19)余数R1/ /R0联合左移一位,转(12);

(20)此时,R9 和R8 中商为24 位,考虑到被除数小于除数的情形,商要左移一位进行规格化,因此,商要多取一位,取25位,若第25商为1,则令R15为1,否则令R15为0;

(21)将R9、R8内容分别送R1、R0,将R9清0;

(22)如果R1中尾数部分最高位为0,则执行(23),否则,执行(26);

(23)将R15右移一位,R15最低位移入C触发器;

(24)带进位C循环左移R1、R0,即R1←R0←C;

(25)阶码减1,即00JJ JJJJ JJ00 0000-0000 0000 0100 0000,其中,J表示阶码部分;

(26)如果R6最高位为1,则为下溢,结果为0,结束;如果R6次高位为1,则为上溢,令C =1,结束;如果R6 最高两位为00,则执行(27);

(27)R6最高两位为00 表示结果没有溢出,令C =0,将R6左移一位,调整R1寄存器的内容,R1最高位即R7 最高位,R1 次高位开始的8位即R6中阶码部分,R1低7位即高7位尾数不变,结束。

(3)根据算法1,用TEC-XP16 教学机的汇编指令编写程序实现算法1。同时,设计数据库表。

Python语言具有简单易学、免费开源和可扩展移植性好等特性[13],选择Python 语言作为程序设计语言。

如图2 所示,TEC-XP16 教学机中,一条微指令由16 bit 的下地址字段和32 bit 的控制命令字段共同组成[14]。

图2 TEC-XP16教学机的微指令格式

根据TEC-XP16 教学机微指令的格式,设计了微程序表MProgram,如表2 所示,用于保存32 bit浮点数除法指令对应的由微指令组成的微程序。

为实现根据汇编程序自动生成微程序这一功能,设计了汇编程序表AsblProgram,见表3,用于保存根据32 bit浮点数除法运算算法编写的90 条汇编指令组成的汇编程序。

表2 MProgram微程序表

表3 AsblProgram汇编程序表

图2 中,命令码用于控制微指令的执行顺序,命令码CI3 ~CI0 为1110 时,顺序执行。命令码CI3 ~CI0为0010 时,根据指令的操作码确定该指令对应的微程序的入口地址。设计微程序入口地址表MPFAdr,见表4,用于保存32 bit浮点数除法指令对应的微程序的第一条微指令的地址。

表4 MPFAdr微程序入口地址表

命令码CI3 ~CI0 为0011 时,用于条件微转移控制,见表5,微转移条件SCC3 ~SCC0 用于条件微转移时给出转移依据的条件,条件满足时发生转移,下一条微指令的地址为当前微指令中下地址字段的内容;条件不满足,顺序执行[15]。

根据表5,设计了微指令转移判断条件表CC,见表6,用于保存微指令转移的条件。

表5 条件微指令转移所依据的判断条件表

表6 CC微指令转移判断条件表

由于每一条汇编指令转换后的微指令数目不同,设计了ISEA表(见表7)用于存储每一条汇编指令转换成为微指令后,对应的第一条微指令地址start 和最后一条微指令的地址end。(4)在汇编程序表AsblProgram中输入实现32 bit浮点数除法运算算法的汇编程序,共有90 条汇编指令,在微程序入口地址表MPFAdr 中输入FDIV指令的操作码1110 1101,微程序入口地址为0100 0000。

表7 ISEA汇编指令微指令地址表

(5)根据算法2,用Python 语言编程(记为程序1),能够自动将AsblProgram 表中的汇编程序转换成微程序并写入MProgram表,根据算法4 为JRZ/JRNZ/JRC/JRNC/JRS/JRNS/JR转移类指令更新其微指令中的下地址字段Nadr,根据算法5 为JRZ/JRNZ/JRC/JRNC/JRS/JRNS指令生成CC表。

算法2根据AsblProgram 表中的汇编程序生成MProgram表和ISEA表算法。

(1)从AsblProgram表中查找所有记录的最大Number 字段值,记为maxNum,令i =1;

(2)查找AsblProgram表中Number字段等于i的记录,记为AsbInsti;

(3)如果记录AsbInsti 的Itype 为2,即为MVRD 指令,则根据算法3 将MVRD Ri,DATA 指令转换成微指令并写入MProgram表,同时在ISEA表中写入MVRD指令对应的第一条微指令的地址start和最后一条微指令地址end;

如果记录AsbInsti 的Itype 为1,即为MVRR 指令,则只需转换成一条相应的微指令并写入MProgram表,同时在ISEA表中写入MVRR指令对应的第一条微指令的地址start和最后一条微指令地址end;

如果记录AsbInsti 的Iname 为OR、AND、ADD、SUB、SBB、XOR、TEST、ADC、CMP、SHR、RCL、SHL、INC、DEC、JR、JRZ、JRNZ、JRC、JRNC、JRS、JRNS、CLC、RET 指令,则只需要转换成一条相应的微指令并写入MProgram表,同时在ISEA表中写入待转换汇编指令对应的第一条微指令的地址start和最后一条微指令地址end;

如果记录AsbInsti的Iname为PSHF、POPF指令,则需要转换成两条相应的微指令并写入MProgram表,同时在ISEA表中写入待转换汇编指令对应的第一条微指令的地址start和最后一条微指令地址end;

(4)i =i +1,重复(2),(3),直到i >maxNum结束。

在设计的实现FDIV 指令的汇编程序中,用到的MVRD Ri,DATA 指令中,DATA 值有7F80、1FC0、8000、007F、0010、0001、0008、0040、0080、0100。根据DATA值的特点,设计了算法3,算法3 的设计目标是尽量用最少的微指令实现MVRD指令。

算法3MVRD Ri,DATA 指令转换成微指令算法。

(1)将DATA转换成16 bit二进制数data16;

(2)计算data16中1的位数,记为num_1(data16);

(3)如果num_1(data16)>1,则执行(4),否则,执行(12);

(4)MVRD指令的第一条微指令为SUB指令对应的微指令,该微指令执行后得到1111 1111 1111 1111;

(5)计算将1111 1111 1111 1111 采用先左移后右移的方法得到data16的次数,记为shiftlr(data16);

(6)计算将1111 1111 1111 1111 采用先右移后左移的方法得到data16的次数,记为shiftrl(data16);

(7)如果shiftlr(data16)小于等于shiftrl(data16),则执行(8),否则,执行(10);

(8)生成16-num_1(data16)条SHL指令对应的微指令;

(9)生成shiftlr(data16)+num_1(data16)-16条SHR指令对应的微指令,结束。

(10)生成16-num_1(data16)条SHR指令对应的微指令;

(11)生成shiftrl(data16)+num_1(data16)- 16 条SHL指令对应的微指令,结束。

(12)计算由0000 0000 0000 00001得到data16的次数,记为leftshift2(data16),则由DATA 得到data16 需要leftshift2(data16)+2条微指令;

(13)计算由1111 1111 1111 11111得到data16的次数,记为shiftlr(data16),则由DATA 得到data16 需要shiftlr(data16)+1条微指令;

(14)如果leftshift2(data16)+2 小于等于shiftlr(data16)+1,则执行(15),否则执行(18);

(15)生成SUB指令对应的微指令,该微指令执行后得到0000 0000 0000 0000;

(16)生成INC指令对应的微指令,该微指令执行后得到0000 0000 0000 0001;

(17)生成leftshift2(data16)条SHL 指令对应的微指令,结束。

(18)生成SUB指令对应的微指令,该微指令执行后得到1111 1111 1111 1111;

(19)生成shiftlr(data16)条SHL 指令对应的微指令,结束。

算法4为JRZ/JRNZ/JRC/JRNC/JRS/JRNS/JR转移类指令生成微指令中的下地址字段Nadr算法。

JRZ、JRNZ、JRC、JRNC、JRS、JRNS 都只需要转换成一条微指令即可,但是要根据转移目标地址更新Nadr字段值。

(1)从AsblProgram 表中查找Itype 为3 或4 的所有记录(JRZ、JRNZ、JRC、JRNC、JRS、JRNS指令的Itype为3,JR指令的Itype为4),假设查询结果有n条记录,令i =1;

(2)根据查询结果中记录i的Number字段值在ISEA表中查找start字段值,并转换成微指令地址,记为JIstart;

(3)在AsblProgram 表中查找Label 字段等于查询结果中记录i的DstAdr字段值的记录的Number字段值,记为number;

(4)在ISEA表中查找Number字段等于number的记录的start字段值,并转换成8bit二进制,记为JDstart;

(5)更新MProgram表中MIadr 字段等于JIstart 的记录的Nadr字段值为JDstart;

(6)i =i +1,重复(2)~(5),直到i >n结束。

算法5为JRZ/JRNZ/JRC/JRNC/JRS/JRNS 指令生成CC表算法。

(1)从AsblProgram 表中查找Iname 为JRZ/JRNZ/JRC/JRNC/JRS/JRNS的所有记录,假设查询结果有n 条记录,令i =1;

(2)在AsblProgram 表中查找Label 字段等于查询结果中记录i的DstAdr字段值的记录的Number字段值,记为number;

(3)在ISEA表中查找Number字段等于number的记录的start字段值,并转换成8 bit二进制,记为JDstart;

(4)如果CC 表中还没有Nadr 等于JDstart 的记录,则在CC表中插入一条记录,否则,转(5);

(5)i =i +1,重复2 ~4步骤,直到i >n结束。

(6)根据算法6,用Python 语言编程(记为程序2),能够根据MPFAdr表以及程序1 生成的MProgram表、CC表自动生成实现了32 bit浮点除法指令的控制器源文件m256c6.abl。

算法6自动修改并生成微程序控制器源程序的Python语言实现的算法。

(1)打开控制器源程序文件m256c.abl,读取m256c.abl文件的所有行存放在list1列表对象中;

with open('m256c.abl','r')as f1:

list1 =f1.readlines()

(2)连接FLOATDIV.db数据库;

db =sqlite3.connect('FLOATDIV.db')

(3)从MPFAdr表中读取所有记录,将所有记录的Iname字段值和Opcode字段值组成一个字符串a,

字符串a为:FDIV =(IR ==[1,1,1,0,1,1,0,1]);

在list1列表对象中找到“Expand Instruction here”字符串,将该字符串替换为字符串a;

(4)从CC表中读取所有记录,根据这些记录的SCC字段值、Iname字段值、Nadr字段值和Condition 字段值修改CC0 表达式;

(5)对MPFAdr表中的每一条记录,根据MPadr字段值,在list1列表对象中找到D0 ~D7 逻辑表达式所在的行并进行修改,例如,FDIV指令的MPadr 字段值为0100 0000,则D6 表达式中需增加FDIV信号;由于m256c.abl文件中D0 ~D7表达式出现在CC0表达式后面,因此,在list1列表中查找D0 ~D7 时,可以从CC0表达式的下一行开始查找,这样可提高查找速度;

(6)根据算法7,由MProgram 表中记录修改list1 列表对象;

(7)将list1列表对象写入一个新文件m256c6.abl,然后,关闭该文件。

算法7根据MProgram 表中记录修改list1 列表对象的算法。

(1)从MProgram表中读取所有记录,假设有n条记录;

(2)令i =1;

(3)根据记录i 的Nadr 字段值,在list1 列表对象中找到NADR7 ~NADR0逻辑表达式所在的行并进行修改;

(4)根据记录i 的Cmd 字段值,在list1 列表对象中找到CI3 ~CI0逻辑表达式所在的行并进行修改;

(5)根据记录i 的SCC 字段值,在list1 列表对象中找到SCC3 ~SCC0逻辑表达式所在的行并进行修改;

(6)根据记录i的MRW字段值,在list1列表对象中找到!_MIO00、REQ00、_WE00逻辑表达式所在的行并进行修改;

(7)根据记录i 的I2-0 字段值,在list1 列表对象中找到I200、I100、!I000逻辑表达式所在的行并进行修改;

(8)根据记录i 的I5-3 字段值,在list1 列表对象中找到I500、I400、I300逻辑表达式所在的行并进行修改;

(9)根据记录i 的I8-6 字段值,在list1 列表对象中找到I800、I700、!I600逻辑表达式所在的行并进行修改;

(10)根据记录i 的SST 字段值,在list1 列表对象中找到SST200、SST100、SST000逻辑表达式所在的行并进行修改;

(11)根据记录i的SSHSCI字段值,在list1 列表对象中找到SSH00、SCI100、SCI000逻辑表达式所在的行并进行修改;

(12)根据记录i的DC2 字段值,在list1 列表对象中找到DC2_200、DC2_100、DC2_000 逻辑表达式所在的行并进行修改;

(13)根据记录i的DC1 字段值,在list1 列表对象中找到DC1_200、DC1_100、DC1_000 逻辑表达式所在的行并进行修改;

(14)如果记录i的Bp 字段值为“DR”,则list1 列表对象的B30表达式增加当前记录的MIadr字段值;如果记录i的Bp字段值为“SR”,则list1 列表()对象的B301 表达式增加当前记录的MIadr字段值;如果记录i的Bp字段值为数字字符,则修改list1列表对象的B300、B20、B10、B00逻辑表达式的值;

(15)如果记录i的Ap 字段值为“DR”,则list1 列表对象的A301表达式增加当前记录的MIadr 字段值;如果记录i 的Ap字段值为“SR”,则list1列表对象的A30 表达式增加当前记录的MIadr字段值;如果记录i 的Ap 字段值为数字字符,则修改list1列表对象的A300、A20、A10、A00逻辑表达式的值;

(16)i =i +1,若i <=n,则转到(3),否则,结束。

2 实验分析

SQLite3 数据库模块是Python 2.5 之后的内置模块[16],使用时不用安装,直接导入即可。为方便python语言编程,按照上述方法在Access 2010 中设计好数据库表后,使用SQLite Expert工具将Access数据库转换成SQLite数据库。

用Python语言编写两个程序,程序1 能够自动将AsblProgram表中的汇编程序转换成微程序并写入MProgram表、CC表和ISEA表,程序2 能根据MPFAdr表和程序1 生成的MProgram、CC 表中的内容自动修改微程序控制器源程序文件,根据MPFAdr 表在控制器源程序中自动添加扩展指令的操作码与汇编语句的关系表达式以及自动添加扩展指令的微程序入口地址,根据CC表在控制器源程序中CC信号的逻辑表达式中自动添加扩展指令的条件微指令转移所依据的判断条件,根据MProgram表在控制器源程序中16 bit下地址字段与32 bit控制信号的逻辑表达式中自动添加相应的微指令地址。先后运行这两个程序后,会自动生成一个名为m256c6.abl的包括了FDIV指令的控制器源程序文件。

实验环境为:Intel Core i5 CPU M 450 (2.40 GHz),内存4 GB,Windows 10 操作系统。

将能够自动将AsblProgram 表中的汇编程序转换成微程序并写入MProgram表、CC表和ISEA表的程序1 运行50 次,结果如图3 所示,最快只需1.9 s,平均需要2.166 s;将能根据MPFAdr 表和程序1 生成的MProgram、CC表中的内容自动修改微程序控制器源程序文件的程序2 运行50 次,结果如图4 所示,最快只需1.1 s,平均需要1.3 s。

图3 由AsblProgram表自动生成MProgram表时间

图4 由MProgram表、CC表等自动产生abl文件时间

在TEC-XP16 教学机微程序控制器中扩展FDIV指令的完整过程如下:

(1)在Access 2010 数据库中创建AsblProgram 汇编程序表、MProgram微程序表、CC微指令转移判断条件表、MPFAdr微程序入口地址表和汇编指令微指令地址表ISEA,并且在AsblProgram表输入实现32 bit 浮点除法指令FDIV 的90 条汇编指令,在MPFAdr表中输入FDIV 指令对应的微程序入口地址0100 0000。

(2)使用SQLite Expert 工具将Access 数据库转换成SQLite数据库。

(3)用Python语言编写程序1,该程序能从SQLite数据库自动读取AsblProgram表中的汇编指令并自动生成微程序、微指令转移条件、每条汇编指令的微指令起始地址并分别写入MProgram表、CC表和ISEA表。

(4)用Python语言编写程序2,该程序能从SQLite3 数据库自动读取并根据MProgram表、CC 表和MPFAdr 表中的内容自动修改m256c.abl文件并生成一个新的微程序控制器源程序文件。

(5)先后运行程序1 和程序2,会自动生成一个名为m256c6.abl的实现了FDIV指令的控制器源程序文件。

(6)将m256c6.abl文件重命名为m256c.abl。

(7)启动Lattice ispLEVER Classic Project Navigator 软件,新建一个名为lc4256 的项目文件,将m256c.abl 添加到项目中,然后,将m256c.abl编译后生成名为lc4256.jed 的文件,将lc4256.jed下载到教学机MACH芯片中。方法详见文献[11]。

(8)启动WinPcec16软件,然后启动教学机监控程序。

(9)在WinPcec16软件中编写一个实现2个32 bit浮点数除法的教学机程序,如图5 ~6所示,教学机中规定扩展指令必须用E命令写入教学机内存,FDIV指令的二进制代码为ED00(十六进制形式),ED 为FDIV 指令的操作码,被除数存放在R1、R0寄存器中,除数存放在R3、R2 寄存器中,最后商保存在R1、R0寄存器中。

图5 中,被除数和除数分别是0100 0001 1011 0000 0000 0000 0000 0000,0100 0000 0101 0000 0000 0000 0000 0000 即1.011 ×24÷1.101 ×21,商为0100 0000 1101 1000 1001 1101 1000 1001,即1.10110001001 1101 1000 1001 ×22,程序运行结果验证了所设计和实现的32 bit浮点除法指令的功能是正确的。

图5 包含FDIV指令的教学机程序1

图6 包含FDIV指令的教学机程序2

图6 中,被除数和除数分别是0100 0001 0001 1110 1001 0010 0011 0001,0100 0000 0010 0010 0011 1011 1100 0010,即1.00111101001001000110001 ×23÷1.01000100011101111000010 ×21,商为0100 0000 0111 1010 0011 1000 1000 1011,即1.11110100 01110001000 1011 ×21,程序运行结果验证了所设计和实现的32 bit浮点除法指令的功能是正确的。

3 结 语

目前国内外还没有研究在TEC-XP16 教学机的微程序控制器中扩展较复杂指令,如32 bit 浮点数除法指令的文献。本文对TEC-XP16 教学机微程序控制器中扩展32 bit浮点数除法指令进行了尝试,设计实现了一种32 bit IEEE 754 浮点数除法指令,测试结果表明,采用本文方法在TEC-XP16 教学机上设计的32 bit浮点数除法指令的功能是正确的。

为解决原来采用人工方式将TEC-XP16 教学机汇编程序转换成微程序效率低且容易出错等问题,设计了汇编程序表和微程序表,并设计了一个python 程序,能够根据汇编程序直接自动生成微程序,同时,为解决手工修改控制器源程序速度慢及容易出错等问题,提出了一种能够根据微程序自动修改微程序控制器源程序的方法。实验结果表明,所设计的32 bit 浮点除法指令功能是正确的,平均只需要2.16 s就能根据汇编程序表自动生成微程序表,平均只需1.3 s 就能根据微程序表、微指令转移判断条件表和微程序入口地址表自动修改并生成控制器ABEL 语言源程序,极大提高了32 bit浮点除法指令的设计实现效率。本文提出的方法也可推广到其他复杂指令的设计。

下一步将尝试在TEC-XP16 教学机微程序控制器中设计32 bit浮点数加减法指令等复杂指令,以及进一步研究在TEC-XP16 教学机组合逻辑控制器中设计复杂指令的方法。

猜你喜欢
指令控制器算法
工商业IC卡控制器改造为物联网控制器实践
《单一形状固定循环指令G90车外圆仿真》教案设计
基于MapReduce的改进Eclat算法
Travellng thg World Full—time for Rree
进位加法的两种算法
一种改进的整周模糊度去相关算法
中断与跳转操作对指令串的影响
一种基于滑窗的余度指令判别算法
MAC指令推动制冷剂行业发展
模糊PID控制器设计及MATLAB仿真