助记符 JZ MM JMP MM _INT_ CALL MM IN OUT RET RR A RL A RRC A RLC A NOP CPL A RETI 机器码1 机器码2 注释 若零标志位置1,跳转到MM地址 未使用 跳转到MM地址 未使用 未使用 实验机占用,不可修改。进入中断时,实验机硬件产生_INT_指令 调用MM地址的子程序 从输入端口读入数据到累加器A中 将累加器A中数据输出到输出端口 未使用 子程序返回 累加器A右移 累加器A左移 累加器A带进位右移 累加器A带进位左移 空指令 累加器A取反,再存入累加器A中 未使用 中断返回 未使用 未使用 未使用 未使用 101001xx MM 101010xx 101011xx MM 101100xx 101101xx 101110xx 101111xx MM 110000xx 110001xx 110010xx 110011xx 110100xx 110101xx 110110xx 110111xx 111000xx 111001xx 111010xx 111011xx 111100xx 111101xx 111110xx 111111xx 3.4 模型机微指令集
指令/微指令表
第四章 模型机综合实验(微程序控制器)
在综合实验中,模型机作为一个整体来工作的,所有微程序的控制信号由微程序存储器 uM输出,而不是由开关输出。在做综合实验之前,先用 8芯电缆连接 J1和 J2,这样实验仪的监控系统会自动打开 uM的输出允许,微程序的各控制信号就会接到各寄存器、运算器的控制端口。此综合实验使用的指令是模型机的缺省指令/微指令系统。等做完本综合实验,熟悉了此套指令/微指令后,用户可以自己设计的指令/微指令系统,有关自己设计指令/微指令系统的说明在下一章介绍。
在做综合实验时,可以用 COP2000计算机组成原理实验软件输入、修改程序,汇编成机器码并下载到实验仪上,由软件控制程序实现单指令执行、单微指令执行、全速执行,并可以在软件上观察指令或微指令执行过程中数据的走向、各控制信号的状态、各寄存器的值。 COP2000软件的使用方法见第七章“COP2000集成开发环境使用”。也可以用实验仪自带的小键盘和显示屏来输入、修改程序,用键盘控制单指令或单微指令执行,用 LED或用显示屏观察各寄存器的值。实验仪上的键盘使用方法见第六章“实验仪键盘使用”。
在用微程序控制方式做综合实验时,在给实验仪通电前,拔掉实验仪上所有的手工连接的接线,再用 8芯电缆连接 J1和 J2,控制方式开关拨到“微程序控制”方向。若想用 COP2000软件控制组成原理实验仪,就要启动软件,并用快捷图标的“设置”功能打开设置窗口,选择实验仪连接的串行口,然后再按“连接 COP2000实验仪”按钮接通到实验仪。
实验1:数据传送实验/输入输出实验
1.在 COP2000软件中的源程序窗口输入下列程序
MOV A, #12H MOV A, R0 MOV A, @R0 MOV A, 01H IN OUT END
2.将程序另存为 EX1.ASM,将程序汇编成机器码,反汇编窗口会显示出程序地址、机器码、反汇编指令。 程序地址 00 02 03 04 06 07 机器码 7C 12 70 74 78 01 C0 C4 反汇编指令 MOV A,#12 MOV A,R0 MOV A,@R0 MOV A,01 IN OUT 指令说明 立即数12H送到累加器A 寄存器R0送到累加器A R0间址的存储器内容送到累加器A 存储器01单元内容送到累加器A 端口IN内容输入到累加器A 累加器A内容输出到端口OUT 3.按快捷图标的F7,执行“单微指令运行”功能,观察执行每条微指令时,寄存器的输入/输出状态,各控制信号的状态,PC及 uPC如何工作。(见 EX1.ASM程序跟踪结果)
EX1.ASM程序跟踪结果
每个程序的一开始的第一条微指令一定是取指令,此微指令的值为0CBFFFFH,对应到各个控制位就是EMRD、PCOE、及IREN为低,此三位有效,其它所有位都处于无效状态。在程序第一次运行时或复位后,uPC和PC的值都为0,PCOE有效将PC值送到ABUS,做为程序存储器EM的地址,EMRD信号有效就是从程序存储器EM中读出程序指令,IREN将读出的指令送到IR寄存器和uPC,此微指令的作用就是:从程序存储器EM的0地址读出程序指令机器码7CH,并存入uPC中做为微程序存储器uM的地址,从微程序存储器uM的7CH单元中读出微控制码0C7FFF7H,同时PC加1为读下一条指令或数据做准备。
MOV A,#12:本指令为两个状态周期。在T1状态时,上次读出的指令机器码为7CH,存入uPC中做为微程序存储器uM的地址,读出微指令的值为0C7FFF7H,对应到各个控制位就是EMRD、PCOE、EMEN及AEN为低,处于有效状态,其它控制位为无效状态。由于上条微指令(取指操作)已将PC加1,此时PCOE是将加1后的PC输出到ABUS做为程序存储器EM的地址,EMRD就是从程序存储器EM中读出数据,本指令中读出的数据应为12H,EMEN将读出的数据送到DBUS总线上,AEN 是将DBUS总线上的值存入累加器A中。同时uPC加1为执行下条微指令做准备,PC加1为读取下一条指令做准备。每条指令的最后一条微指令一定是取指令操作,本指令的T0状态周期即为取指令,执行上一条微指令时uPC已经加1,按照此uPC为地址从微程序存储器uM读出的微指令的值为0CBFFFFH,参照第一步的说明,此微指令从程序存储器EM中读取指令。
MOV A,R0:本指令为两个状态周期。在T1状态时,由上条取指操作取出的指令机器码为70H,存入uPC后做为微程序地址访问微程序存储器uM的70H单元,读出微指令的值为0FFF7F7,各控制位的状态为RRD、AEN为低电平为有效状态,RRD有效表示从寄存器组 R0-R3中读数送到DBUS上,在上条取指令操作时,IREN将取出的指令机器码70H送入IR寄存器,而IR寄存器的最低两位是用来选择寄存器R?的,此时IR寄存器最低两位为00,被读出的寄存器为R0。AEN有效表示将DBUS的数据写到累加器A中。同时uPC加1,为执行下条微指令做准备。本指令的T0状态也是取指令,完成的功能是取出下一条要执行的指令机器码,并存入uPC和IR寄存器中。
MOV A,@R0: 本指令为三个状态周期。在T2状态时,由上个取指操作读出的指令机器码为74H,打入uPC后,从微程序存储器 74H单元读出的微指令的值为0FF77FFH,有效的控制位为MAREN和RRD,RRD有效表示从寄存器组R0-R3中读出数据送到DBUS,MAREN有效表示将数据从DBUS总线上打入地址寄存器MAR。uPC加1取出下条微指令执行。在T1状态时,由uPC做为微程序存储器地址,从uM的 75H单元中读出微指令的值为0D7BFF7H,其中有效的控制位为EMRD、EMEN、MAROE和AEN。MAROE表示程序存储器EM的地址由地址寄存器MAR输出,EMRD表示从程序存储器EM中读出数据,EMEN表示读出的数据送到地址总线DBUS上,AEN有效表示将数据总线DBUS上的值存入累加器A中。此状态下uPC要加1,为取下条微指令做准备。本指令的T0状态执行的是取指操作。取指操作详细描述见程序开始部分的取指令的说明。
MOV A,01:本指令为三个状态周期。在T2状态时,由上条取指操作取出的指令机器码为78H,存入uPC和IR寄存器后做为微程序存储器uM的地址,读出微指令的值为0C77FFFH,相应的有效控制位为EMRD、PCOE、EMEN和MAREN,PCOE有效表示将PC值做为程序存储器EM的地址,EMRD表示从程序存储器中读出数据,在本指令中此数据值为01H,EMEN表示将读出的数据送到DBUS总线,MAREN表示将DBUS总线上的数据打入地址寄存器MAR。uPC同时加1,取出下条微指令准备执行。在T1状态时,由uPC做为微程序存储器地址,从uM的79H单元中读出微指令的值为0D7BFF7H,可以参见上条指令的T1状态,此微指令的所完成的功能是,以MAR的值做为程序存储器的地址,读出数据并
送到数据总线DBUS,同时将此数据存入累加器A中。uPC加1取出下条微指令准备执行。在T0状态,微指令执行取指令操作。
IN:本指令分两个状态周期。在T1状态时,由上次取指操作取出的指令机器码为0C0H,以此做为微地址从uM中取出的微指令值为0FFFF17H,有效控制位为AEN、X2X1X0=000,因为X2、X1、X0为低,被选中的寄存器为输入端口IN,也就是说,输入端口IN上的数据被允许送到数据总线DBUS上,AEN有效表示将此数据打入累加器A中。同时uPC加1取出下条微指令准备执行。在T0状态,微指令执行的是取指令操作,取出下条指令准备执行。
OUT:本指令分两个状态周期。在T1状态,由上次取出的指令机器码为0C4H,以此为微地址从微程序存储器uM中读出的微指令为0FFDF9FH,有效控制位为OUTEN、X2X1X0=100(二进制),S2S1S0=111(二进制),S2S1S0=111表示运算器做“ALU直通”运算,也就是累加器不做任何运算,直接输出结果,而X2X1X0=100表示运算器的结果不移位直接输出到数据总线DBUS,OUTEN有效表示将数据总线上的数据打入输出端口寄存器OUT内。uPC加1,取出下条微指令准备执行。在T0状态,微指令执行的是取指操作,取出下条将要执行的指令。
实验2:数据运算实验(加/减/与/或)
1.在 COP2000软件中的源程序窗口输入下列程序
ADDC A, R1 SUB A, @R0 AND A, #55H OR A, 02H END
2.将程序另存为 EX2.ASM,将程序汇编成机器码,反汇编窗口会显示出程序地址、机器码、反汇编指令。
程序地址 00 01 02 04 机器码 反汇编指令 21 35 5C 55 68 02 ADDC A,R1 SUB A,@R0 AND A,#55 OR A,02 指令说明 累加器A的值加上寄存器R1加进位 累加器A减去R1间址的存储器内容 累加器A逻辑与立即数55H 累加器A逻辑或存储器02单元的内容 3.按快捷图标的F7,执行“单微指令运行”功能,观察执行每条微指令时,寄存器的输入/输出状态,各控制信号的状态,PC及uPC如何工作。(见“EX2.ASM程序跟踪结果”详细介绍)
4.在了解数据运算的原理,可以加上一些数据传输指令给累加器A或寄存器R?赋值,再运算,并观察运算结果。
EX2.ASM程序跟踪结果
实验3:移位/取反实验
1.在 COP2000软件中的源程序窗口输入下列程序
MOV A,#55H RR A RLC A
CPL A END
2.将程序另存为 EX3.ASM,将程序汇编成机器码,反汇编窗口会显示出程序地址、机器码、反汇编指令。
程序地址 00 02 03 04 机器码 7C 55 D0 DC E4 反汇编指令 MOV A,#55 RR A RLC A CPL A 指令说明 立即数55H存入累加器A 不带进位右移累加器A 带进位左移累加器A 累加器A内容取反 3.按快捷图标的 F7,执行“单微指令运行”功能,观察执行每条微指令时,寄存器的输入/输出状态,各控制信号的状态,PC及 uPC如何工作。(见“EX3.ASM程序跟踪结果”详细介绍)
EX3.ASM程序跟踪结果