Dais-CMH+实验箱扩展指令实现

  1. 设计原理

算术运算

将需要计算的数放入指定寄存器中后调用不同的微操作就可以实现不同的算术运算,需要修改的仅仅是一行代码,下面以减法为例,只需要令CBA=010AN=1,S1=1,S2=1,DR0=1就可以实现DR1-DR2,并且将计算结果放入R0,即微操作为40 26 02 80。

逻辑运算

逻辑运算依旧借助于ALU实现,所以基本流程也是将需要进行逻辑运算的数放入DR1和DR2,然后修改CBA,CN,M,S0,S1,S2,S3就可以实现多种操作,下面不再给出整个微程序。

可以实现的指令

AND,OR,NOT

AND微操作40 17 02 80

OR微操作40 1D 02 80

NOT微操作40 00 02 80

移位运算

移位运算通过74LS299芯片实现,首先将需要进行移位的数值放入299芯片,即置数,然后通过控制S0,S1实现操控299实现左移和右移,通过控制M实现带进位左移和带进位右移。

移位运算的实现需要三步,第一步是将需要移位的数放入299,即A0 0C 00 90;第二步是进行移位操作,即60 04 00 50;第三步是将运算后的数取出放入寄存器,即60 00 02 80。

CALL、RET指令

微程序执行过程中执行到CALL指令时会跳转到CALL指令给出的子程序地址,即将CALL指令给出的子程序入口地址放入PC,再进行PC->AR,执行子程序,但是在跳转到子程序执行之前需要将本来要执行的下一指令的地址保存起来,然后当执行完子程序需要返回时,需要将保存的地址拿出,放入PC,再返回执行,这样就可以实现执行完子程序后继续执行原有程序的功能。

MUL、BZC指令

乘法指令通过连加实现,即将被乘数与乘数放在内存中,先将乘数取出放入R0,作为计数,即表示需要连加多少次才能实现乘法,然后将被乘数取出放入DR1和DR2,进行加法运算,将得出的结果再放入储存被乘数的内存地址中,即表示执行完乘法运算后,被乘数没有被保留,如果要保留被乘数的话,由于寄存器只有R0,DR1,DR2可用,所以需要将中间结果放入某个内存地址,其必然会更繁琐,减慢速度。接下来将R0-1再放入R0,然使用P(Z)标注测试,如果乘数变为0,表示连加完成,否则通过修改PC使其再次执行连加运算,直到R0为全0,即跳出循环,完成乘法。乘法指令这里使用的是简单方法,容易实现但效率不高,更合理的方法在下面。

 

HLT指令

HLT即停机指令,即执行到该指令就停止,不再执行其他指令,可以使其下地址执行本身地址即可。

微指令实现

例:M2C 00 00 00 34

JMP指令

JMP指令可以实现跳转到指定位置,具体实现为将JMP给出的地址放入AR,取出在RAM存储的需要跳转到的位置,放入PC,再次取指执行就可以了,JMP为无条件跳转,而且跳转后由于未保存本来要执行的下一条地址,所以无法返回。

微指令实现

20 00 60 __    ;PC→AR,PC+1

00 C0 20 80    ;RAM→PC

  1. 机器指令程序和微程序码点表

减法

;PXX XX

;DIEZHI JIQIDAIMA

 

P00  40 09          ;LDA DR1,09H        ;

P02  60 0A          ;SUB DR1,0AH        ;

;------------以下为数据空间------------

P09  AA

P0A  55

 

M00  00 00 00 80    ;

M01 20 00 60 40    ;PC→AR,PC+1

M02 00 80 10 12    ;RAM→IR

M03 00 80 40 20    ;RAM→AR

M04 00 80 04 70    ;RAM→DR1 

M05 00 80 40 E8    ;RAM→AR    (0AH)->AR

M06 00 80 08 E0    ;RAM→DR2

M07  40 26 02 80    ;DR1-DR2->R0

M08  00 00 00 80    ;

M09  00 00 00 80    ;

M0A  20 00 60 C0    ;

M0F  00 00 00 80    ;

M10  00 00 00 80    ;

M11  00 00 00 80    ;

M12  00 00 00 80    ;

M13  00 00 00 80    ;

M14  00 00 00 80    ;

M15  00 80 08 E0    ;

M16  00 80 08 E0    ;

M17 00 80 08 E0    ;RAM→DR2

可以实现的指令

ADD,SUB,ADC,SBC

依旧将需要计算的数放入DR1和DR2,最后修改的只是进行计算的那一行微操作。

ADD微操作50 29 02 80

SUB微操作40 26 02 80

ADC微操作50 09 02 80

SBC微操作50 06 02 80

299右移

;PXX XX

;DIEZHI JIQIDAIMA

 

P00  40 09          ;LDA R0,09H        ;

P02  60             ;RR   R0       ;

;------------以下为数据空间------------

P09  55

 

M00  00 00 00 80    ;

M01 20 00 60 40    ;PC→AR,PC+1

M02 00 80 10 12    ;RAM→IR

M03  00 80 40 20    ;RAM-AR,QU09

M04  00 80 04 80    ;RAM-DR1

M08  A0 0C 00 90    ;DR1-299,TO 09

M09  60 04 00 50    ;<<1 55-54

M0A  60 00 02 80    ;299-DR

M0B  20 00 60 A0    ;

M0C  20 00 60 C0    ;

M0D  00 00 00 80    ;

M0E  20 00 60 10    ;PC-AR ,TO 08

M0F  00 00 00 80    ;

M10  60 00 02 80    ;299-DR1

M11  00 00 00 80    ;

M12  00 00 00 80    ;

M13  00 00 00 80    ;

M14  00 00 00 80    ;

M15  00 80 08 E0    ;

M16  00 80 08 E0    ;

M17  00 80 08 E0    ;

可以实现的指令

SHR,SHL

SHR微操作60 04 00 50

SHL微操作60 08 00 50

CALL、RET指令

;CALL

;PXX XX

;DIEZHI JIQIDAIMA

 

P00  40 0B          ;LDA R0,0BH        ;

P02  60             ;SUB   R0       ;

P03  80 23          ;CALL 23H        ;

P05  60             ;SUB   R0       ;

;------------->->->->->->->------------

P0A  55

P0B  AA

P0C  55

;------------->->->------------

P23  A0 0A          ;LDA 0A,DR1

P25  90 0A         ;ADD 0A,DR1

P27  70            ;RET

 

 

M00  00 00 00 80    ;->->->

M01  20 00 60 40    ;PC->AR,PC+1

M02  00 80 10 12    ;RAM->IR

M03  00 80 40 20    ;RAM->AR

M04  00 80 02 80    ;RAM->R0

M05  80 00 04 60    ;R0->DR1

M06  50 2F 02 80    ;DR1-1->R0

M07  50 29 02 80    ;

M0D  60 04 00 48    ;299

M0E  00 00 00 A0    ;PC->AR,PC+1

M0F  00 00 00 58    ;PC->AR,PC+1

M10  60 08 00 48    ;

M11  00 80 08 48    ;RAM->DR2

M12  E0 00 04 C8    ;SP->DR1

M13  42 2F 00 28    ;DR1-1->SP

M14  40 2F 40 84    ;DR1-1->AR qu 21

M15  40 55 20 80    ;DR2->PC

M16  00 80 40 E8    ;RAM->AR

M17  00 80 04 80    ;RAM->DR1

M18  00 80 40 98    ;RAM->AR

M19  40 A3 01 80    ;DR1+DR1->RAM

M1A  E0 00 04 D8    ;SP->DR1

M1B  42 00 00 38    ;DR1+1->SP

M1C  40 20 40 B8    ;DR1->AR

M1D  00 C0 20 80    ;RAM->PC

M1E  00 00 00 80    ;(CY.Z=0->->)

M1F  00 00 80 72    ;(CY.Z=1)

M20  00 00 02 81    ;SW->Rd

M21  20 80 01 A8    ;Rd->299    qu 15

M22  20 00 60 20    ;PC->AR,PC+1

M23  20 00 60 88    ;PC->AR,PC+1

M24  20 00 60 10    ;PC->AR,PC+1

M25  04 00 00 8E    ;0->ED,

M26  20 00 60 50    ;PC->AR,PC+1

M27  20 00 60 1C    ;PC->AR,PC+1

M28  20 00 40 30    ;PC->AR

M29  04 40 00 80    ;1->EA,

M2A  A0 0C 00 B0    ;Rd->299

M2B  04 00 00 80    ;0->EA,

M2C  A0 0C 00 F0    ;Rd->299

M2D  A0 00 04 58    ;Rd->DR1

M2E  A0 0C 00 08    ;Rd->299

M2F  20 00 60 D8    ;PC->AR,PC+1

M30  00 00 00 80    ;

M31  E0 00 04 4C    ;SP->DR1

M32  42 00 00 CC    ;DR1+1->SP

M33  40 20 40 6C    ;DR1->AR

M34  80 00 04 AC    ;Rs->DR1

M35  50 06 00 18    ;DR1-DR2

M36  00 C0 20 80    ;RAM->PC

M37  00 00 00 80    ;

M38  00 80 02 80    ;RAM->Rd

M39  00 00 00 80    ;

M3A  00 00 00 80    ;

M3B  00 00 00 80    ;

M3C  00 00 08 C9    ;SW->DR2

M3D  40 6F 20 3C    ;DR1-1->PC

M3E  20 00 04 BC    ;PC->DR1

M3F  04 40 00 7E    ;1->ED,

 

MUL、BZC指令

;乘法

;PXX XX

;DIEZHI JIQIDAIMA

 

P00  400B          ;LDA  R0,0BH       ;

P02  700A          ;LDA  DR1,0AH       ;

P04  800A          ;ADD  0AH       ;

P06  A0             ;SUB   R0       ;

P07  90             ;BZC             ;

;------------->->->->->->->------------

P0A  03

P0B  02

P0C  55

 

 

 

M00  00 0000 80    ;

M01  20 0060 40    ;PC-AR,PC+1

M02  00 8010 12    ;RAM-IR

M03  00 8040 20    ;RAM-AR

M04  00 8002 80    ;RAM--R0

M05  80 0004 60    ;R0-DR1

M06  50 2F02 80    ;DR1-1->R0

M07  50 2902 80    ;

M0D  60 0400 48    ;299->->

M0E  20 0004 5C    ;PC->DR1 ==3A

M0F  20 0060 68    ;PC->AR,PC+1

M10  60 0800 48    ;

M11  00 8040 48    ;RAM->AR

M12  40 A301 80    ;DR1+DR1->RAM

M13  80 0004 28    ;R0->DR1

M14  50 2F02 F8    ;DR1-1->R0

M15  40 5520 80    ;

M16  00 8040 E8    ;RAM-AR

M17  00 8004 80    ;RAM-DR1

M18  00 8040 98    ;RAM->AR

M19  40 A301 80    ;DR1+DR1->RAM

M1A  E0 0004 D8    ;SP->DR1

M1B  42 0008 38    ;DR1+1->SP

M1C  40 2040 B8    ;DR1->AR

M1D  00 C020 80    ;RAM->PC

M1E  00 0000 80    ;(CY.Z=0->->)

M1F  00 0080 72    ;(CY.Z=1)

M20  00 0002 81    ;

M21  A0 0C00 C0    ;

M22  20 0060 20    ;

M23  20 0060 88    ;

M24  20 0060 10    ;

M25  04 0000 8E    ;

M26  20 0060 50    ;PC->AR,PC+1

M27  20 0060 1C    ;PC->AR,PC+1

M28  20 0040 30    ;PC->AR

M29  04 4000 80    ;

M2A  A0 0C00 B0    ;Rd->299

M2B  04 0000 80    ;

M2C  A0 0C00 F0    ;Rd->299

M2D  A0 0004 58    ;Rd->DR1

M2E  A0 0C00 08    ;Rd->299

M2F  20 0060 D8    ;PC->AR,PC+1

M30  00 0000 80    ;

M31  E0 0004 4C    ;SP->DR1

M32  42 0000 CC    ;DR1+1->SP

M33  40 2040 6C    ;DR1->AR

M34  80 0004 AC    ;

M35  50 0600 18    ;

M36  00 C020 80    ;

M37  00 0000 80    ;

M38  00 8002 80    ;

M39  00 0000 80    ;

M3A  40 6F04 DC    ;DR1-1->DR1   F0

M3B  40 6F04 3C    ;DR1-1->DR1

M3C  40 6F04 BC    ;DR1-1->DR1

M3D  40 6F20 F0    ;DR1-1-DR1

M3E  40 6F20 F0    ;DR1-1->PC

M3F  04 4000 7E    ;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
function generateReport() { try { var getUrl = window.location; var baseUrl = getUrl.protocol + "//" + getUrl.host + "/"; var url = baseUrl + 'polarion/ImpactAnalysisTree/ImpactAnalysisTree?projectId=' + projectId; var parameters = ""; var Id = false; var title = false; var workItemId = document.forms["tracegraph"]["itemId"]; if (workItemId != null) { if (!workItemId.value.trim().length == 0) { parameters = '&op=search&workItemId=' + workItemId.value; Id = true; } } if (!Id) { $(".widget-errors").text("Enter a valid Work Item ID /Title to generate traceability report.").show(); return false; } setTimeout(function() { var jsonTree = [{"name": "DAIS-2183","title": "系统架构测试使用","image": "/polarion/icons/default/enums/type_purple_feature.png","url": "#/project/DAISCHproject/workitem?id=DAIS-2183","nodeDispText": "DAIS-2183 : 系统架构测试使用","nodeDispType": "7","parent": "null","backlinked": [{"name": "DAIS-2332","title": "集成","image": "/polarion/icons/default/enums/type_purple_testcase.png","url": "#/project/DAISCHproject/workitem?id=DAIS-2332","nodeDispText": "DAIS-2332 : 集成","nodeDispType": "7","parent": "DAIS-2183","linkcolor": "#ccc","backlinked": [{"name": "DAIS-2333","title": "任务","image": "/polarion/icons/default/enums/type_task.gif","url": "#/project/DAISCHproject/workitem?id=DAIS-2333","nodeDispText": "DAIS-2333 : 任务","nodeDispType": "7","parent": "DAIS-2332","linkcolor": "#ccc","backlinked": []}]}],"linked": [{"name": "DAIS-2320","title": "系统需求","image": "/polarion/icons/default/enums/type_purple_spec.png","url": "#/project/DAISCHproject/workitem?id=DAIS-2320","nodeDispText": "DAIS-2320 : 系统需求","nodeDispType": "7","parent": "DAIS-2183","linkcolor": "#ccc","linked": []},]}]; root = jsonTree[0]; root.x0 = height / 2; root.y0 = width; console.log(root); var t1 = d3.layout.tree().nodeSize([30, 10]) .separation(function separation(a, b) { return a.parent == b.parent ? 1.2 : 1.4; }) .children(function(d) { return d.linked; }); var t2 = d3.layout.tree().nodeSize([30, 10]) .separation(function separation(a, b) { return a.parent == b.parent ? 1.2 : 1.2; }).children(function(d) { return d.backlinked; }); t1.nodes(root); t2.nodes(root); var rebuildChildren = function(node) { node.children = getChildren(node); if (node.children) node.children.forEach(rebuildChildren); } rebuildChildren(root); root.isRight = false; update(root); }); $(location).attr('href', url+parameters); } catch (e) { console.log(e); alert(e); } return false; } 使用ajax重新渲染页面
最新发布
07-15

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值