一种快速的浮点乘法指令设计方法

2021-07-16 08:12宗德才王康康
计算机应用与软件 2021年7期
关键词:指令乘法控制器

宗德才 王康康

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

0 引 言

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

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

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

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

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

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

在现有的 TEC-XP16 教学机中,微程序控制器只能执行29条基本指令。本文在TEC-XP16 教学机微程序控制器中设计实现了一种32位浮点数乘法指令。

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

1) 首先,确定32位浮点乘法指令FMUL的格式和功能,如表1所示。

表1 FMUL指令的指令格式与功能

2) 按32位浮点乘法指令的功能和格式,设计32位浮点乘法算法,如算法1所示。

算法132位浮点数乘法运算算法

被乘数与乘数都用32位IEEE 754浮点数表示,被乘数存放在R1、R0寄存器,乘数存放在R3、R2寄存器,乘积为32位IEEE 754浮点数,最后,乘积存放在R1、R0寄存器中。

(1) 如果R1和R0都是0,即被乘数近似为0,则结果近似为0,否则,转步骤(2)。

(2) 如果R3和R2都是0,即乘数近似为0,则结果近似为0,否则,转步骤(3)。

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

(4) 取乘数阶码部分,并右移一位,保存在R7寄存器中,R7中结果为 00JJ JJJJ JJ00 0000。

(5) 阶码求和:(R6)+(R7)→R6。

(6) 浮点数中阶码用移码表示,移码是在阶码真值基础上加127,阶码相加时,127被加了2次,因此,需要把阶码和减去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。

(10) 将R9、R8清为0,R9、R8存放部分积。

(11) 如果R2为0,只需移位8次,则令R15为1,R10为8,将R3内容传送到R2,R3清为0;如果R2为非0,则令R15为0,R10为16。

(12) 将R2右移一位,R2最低位移入C触发器。

(13) 如果C=1,则 R1//R0 + R9//R82→ R9//R8;如果C=0,则转移到步骤(15)。

(14) 如果R10不等于1,则执行步骤(15);如果R10为1,并且R15为1,则转移到步骤(18)(尾数最高位为整数1,所以不需要右移);如果R10为1,且R15为0,则执行步骤(15)。

(15) 将R9//R8//R2联合右移一位。

(16) R10减1。

(17) 如果R10为0,则执行步骤(18),否则转步骤(13)。

(18) 如果R3为0,则执行步骤(19);否则,令R15为1,R10为8,将R3内容传送到R2,R3清为0,转步骤(12)。

(19) 将R9、R8内容分别送到R1、R0,将R2内容送到R9。

(20) 如果R1中尾数最高位为0,则执行步骤(21),否则,执行步骤(22)。

(21) 将R1//R0//R9联合右移一位,阶码加1,转步骤(20)。

(22) 如果R9最高位为1,则R1//R0 +1 → R1//R0,否则,R1//R0不变。

(23) 如果R1中尾数最高位的左边一位为1,则执行步骤(24),否则,执行步骤(25)。

(24) 将R1//R0//R9联合右移一位,阶码加1。

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

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

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

1位数符8位阶码7位尾数 16位尾数

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

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

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

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

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

下地址命令码微转移条件MRWI2-I0I8-I6I5-I3B口地址A口地址SSTSSHSCIDC2DC116位下地址字段32位控制命令字段

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

表2 MProgram微程序表

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

表3 AsblProgram汇编程序表

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

表4 MPFAdr微程序入口地址表

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

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

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

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

由于每一条汇编指令转换后的微指令数目不同,设计了ISEA表(如表7所示)用于存储每一条汇编指令转换成为微指令后,对应的第一条微指令地址start和最后一条微指令的地址end。

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

4) 在汇编程序表AsblProgram中输入实现32位浮点数乘法运算算法的汇编程序,共有100条汇编指令,在微程序入口地址表MPFAdr 中输入FMUL指令的操作码1110 1100,微程序入口地址为0011 1100。

5) 根据算法2和算法3,用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、XOR、TEST、ADC、CMP、SHR、RCR、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结束。

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

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

(1) 将DATA转换成16位二进制数a。

(2) 计算a中1的位数,记为num_1(a)。

(3) 如果num_1(a)大于1,则执行步骤(4),否则,执行步骤(12)。

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

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

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

(7) 如果shiftlr(a)小于等于shiftrl(a),则执行步骤(8),否则,执行步骤(10)。

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

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

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

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

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

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

(14) 如果leftshift2(a)+2小于等于shiftlr(a)+1,则执行步骤(15),否则执行步骤(18)。

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

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

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

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

(19) 生成shiftlr(a)条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字段值,并转换成微指令地址,记为kkk。

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

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

(5) 更新MProgram表中MIadr字段等于kkk的记录的Nadr字段值为start66。

(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位二进制,记为start66。

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

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

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

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

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

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

list1 = f1.readlines()

(2) 连接mpdatabase.db数据库。

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

(3) 从MPFAdr表中读取所有记录,将所有记录的Iname字段值和Opcode字段值组成一个字符串a,字符串a为:FMUL=(IR==[1,1,1,0,1,1,0,0]);在list1列表对象中找到“Expand Instruction here ”字符串,将该字符串替换为字符串a。

(4) 从CC表中读取所有记录,根据这些记录的SCC字段值、Iname字段值、Nadr字段值和Condition字段值修改CC0表达式,如图3所示,图3中黑底部分为增加的部分。

图3 修改后的CC0表达式

(5) 对MPFAdr表中的每一条记录,根据MPadr字段值,在list1列表对象中找到D0-D7逻辑表达式所在的行并进行修改,例如,FMUL指令的MPadr字段值为0011 1100,则D2、D3、D4、D5表达式中需增加FMUL信号;由于m256c.abl文件中D0-D7表达式出现在CC0表达式后面,因此,在list列表中查找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-I0字段值,在list1列表对象中找到I200、I100、!I000逻辑表达式所在的行并进行修改。

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

(9) 根据记录i的I8-I6字段值,在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 实 验

按照上述方法在Access 2010中设计好数据库表后,为了方便Python语言编程,使用SQLite Expert工具将Access数据库转换成SQLite数据库。

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

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

图4 由AsblProgram表自动生成MProgram表的时间

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

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

(1) 在Access 2010数据库中创建AsblProgram汇编程序表、MProgram微程序表、CC微指令转移判断条件表、MPFAdr微程序入口地址表和汇编指令微指令地址表ISEA,并且在AsblProgram表输入实现32位浮点乘法指令FUML的100条汇编指令,在MPFAdr表中输入FMUL指令对应的微程序入口地址0011 1100。

(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的实现了FMUL指令的控制器源程序文件。

(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位浮点数乘法的教学机程序,如图6-图7所示,教学机中规定扩展指令必须用E命令写入教学机内存,FMUL指令的二进制代码为EC00(十六进制形式),EC为FMUL指令的操作码,被乘数存放在R1、R0寄存器中,乘数存放在R3、R2寄存器中,乘积保存在R1、R0寄存器中。

图6中,被乘数和乘数都是0100 0000 0000 0000 0000 0000 0000 0000,即1.0×21,乘积为0100 0000 1000 0000 0000 0000 0000 0000,即1.0×22,程序运行结果验证了本文所设计和实现的32位浮点乘法指令的功能是正确的。

图7中,被乘数和乘数都是0100 0000 0001 0000 0000 0000 0000 0000,即1.001×21,乘积为0100 0000 1010 0010 0000 0000 0000 0000,即1.010 001×22,程序运行结果验证了本文所设计和实现的32位浮点乘法指令的功能是正确的。

3 结 语

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

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

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

猜你喜欢
指令乘法控制器
三转子式比例控制器设计与内泄漏分析
南京溧水电子3款控制器产品
基于抽象汇编指令的恶意软件家族分类方法
《整式的乘法与因式分解》巩固练习
《整式的乘法与因式分解》巩固练习
《单一形状固定循环指令G90车外圆仿真》教案设计
新机研制中总装装配指令策划研究
基于NFV的分布式SDN控制器节能机制
乘法猪
智能液位控制器在排水系统中的应用