1.实验目的
- 完成算术、逻辑、移位运算实验。
- 熟悉ALU运算控制位的运用。
2.实验设备
Dais-CMX16 计算机组成原理教学实验系统一台。
3.实验原理
实验中所用的运算器数据通路如图 2-4-1 所示。ALU运算器由 CPLD描述。运算器的输出经过2片74LS245三态门与数据总线相连,2个运算寄存器 AX、BX的数据输入端分别由4个74LS574锁存器锁存,锁存器的输入端与数据总线相连,准双向 I/O 输入输出端口用来给出参与运算的数据,经2片74LS245三态门与数据总线相连。
**4.** **实验内容**
1. 字算术运算
(1) 字写操作(置数操作)
通过“I/O 单元”二进制开关向寄存器AX和BX置数令X2,X1,X0=011,XP,W=11,I/O端设置为1122h,设置o2,o1,o0=011,OP=1,按单拍此时寄存器AX被置为1122h,再将置数端设置为3344h,o2,o1,o0=010,OP=1,按单拍。此时BX被置为3344h
(2) 字读操作(运算寄存器 AX 和 BX 内容送总线)
令o2o1o0=000,同时OP=0,关闭写使能,在令X2,X1,X0=001,XP,W=11读取数据总线位置的数据,先后令M=0,S2,S1,S0=000和M=0,S2,S1,S0=111使fun先后显示 AX值与BX值
(3) 字算术运算(不带进位加)
令 M S2 S1 S0(K15 K13~K11=1011),FUN 及总线单元显示 AX+BX 的结果。
令 M S2 S1 S0(K15 K13~K11=1010),FUN 及总线单元显示 AX-BX 的结果。
*2.* *字节算术运算*
(1) 偶字节写(置数操作)
拨动“I/O 输入输出单元”开关向寄存器 ALBL置数X2 X1 X0=011XP,W=10 拨动开关令I/O=XX22h令o2o1o0=011,OP=1,按单拍向寄存器AL写入偶字节22h,o2,o1,o0=010,OP=1,拨动开关令I/O=XX44h按单拍寄存器BL写入44h。
(2) 偶字节读操作(运算寄存器 AL 和 BL 内容送总线)
令o2o1o0=000,同时OP=0,关闭写使能,在令X2,X1,X0=001,XP,W=10读取数据总线位置的数据,先后令M=0,S2,S1,S0=000和M=0,S2,S1,S0=111使fun先后显示 AL值与BL值
(3) 偶字节减法运算(不带进位加)
令M,S2,S1,S0(K15 K13~K11=1011),FUN及总线单元显示 AL+BL的结果。
令M,S2,S1,S0(K15 K13~K11=1010),FUN及总线单元显示 AL-BL的结果。
示例 2 逻辑运算
*1.* *字逻辑运算*
(1) 字写操作(置数操作)
通过“I/O 单元”二进制开关向寄存器AX和BX置数令X2,X1,X0=011,XP,W=11,选定数据来源为I/O单元,I/O端设置为1122h,设置o2,o1,o0=011,OP=1,按单拍此时寄存器AX被置为1122h,再将置数端设置为3344h,o2,o1,o0=010,OP=1,按单拍。此时BX被置为3344h
(2) 字读操作(运算寄存器 AX 和 BX 内容送总线)
令o2o1o0=000,同时OP=0,关闭写使能,在令X2,X1,X0=001,XP,W=11读取数据总线位置的数据,先后令M=0,S2,S1,S0=000和M=0,S2,S1,S0=111使fun先后显示 AX值与BX值 若运算控制位设为(M S2 S1 S0=0000)则F=AL,即AL内容送到数据总线。若运算控制位设为(M S2S1S0=0111)则F=BL,即BL内容送到数据总线。
(3) 字逻辑运算
令M,S2,S1,S0(K15 K13~K11=0010),为逻辑与,FUN及总线显示AX逻辑与BX的结果。
令M,S2,S1,S0(K15 K13~K11=0011),为逻辑或,FUN及总线显示AX逻辑或BX的结果。
*2.* *字节逻辑运算*
(1) 偶字节写操作(置数操作)
拨动“I/O 输入输出单元”开关向寄存器 AL 和 BL 置数,令X2,X1,X0=011,XPW=10 选定数据来源为I/O设备置数为XX22h,拨动开关使o2 o1 o0=011 OP=1,按单拍寄存器AL 为22h,再次置数 使得I/O=XX44h,令o2,o1,o0=010 OP=1,按单拍,此时寄存器BL为44h
(2) 偶字节读操作(运算寄存器 AL 和 BL 内容送数据总线)
o2,o1,o0=000 OP=0关闭写使能 X2,X1,X0=001 XP W=10分别令M=0 S2 S1 S0=000 与M=0,S2,S1,S0=111使得数据总线分别显示AL,BL。
① 若运算控制位设为(M S2 S1 S0=0000)则 F=AL,即 AL 内容送到数据总线。
② 若运算控制位设为(M S2 S1 S0=0111)则 F=BL,即 BL 内容送到数据总线。
(3) 偶字节逻辑运算
令 M S2 S1 S0(K15 K13~K11=0010),为逻辑与,FUN 及总线显示 AL 逻辑与 BL 的结果。
令 M S2 S1 S0(K15 K13~K11=0011),为逻辑或,FUN 及总线显示 AL 逻辑或 BL 的结果。
(4) 奇字写操作(置数操作)
拨动“I/O 输入输出单元”开关向寄存器AH和BH置数,操作步骤如下:X2 X1 X0=011 XP W=10选定数据来源为I/O设备置数I/O=XX55h,随后令o2,o1,o0=011 OP=0,按单拍寄存器AH此时的数据为55h再次对I/O单元置数,I/O=XX66h令o2o1o0=010,OP=0,按单拍寄存器BH写入数据66h。
(5) 奇字节读操作(运算寄存器 AH 和 BH 内容送总线)
关闭 AH、BH 写使能,令 K17=K18=1,按下流程分别读 AH、BH。
o2,o1,o0=000 OP=0关闭写使能 X2,X1,X0=001 XP W=00分别令M=0 S2 S1 S0=000 与M=0,S2,S1,S0=111使得数据总线分别显示AH,BH。
① 若运算控制位设为(M S2 S1 S0=0000)则 F=AH,即 AH 内容送到数据总线。
② 若运算控制位设为(M S2 S1 S0=0111)则 F=BH,即 BH 内容送到数据总线。
(6) 奇字节逻辑运算
令M,S2,S1,S0(K15 K13~K11=0010),为逻辑与,FUN及总线显示AH逻辑与BH的结果。
令M,S2,S1,S0(K15 K13~K11=0011),为逻辑或,FUN及总线显示AH逻辑或BH的结果。
5.实验心得
作为验证型实验根据实验指导手册做很简单,但是我们学习不能仅仅只停到这一步,还是要了解实验操作背后的实验原理,明白每一步操作所对应的逻辑功能,比简单的重复完成这一个实验更加重要。
实验二 通用寄存器实验
1.实验目的
(1) 熟悉通用寄存器的数据通路。
(2)掌握通用寄存器的构成和运用。
2.实验设备
Dais-CMX16 计算机组成原理教学实验系统一台。
3.实验要求
在掌握了AX、BX运算寄存器的读写操作后,继续完成CX、DX通用寄存器的数据写入与读出。
4. 实验原理
目标使能 | 通用寄存器目标编址 | 功能说明 | |||
---|---|---|---|---|---|
K19~K17 | IR | K16 | K6 | T4 | |
o2~o0 | IR1 | OP | W | ||
111 | 0 | 1 | 1 | ↑ | CX字写 |
0 | 1 | 0 | ↑ | CL偶字节写(R0) | |
0 | 0 | X | ↑ | CH奇字节写(R1) | |
1 | 1 | 1 | ↑ | DX字写 | |
1 | 1 | 0 | ↑ | DL偶字节写(R2) | |
1 | 0 | X | ↑ | DH奇字节写(R2) |
5****.实验内容
(1)寄存器组的字写入:
通过“I/O 单元”把CX的地址00打入IR,然后向CX写入2211h,操作步骤如下:令X2 X1 X0=011 XP W=11选定数据来源为I/O单元,令I/O=XX00h写入数据,令IR=XX00h,MWR IR=11 OP=1,按单拍之后将MWR,IR置为0,0防止数据再次写入,再将置数据I/O=2211h o2 o1 o0=111 OP=1,按单拍此时CX的数据为=2211h
通过I/O单元把DX的地址02打入IR然后向DX写入4433h,操作步骤如下:X2,X1,X0=011同时XP W=11选的数据来源为I/O单元 拨动I/O单元使得I/O=XX02h,再令MWR,IR=11OP=1,按单拍此时IR=XX02h,此时DX的地址02打入IR,在令MWR,IR=00,令I/O=4433h,o2o1o0=111 OP=1,按单拍将数据写入DX,此时DX的数据为DX=4433h
(2) 寄存器组的字节写入:
通过I/O单元把CX的地址00打入IR,然后向CH写入55h操作步骤如下:令X2,X1,X0=011同时XP W=11选的数据来源为I/O单元,拨动I/O单元使得I/O=XX02h,拨动开关使MWR IR=11,OP=1,按单拍把CX的地址00打入IR,在令MWR,IR=00防止地址再次写入,令W=0将I/O区域的值置为XX55h,同时令o2 o1 o0=111,OP=0,按单拍将55h写入CH。
在IR保持为xx00的条件下,可省略打地址环节.按下流程向CL写入AAh令X2,X1,X0=011同时XP W=10选定数据来源为I/O单元,拨动I/O单元开关使得I/O=XXAAh,拨动开关将o2,o1, o0置为111同时OP=0,按单拍将数据55h写入CL,在令o2 o1 o0=000关闭写选通。
(3)寄存器组字读:
通过I/O 单元把 CX 地址打入IR,然后CX送总线,操作步骤如下:令X2 X1 X0=011,同时XP W=11选定数据来源为I/O单元,拨动I/O单元开关使得I/O=XX00h ,设置MWR IR=11 OP=1,按单拍把CX的地址打入总线MWR IR=00防止后续继续有数据传入令X2 X1 X0=110同时XP W=11 IR端显示来源于CX的数据。
通过I/O单元把DX地址打入IR,然后DX送总线,操作步骤如下:X2,X1,X0=011同时XP W=11选定数据来源为I/O单元,拨动I/O单元开关使得I/O=XX02h MWR IR=11 OP=1,按单拍再将MWR IR置为0 防止后续继续有数据传入令X2 X1 X0=110 XP W=11此时IR端显示来源于DX的数据
(4) 寄存器组字节读:
通过I/O单元把 CX 地址打入 IR,然后按字节方式分别读出 CL、CH。令X2,X1,X0=011同时XP,W=11选定数据来源为I/O单元,拨动I/O单元开关使得I/O=XX00h再将MWR,IR分别置为1,再设置OP=1,按单拍 将CX的地址打入IR,此时IR=XX00h,MWR IR=00 ,令X2 X1 X0=110 ,XP, W=10此时IR的数据来源于CL;在令 X2 X1 X0=110 ,XP W=00此时IR的数据来源于CH。
6.实验心得
第二次的计算机组成原理的实验课,实验内容甚至比上次更少,最让人印象深刻的是课件和《计算机组成原理实验指南》上对实验的操作存在错误,这个也更要求我们掌握实验原理能够真正理解实验本质。在完成CX、DX通用寄存器的数据写入与读出的实验操作后,已经能够做到熟悉通用寄存器的数据通路和掌握通用寄存器的构成和运用。
实验三 存储器****读写实验
1.实验目的
熟悉和了解存储器组织与总线组成的数据通路。
2.实验设备
Dais-CMX16 计算机组成原理教学实验系统一台。
3.实验要求
按照实验步骤完成实验项目,掌握存储部件在原理计算机中的运用。
4. 实验原理
存储器是计算机的存储部件,用于存放程序和数据。存储器是计算机信息存储的核心,是计算机必不可少的部件之一,计算机就是按存放在存储器中的程序自动有序不间断地进行工作。本系统从提高存储器存储信息效率的角度设计数据通路,按现代计算机中最为典型的分段存储理念把存储器组织划分为程序段、数据段等,由此派生了数据总线(DBus)、指令总线(IBus)微总线(μBus)等与现代计算机设计规范相吻合的实验环境。实验所用的存储器电路原理如图 2-4-10 所示,该存储器组织由二片 6116 构成具有奇偶概念的十六位信息存储体系,该存储体系AddBus由IP指针和AR指针分时提供,E/M 控位为“1”时选通IP,反之选通 AR。该存储体系可随机定义总线宽度,动态变更总线结构,把我们的教学实验提高到能与现代计算机设计规范相匹配与接轨的层面。
程序段与数据段源寻址 | ||||||
---|---|---|---|---|---|---|
源使能 | 源编址 | 注释 | ||||
X2 | X1 | X0 | E/M | W | A0 | |
1 | 0 | 0 | 0 | 1 | 0 | 程序段字读 |
0 | 0 | 程序段偶读 | ||||
X | 1 | 程序段奇读 | ||||
1 | 1 | 0 | 数据段字读 | |||
0 | 0 | 数据段偶读 | ||||
X | 1 | 数据段奇读 |
程序段与数据段目的寻址 | ||||
---|---|---|---|---|
目的编址 | 注释 | |||
MWR | E/M | W | A0 | |
1 | 0 | 1 | 0 | 程序段字写 |
0 | 0 | 程序段偶写 | ||
X | 1 | 程序段奇写 | ||
1 | 1 | 0 | 数据段字写 | |
0 | 0 | 数据段偶写 | ||
X | 1 | 数据段奇写 |
5****.实验内容
1. 数据段读写操作
(1) 数据存储器字写
在进行数据存储器字操作时,地址线A0必须为0(偶地址)。向数据段的0~0005h存储单元写入112233445566一串数据,以0址单元写入数据1122h为例表述操作流程。
按照上述操作流程完成 0002~0005h单元写入33445566的操作。
I/0输入地址0000h(DBUS=0000h)将其写入AR,关闭地址写入;I/O输入数据1122h(DBUS=1122h)将其存入地址为0000和0001中,EM显示2211,关闭存储写入。
I/0输入地址0002h(DBUS=0002h)将其写入AR,关闭地址写入;I/O输入数据3344h(DBUS=3344h)将其存入地址为0002和0003中,EM显示4433,关闭存储写入。
I/0输入地址0004h(DBUS=0004h)将其写入AR,关闭地址写入;I/O输入数据5566h(DBUS=5566h)将其存入地址为0004和0005中,EM显示6655,关闭存储写入。
(2) 数据段读操作(字)
依次读出数据段0~0005h单元的内容,这里以0址单元读出为例阐述操作流程。
执行上述流程总线单元应显示1122h;若正确可按上述流程读出 0002~0005h 单元的内容。
I/O置地址0000将其写入AR,关闭写入;E/M=1,EM显示地址对应存储内容为2211。读出操作,DBUS显示为1122
I/O置地址0002将其写入AR,关闭写入;E/M=1,EM显示地址对应存储内容为4433。读出操作,DBUS显示为3344
I/O置地址0004将其写入AR,关闭写入;E/M=1,EM显示地址对应存储内容为6655。读出操作,DBUS显示为5566
2. 存储器程序段读写操作
(1)程序段字节写操作
① 计算机规范的取指操作均以字节为单位。所以本实验以字节操作方式展开。程序段写入必须从定义地址入手,然后再进入程序存储器的写入。
② PC 指针是带预置加法计数器,因此在输入起始地址后一旦后续地址为 PC 1的话就不需重装 PC,用PC 1指令完成下续地址的读写操作。
③PC地址装载写入与PC 1写入流程
按照上述PC装载写入与PC 1写入的流程分别对0000~0003h写入12345678h。
I/O置地址为0000,将地址写入PC为0000,关闭地址写入;I/O数据为3412,数据写入EM显示为1212。地址增加为0001,将3434写入EM。
I/O置地址为0002,将地址写入PC为0002,关闭地址写入;I/O数据为7856,数据写入EM显示为5656。地址增加为0003,将7878写入EM。
(2)程序段字节读操作
PC地址装载读出及 PC 1读出流程
按照上述PC装载读出与PC 1读出的流程分别读出0000~0003h单元内容,应为12345678h。
I/O置地址为0000,将地址写入PC为0000,关闭地址写入;选通存储器打开将数据写入总线,EM显示1212。IP置1,单拍使地址 1,当地址为0001时EM显示3434;IP置1,单拍使地址 1,当地址为0002时EM显示5656;IP置1,单拍使地址 1,当地址为0003时EM显示7878;
6.实验心得
1. EM与I/O内容显示不同:2211h -> 1122h
原因:EM显示的内容低位在前。
2. 程序段字节读操作: I/O口拨数据7856h,执行上面的方框L:4(XP=1)->3(IP=0)->4->5
E/M=0,且IP=1时,PC 1
实验四 中断控制实验
1.实验目的
(1) 熟悉中断的硬件机制。
(2) 了解中断的编程规则。
(3)掌握中断的控制方法。
2.实验设备
Dais-CMX16 计算机组成原理教学实验系统一台。
3.实验要求
所谓中断就是指处理机暂时终止执行现行程序而转去处理更加紧迫的事件服务程序,待处理机完毕后再自动返回执行原来的程序过程。
按图2-4-12所示,本系统提供了一个单级中断硬件机制,由中断请求源INT、中断允许标志IEQ和中断响应标志IAQ组成。
微程序控制器每执行一条机器指令之后,先查询中断允许标志IEQ,如果IEQ为0,则继续执行下一条机器指令,若检测到IEQ为1,则强制转入微程序控制器的0003h号单元执行中断响应微服务。期间程序首先置位中断响应标志IAQ,其次执行当前PC的进栈操作,然后按照机器程序的要求随机定义中断向量,把中断服务程序入口地址装入程序计数器PC中,转入中断服务子程序的执行。
遇RET指令,执行中断服务返回微操作,清除中断服务响应标志IAQ,把栈顶所指单元的内容装入程序计数器PC中,恢复执行被中断的机器程序。
4. 实验原理
K16 | K6 | K3 | 按钮 | 节拍 | 功能 | 说明 |
---|---|---|---|---|---|---|
Op | W | Ie | INT | T4 | ||
0 | 0 | 1 | 0 | ↑ | 1→IEQ | 锁存中断请求 |
0 | 1 | 1 | X | ↑ | 0→IEQ | 清除中断请求 |
K7 | K6 | K3 | K0 | 节拍 | 功能 | 说明 |
---|---|---|---|---|---|---|
Op | W | Ie | Ids | T4 | ||
1 | 0 | 1 | 0 | ↑ | 1→IAQ | 中断响应 |
1 | 1 | 1 | 0 | ↑ | 0→IAQ | 中断退出 |
5.实验****内容
中断允许控制
用一双头实验导线将中断请求源输入插孔XINT与中断源产生插孔INT相连接。
将K23~K0全部置为0,关闭控制位,将OP,W,IE三个开关置为001,按住中断按钮将INT置为0,按单拍,打入一个上升沿,此时D触发器D=1;CP为上升沿,又D触发器的现态1变为0。Q`=0,此时指示灯IEQ亮起,在令OP,W,IE=011,打入一个上升沿,此D触发器D=1,CP为上升沿,D触发器的现态有0变为1,Q’=1,指示灯两端电压相等,指示灯不会亮起此时IEQ灯灭。
将K23~K0全部置为0,关闭控制位,将OP,W,IE三个开关置为101,按单拍IEQ灯亮起,随后将OP,W,IE三个开关置为111,按单拍打入一个上升沿,IAQ灯灭。
6****.实验心得
中断控制方式就是实时控制、故障自动处理。它的基本过程是计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
时隔半个月在上计算机组成原理的实验课,这次的实验课内容格外的少,也更有时间去思考每一步操作所对应的电路原理,对电路上的触发器的复习,使我对这个实验的认识更加的深刻。
实验****五 基本模型机的设计与实现
1.实验目的
(1) 在掌握部件单元电路实验的基础上,构造一台基本模型计算机。
(2) 为其定义5条机器指令,并编写相应的微程序,上机调试掌握整机概念。
2.实验设备
Dais-CMX16 计算机组成原理教学实验系统一台;
计算机一台。
3.实验****原理
手动控制实验过程中,各部件单元的控制信号是以人为模拟产生为主,而本次实验将能在微程序控制下自动产生各部件单元的控制信号,实现特定指令的功能。
计算机数据通路的控制将由微程序控制器来完成,CPU从EM主存中取出一条机器指令到指令执行结束的一个指令周期全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。
4. 指令格式
1.指令格式
7 6 5 | 4 | 3 2 | 1 0 |
---|---|---|---|
OP-CODE | 0 | Rs | Rd |
Addr |
其中OP-CODE为操作码段,位于指令字节高三位(IR7~IR5);第四位IR4是保留位,指定为零;低四位为源与目的寄存器地址,它们的编码见下表;Addr定义操作数或操作地址。
Rs或Rd | 选定的寄存器 |
---|---|
00011011 | R0R1R2R3 |
2.指令系统
助记符 | 机器指令码 | 说明 |
---|---|---|
IN R0,IOL | 00100000 | i/o(数据开关)偶字节→r0 |
ADD R0,[addr] | 01000000 XXXXXXXX XXXXXXXX | R0 [addr]→R0 |
STA [addr],R0 | 01100000 XXXXXXXX XXXXXXXX | R0→[addr] |
OUT [addr],IOH | 10000000 XXXXXXXX XXXXXXXX | RAM→i/o(奇字节) |
JMP addr | 10100000 XXXXXXXX XXXXXXXX | addr→PC |
实验所用的机器指令程序
地址 | 指令代码 | 助记符 | 功能 |
---|---|---|---|
000 | 20 | in r0,ioL | IOL(数据开关)偶字节→R0 |
001 | 40 00 | add r0,[RAM] | R0 RAM→R0 |
003 | 70 | RRC r0 | R0带进位右移→R0 |
004 | 10 | rl r0 | R0左移→R0 |
005 | 60 01 | sta [RAM],r0 | R0→RAM |
007 | 80 01 | out ioH,[RAM] | RAM→I/O奇字节 |
009 | A0 00 | jmp 000h | RAM→PC |
基本模型机微程序流程图
5.实验方法
打开——mxj1.asm,装载,微单步(无法联机时,跳过联机步骤,直接装载也可以做实验)
;基本模型机程序
#LOAD “MXJ1.IS” ;预调入指令系统/微程序
#SET RAM 0260h = 5500h ;数据区0260H单元预置数据5500h
data segment ;将程序装载到数据存储器
assume ds:data
org 0
start: in r0, iol
add r0, 0260h
sta 0261h, r0
out ioh, 0261h
jmp start
data ends
end start
PC=AR,AR通过地址获得RAM中的数据。初始状态PC=0000.将PAM数据2040高位20置入IR=2020.I/O输入FFFF,将其置入CX=FFFF。PC=0001,将PAM数据2040低位40置入IR=4040。通过程序计数器PC不断加1,将数据存储器RAM中的数据调出。PC=0002,6002先调出高位60,PC 1,PC=0003,再调出低位02,BX=0260。AX=0000,运算器ALU计算FUN=0260,数据置入AR=0260,RAM=5500。55置入BX低位,BX=0255;CX值FF置入AX低位,,AX=00FF,运算器ALU计算FUN=0254。低位54置入CX低位,CX=FF54。PC 1,PC=0004,PC=AR,AR通过地址获得RAM中的数据6061,PC=0004,60置入IR=6060;PC=0005,61置入BX低位BX=0261;PC=0006,PC=AR,AR通过地址获得RAM中的数据0280。AX=00FF,BX=0261,运算器ALU计FUN=0261。
6.实验心得
姑且算是第一次使用软件模拟计算机进行计算机组成系统的实验吧,难度在于这个汇编语言的不了解,按照老师可上要求走的话并没有太大难度,但是总是感觉有些地方没有清楚。
实验六 分段****模型机的设计与实现
1.实验目的
(1) 在掌握基本模型机的基础上,构造一台含有段概念(程序与数据)分段寻址的模型机。
(2) 机器指令与基本模型机相同的情况下编写段式的微程序,上机调试掌握段概念运用。
2.实验设备
Dais-CMX16 计算机组成原理教学实验系统一台;
计算机一台。
3.实验****原理
在基本模型机的实践中,CPU的取指以AR作为地址指针,在微程序流程中必须要通过PC送AR这一途径完成操作码与操作数的存取,这种瓶颈现象降低了CPU的工作效率,仅适用于基础教学,与通用机的设计规范差距甚远。
目前通用机的规范寻址方式通常把存储器组织分为程序段、数据段、堆栈段……地址指针的定义由此分为程序指针、数据指针、堆栈指针等,进一步提高了CPU的工作效率。
段式模型机在取指时直接默认PC指针,完成操作码与操作数的存取。使我们的模型机设计“不存在”也“不需要”考虑指令预取的问题。
*指令系统:*
助记符 | 机器指令码 | 说明 |
---|---|---|
IN R0,IOL | 00100000 | i/o(数据开关)偶字节→r0 |
ADD R0,[addr] | 01000000 XXXXXXXX XXXXXXXX | R0 [addr]→R0 |
STA [addr],R0 | 01100000 XXXXXXXX XXXXXXXX | R0→[addr] |
OUT [addr],IOH | 10000000 XXXXXXXX XXXXXXXX | RAM→i/o(奇字节) |
JMP addr | 10100000 XXXXXXXX XXXXXXXX | addr→PC |
分段模型机数据通路
实验所用的机器指令程序
地址 | 指令代码 | 助记符 | 功能 |
---|---|---|---|
000 | 20 | in r0,ioL | i/o(数据开关)偶字节→r0 |
001 | 40 60 02 | add r0,[addr] | r0 RAM→r0 |
004 | 60 61 02 | sta [addr],r0 | r0→RAM |
007 | 80 61 02 | out [addr],ioH | RAM→i/o(奇字节) |
00a | a0 00 00 | jmp 000h | RAM→pc |
4. 实验****方法
打开——mxj2.as,装载,微单步
微址00002)1) | M23 | M22 | M21 | M20 | M19 | M18 | M17 | M16 | 代码 | M15 | M14 | M13 | M12 | M11 | M10 | M9 | M8 | 代码 | M7 | M6 | M5 | M4 | M3 | M2 | M1 | M0 | 代码 | 后续微址 | 说明 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
E/M | IP | MWR | R/M | o2 | o1 | o0 | OP | M | CN | S2 | S2 | S0 | X2 | X1 | X0 | XP | W | ALU | Iu | IE | IR | Icz | Ids | ||||||
000 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00 | 1 | 空操作 |
001 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 43 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 05 | 可变 | IBUS→IR |
600 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 5A | 001 | 关中断 |
640 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0E | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 03 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 92 | 001 | I/O→R0 |
680 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 05 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 20 | 1 | RAM→BL |
681 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 44 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 20 | 1 | RAM→BH |
682 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 43 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 39 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | F0 | 6A0 | BX→AR |
6A0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 85 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 20 | 1 | RAM→BL |
6A1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 07 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 06 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 20 | 1 | R0→AL |
6A2 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0E | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 99 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | B2 | 001 | A B→R0 |
6C0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 05 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 20 | 1 | RAM→BL |
6C1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 44 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 20 | 1 | RAM→BH |
6C2 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 43 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 39 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | F0 | 6E0 | BX→AR |
6E0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | A0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 06 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 12 | 001 | R0→RAM |
700 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 05 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 20 | 1 | RAM→BL |
701 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 44 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 20 | 1 | RAM→BH |
702 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 43 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 39 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | F0 | 720 | BX→AR |
720 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 8A | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 12 | 001 | RAM→I/O |
740 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 05 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 20 | 1 | RAM→BL |
741 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 30 | 760 | RAM→BH |
760 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | C0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 39 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | F2 | 001 | BX→PC |
780 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1A | 001 | 开中断 |
7C0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 01 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 48 | 1 | IAQ清零 |
;分段模型机程序
#LOAD “MXJ2.IS” ;预调入指令系统/微程序
#SET RAM 0260h = 5500h ;数据区0260H单元预置数据5500h
org 0
start: in r0, iol
add r0, 0260h
sta 0261h, r0
out ioh, 0261h
jmp start
End
5.实验心得
实验数据区0260H单元预置数据5500h,装载实验之后再将I/O端的低位数据置为44,执行微单步,程序计数器PC=0001,从程序去区读出2040,并将其赋予IR,继续执行微单步,此时执行add r0, 0260h微指令,从I/O地址中读出低位数据44,将其付给CL,继续执行微单步,PC自增,程序微地址 600,来到add程序将ROM中的地址通过总线传输给BX,PC 1,BX读入0260H。此时继续执行微单步,通过BX将待读取的地址通过ALU送给AR,继续执行微单步,从数据区0260位置读取出数据,将55付给BX的第八位,继续执行微单步将CX中低八位数据44送给AX,ALU做加法运算,通过总线将数据送给CX的第八位,此时数据为99H,接着执行数次微单步,将CX中的数据赋值给数据区0260的低八位,程序运行结束后,此时的数据为5599.
实验确实不难,跟着程序走一遍就很清楚,但是具体的工作原理就是在一步步的执行微单步过程中,理解分段模型机程序每一次微单步下的活动。
实验七 带移位运算的****模型机的设计与实现
1.实验目的
(1) 编制模型机移位运算控制逻辑的CM存储项。
(2) 熟悉和掌握存储逻辑控制器的调试方法与步骤。
2.实验设备
Dais-CMX16 计算机组成原理教学实验系统一台;
计算机一台。
3.实验****原理
本实验在实验二(分段模型机)的基础上扩充移位控制指令,实现移位控制运算。
实验中新增4条移位运算指令:RL(左环移)、RLC(带进位左环移)、RR(右环移)、RRC(带进位右环移),其指令格式如下:
*助记符* | *机器指令码* | *说明* |
---|---|---|
*RR R0* | *01010000* | *R0寄存器内容右移* |
*RRC R0* | *01110000* | *R0寄存器内容带进位右移* |
*RL R0* | *00010000* | *R0寄存器内容左移* |
*RLC IOH* | *00110000* | *R0寄存器内容带进位左移* |
分段模型机数据通路
4. 实验****方法
;移位模型机程序
#LOAD “MXJ3.IS” ;预调入指令系统/微程序
org 0
start: in r0, iol
add r0, 00h
rrc r0
rl r0
sta 01h, r0
out ioh, 01h
jmp start
end
5.实验心得
微址00002)1) | M23 | M22 | M21 | M20 | M19 | M18 | M17 | M16 | 代码 | M15 | M14 | M13 | M12 | M11 | M10 | M9 | M8 | 代码 | M7 | M6 | M5 | M4 | M3 | M2 | M1 | M0 | 代码 | 后续微址 | 说明 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
E/M | IP | MWR | R/M | o2 | o1 | o0 | OP | M | CN | S2 | S2 | S0 | X2 | X1 | X0 | XP | W | ALU | Iu | IE | IR | Icz | Ids | ||||||
000 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00 | 1 | 空操作 |
001 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 43 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 05 | 可变 | IBUS→IR |
600 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 12 | 001 | 空操作 |
620 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 07 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 06 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 20 | 1 | R0→AL |
621 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0E | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 89 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | B2 | 001 | RL A→R0 |
640 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0E | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 03 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 92 | 001 | I/O→R0 |
660 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 07 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 06 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 20 | 1 | R0→A |
661 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0E | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | A9 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | B2 | 001 | RL A→R0 |
680 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 05 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 20 | 1 | ROM→BL |
681 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 43 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 39 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | E0 | 1 | BX→AR,PC 1 |
682 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 85 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 20 | 1 | RAM→BL |
683 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 07 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 06 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 20 | 1 | R0→AL |
684 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0E | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 99 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | B2 | 001 | A B→R0 |
6A0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 07 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 06 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 20 | 1 | R0→A |
6A1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0E | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 81 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | B2 | 001 | RR A→R0 |
6C0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 05 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 20 | 1 | ROM→BL |
6C1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 43 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 39 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | E0 | 1 | BX→AR,PC 1 |
6C2 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | A0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 06 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 12 | 001 | R0→RAM |
6E0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 07 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 06 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 20 | 1 | R0→A |
6E1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0E | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | A1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | B2 | 001 | RR A→R0 |
700 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 05 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 20 | 1 | ROM→BL |
701 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 43 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 39 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | E0 | 1 | BX→AR,PC 1 |
702 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 8A | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 12 | 001 | RAM→I/O |
720 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 40 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 12 | 001 | CY置1 |
740 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 05 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 04 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 20 | 1 | ROM→BL |
741 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | C0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 39 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | F2 | 001 | BX→PC |
760 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 00 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 40 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 52 | 001 | BX→PC |
实验八 中断****模型机的设计与实现
1.实验目的
了解“中断源”的硬件构造,掌握中断源微控制流程,设计和实现中断源在模型机中的运用。
2.实验设备
Dais-CMX16 计算机组成原理教学实验系统一台;
计算机一台。
3.指令系统
*助记符* | *机器指令码* | *说明* |
---|---|---|
*IN R0,IOL* | *00100000* | *I/O(数据开关)偶字节→R0* |
*ADD R0,[addr]* | *01010000 XXXXXXXX XXXXXXXX* | *R0 [addr]→R0* |
*STA [addr],R0* | *01110000 XXXXXXXX XXXXXXXX* | *R0→[addr]* |
*OUT [addr],IOH* | *10010000 XXXXXXXX XXXXXXXX* | *[addr]→I/O奇字节* |
*JMP addr* | *10110000 XXXXXXXX XXXXXXXX* | *addr→PC* |
程序清单
*地址* | *指令代码* | *助记符* | *功能* |
---|---|---|---|
*000* | *c0* | *setb ea* | *开中断* |
*001* | *20* | *in r0,ioL* | *i/o(数据开关)偶字节→r0* |
*002* | *50 60 02* | *add r0,[addr]* | *r0 (addr)→R0* |
*005* | *70 61 02* | *sta [addr],r0* | *R0→(addr)* |
*008* | *90 61 02* | *out [addr],ioH* | *[addr]→i/o(奇字节)* |
*00B* | *b0 01 00* | *jmp 001h* | *[addr]→pc* |
*……* | *……* | *……* | *……* |
*010* | *20* | *stb r0,ioL* | *i/o(数据开关)偶字节→r0* |
*011* | *70 60 02* | *sta [addr],r0* | *r1→(addr)* |
*014* | *e0* | *ret* | *[sp]→pc,sp 2* |
4. 实验原理
本实验的机器指令格式在分段模型机(高三位)的基础上增加流水识别位(第四位),该位为“0”时定义非流水指令,该位为“1”时表示需要寻址流水子过程。
在流水模型机的基础上,增加与中断有关的3条指令
*助记符* | *机器指令码* | *说明* |
---|---|---|
*SETB EA* | *11000000* | *中断允许* |
*CLR EA* | *00000000* | *中断禁止* |
*RET* | *11100000* | *返回或从中断返回* |
与中断有关的为控制格式
中断允许控制IEQ
M7 | M6 | M3 | M0 | 节拍 | ||
---|---|---|---|---|---|---|
Op | W | Ie | Ids | T4 | ||
1 | 1 | 0 | 1 | ↑ | 1→IEQ | 开中断 |
1 | 0 | 0 | 1 | ↑ | 0→IEQ | 关中断 |
中断响应控制IAQ
M7 | M6 | M3 | M0 | 节拍 | ||
---|---|---|---|---|---|---|
Op | W | Ie | Ids | T4 | ||
0 | 1 | 0 | 1 | ↑ | 1→IAQ | 中断响应 |
0 | 0 | 0 | 1 | ↑ | 0→IAQ | 中断退出 |
中断请求控制INQ
IEQ | IAQ | INT | T4 | ||
---|---|---|---|---|---|
1 | 0 | 0 | ↑ | 1→INQ | 锁存请求 |
X | 1 | X | ↑ | 0→IAQ | 清除请求 |
(中断电源原理图)
5. 实验步骤
打开CMStudio程序找道mxj8.asm装载
中断模型机源程序:
#LOAD “MXJ5.IS” ;预调入指令系统/微程序
#SET RAM 0260h = 5500h ;数据区0260H单元预置数据5500h
org 0
start: setb ea ;开中断
loop: in r0, iol
add r0, 0260h
sta 0261h, r0
out ioh, 0261h
jmp loop
org 10h ;中断服务程序
in r0, iol
sta 0260h, r0
ret
end
6.实验心得
最后一次实验,实验内容为中断控制,到这里我们是以软件模拟微程序进行实验,通过这个实验对中断控制的了解更加深入。