机组实践实验8——使用CMStudio设计基于基本模型机微程序指令(1)

一、 实验目的

  1. •掌握仿真软件的使⽤
  2. •掌握机器指令的设计⽅法

二、 实验设备

  1. 硬件:无
  2. 软件:CMSstudio

三、 实验内容

  1. • 针对下列指令
    – INL DR – OUTH SR
    – STA [ADDR], SR
    – LD DR, [ADDR]
    – JMP ADDR
  2. • 写出机器指令格式
  3. • 画出微指令流程图
  4. • 使⽤上述指令系统编写程序,实现
    – INPUT读⼊数据保存到ADDR,
    – 将ADDR内容在OUTPUT显⽰。
    – 循环往复
    – 注意:INPUT读⼊到内存和内存输出到OUTPUT所使⽤的寄存器要求不是同⼀个

四、 实验原理

  1. • 程序与数据在同⼀地址空间 • AR作为地址指针来取指 • 增加PC送AR微操作
  2. 程序与数据分开存储,程序段和数据段,还有堆栈段等 • 取指:PC • 取操作码和操作数 • 数据存取:AR
  3. • 栈指针:SP • 栈数据 – 存放在数据段 • 栈数据存取: – SP送AR – 通过AR来实现
  4. • INL DR • OUTL SR • STA [ADDR], SR • LD DR, [ADDR] • JMP ADDR

机组实践实验8——使用CMStudio设计基于基本模型机微程序指令(1)_第1张图片

五、 实验步骤

针对下列指令
– INL DR
– OUTL SR
– JMP ADDR
– ADD DR, SR
1. • 写出机器指令格式
2. • 画出微指令流程图(包括当前地址及下址)
3. • 使⽤上述指令系统编写程序,实现

– 从 INPUT 读⼊数据到 DR
– DR=SR+DR
– DR 数据在 OUTPUT 显⽰
– 循环往复

六、 调试过程、结果和分析

  1. 参考教材,结合自己实际,对调试过程进行记录和分析。
    练习
    • 针对下列指令
    – INL DR
    – OUTL SR
    – JMP ADDR
    – ADD DR, SR

写出机器码格式

机组实践实验8——使用CMStudio设计基于基本模型机微程序指令(1)_第2张图片
设定规则如下

机组实践实验8——使用CMStudio设计基于基本模型机微程序指令(1)_第3张图片
依次解释下为啥要如此设计:

  1. INL RD
    只涉及到RD,所以Rs本质随便设计
  2. JMP ADDR,ADDR题目设计为16位,所以对应就是ARRRL和ADDRH两层
  3. IR7-IR4是用来跳地址的

最后在程序区以及指令系统填写的时候上面的IR7-IR0的部分要转化为16进制显示

比如0010 0000转化成 20

画出微指令流程图(包括当前地址及下址)

根据实验指导书p85,我们可以得到类似的设计
机组实践实验8——使用CMStudio设计基于基本模型机微程序指令(1)_第4张图片
【上图为实验指导书给的样例,下图为鄙人本题目的实现】
机组实践实验8——使用CMStudio设计基于基本模型机微程序指令(1)_第5张图片
需要注意的是,这里002部分的框画错了,应该是RAM->BUS,BUS->IR实现跳转(也就是IR = RAM[AR]
这里RAM表示的是数据区,AR表示的是指向数据区的“指针”)

  1. 使⽤上述指令系统编写程序,实现

– 从 INPUT 读⼊数据到 DR
– DR=SR+DR
– DR 数据在 OUTPUT 显⽰
– 循环往复

;源程序
#LOAD "work8.IS"         ;预调入指令系统/微程序
data    segment         ;将程序全部装载到数据存储器
        assume ds:data

start: 	INL R0
		OUTL R0
		ADD R0,R1
		JMP start

;指令系统部分
;助记符 操作数              指令码 长度
;-----------------------------------------------------
INL     R0                   20     1                 ;input的低字节输入一个数字到通用寄存器R0
OUTL    R0                   40     1                 ;将通用寄存器R0的值输出到output的低字节
JMP     *                    60     3                 ;将ADDR的地址传输给PC
ADD     R0,R1                81     1                 ;将通用寄存器R0和R1内部的数据相加后的结果保存到通用寄存器R0

解释一下为啥这几个分别是20 1,40 1,60 3,81 1

  1. 根据前面鄙人的设计,2代表转换的地址(0001)地址规定为0010(IR7-IR4部分) 寄存器由于指定RD使用R0,IR1和IR0就是00,而剩下的IR3和IR2是影响的,这里设置为00(实际上是把RS设成R0,但是后续微指令用不到这个RS),所以设计为0010 0000,转化为16进制就是20,但实际上,你设置成24 28 2A也是符合要求
  2. 同上,这里是RD用不到,所以设置成41 42 43也是可以的
  3. ADDR占两个地方,所以长度2 加上本来占1,一共是3,RSRD都用不上所以这里60-6F都能设置
  4. 81,8代表要转换的地址。RD是R1 01,RS是R0,00,所以就是 0001,也就是1

微指令设置

在这里插入图片描述
Figure 2散转地址20的情况 需要偶(低地址)传奇(rs

注意在实际操作的时候,若要对REG(寄存器)进行操作,记得 RS偶 RD奇

在这里插入图片描述
Figure 3散转地址40的情况 偶(低地址rd)传偶

在这里插入图片描述
Figure 4散转地址60的情况

在这里插入图片描述
Figure 5散转地址80的情况 相加即可

完全体(剩下变体自行理解了)

指令系统:
;助记符 操作数              指令码 长度
;-----------------------------------------------------
INL     R0                   20     1                 ;input的低字节输入一个数字到通用寄存器R0,用Rd,用低(偶)
INL     R1                   21     1                 ;同上 寄存器为R1
INL     R2                   22     1                 ;同上 寄存器为R2
INL     R3                   23     1                 ;同上 寄存器为R3

OUTL    R0                   44     1                 ;将通用寄存器R0的值输出到output的低字节,因为在Rs,所以用高位(奇)
OUTL    R1                   45     1                 ;同上 寄存器为R1
OUTL    R2                   46     1                 ;同上 寄存器为R2
OUTL    R3                   47     1                 ;同上 寄存器为R3
JMP     *                    60     3                 ;将ADDR的地址传输给PC
ADD     R0,R0                80     1                 ;将通用寄存器R0和R0内部的数据相加后的结果保存到通用寄存器R0
ADD     R0,R1                81     1                 ;将通用寄存器R0和R1内部的数据相加后的结果保存到通用寄存器R0
ADD     R0,R2                82     1                 ;R0+=R2
ADD     R0,R3                83     1                 ;R0+=R3
ADD     R1,R0                84     1                 ;R1+=R0
ADD     R1,R1                85     1                 ;R1+=R1
ADD     R1,R2                86     1                 ;R1+=R2
ADD     R1,R3                87     1                 ;R1+=R3
ADD     R2,R0                88     1                 ;R2+=R0
ADD     R2,R1                89     1                 ;R2+=R1
ADD     R2,R2                8A     1                 ;R2+=R2
ADD     R2,R3                8B     1                 ;R2+=R3
ADD     R3,R0                8C     1                 ;R3+=R0
ADD     R3,R1                8D     1                 ;R3+=R1
ADD     R3,R2                8E     1                 ;R3+=R2
ADD     R3,R3                8F     1                 ;R3+=R3


源程序
;基本模型机程序

#LOAD "work8.IS"         ;预调入指令系统/微程序
#SET RAM 0260h = 5500h  ;数据区0260H单元预置数据5500h,这里没有用处

data    segment         ;将程序装载到数据存储器
        assume ds:data

        org   0
        
start:  INL R0
        ADD R0,R1
        OUTL R0
        JMP start

data    ends
        end   start

你可能感兴趣的:(计算机组成与结构,计算机组成)