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

2023-11-03 09:10

本文主要是介绍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    ;

这篇关于Dais-CMH+实验箱扩展指令实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/337127

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P