假定程序顺序执行,即(PC)=0804H
微指令 A4H 功能 分析 微指令 A5H 功能 寄存器的值 微指令 19H 功能 寄存器的值 微指令 功能 1AH 分析 微指令 38H 功能 分析 微指令 39H 功能 分析 微指令 IR15~IR10作为地址010000B输入到MAPROM,读出38H,作为下条微指令的地址 00 0E 00 B1 90 00 00 CI3~CI0=14 0→R0;R0作为部分积的高16位,初始值为0;在运算完成后,由3DH微指令将Q送入R1中。 (μPC)= 39H (请学生自己分析) 00 0E 03 80 C1 00 00 CI3~CI0=14 R1→Q,0→C; (μPC)=3AH 将乘数R1送入Q,Q作为乘数寄存器 03 C4 07 C0 B0 02 00 CI3~CI0=4 ① 用4号命令设置AM2910的循环计数初值、堆栈栈顶内容、下条微功能 指令地址 ② R0Q联合右移→R0Q,Q0→C,CC#=0 (μPC)= 3BH 3AH ① 4号命令将本条微指令字段的高12位03 CH(=0000 0011 1100B,去掉最低两位)转换成0FH,存入寄存器/计数器 分析 R/C中,作为循环次数的初值。 ② 将(μPC)= 3BH压入AM2910微堆栈作为循环的首地址③ 将(μPC)= 3BH输出作为下条微指令的地址。 2B 43 C0 80 F0 00 30 CI3~CI0=3 STR→Q,CC#=INT#;保存状态于Q寄存器 (μPC)= A5H DC1选择/FTOIB,Am2901将D输入到Q。 06 43 80 B0 C5 60 02 CI3~CI0=3 PC→AR,PC→IP,CC#=/FS3; FS3=1连续执行,FS3=0单步执行 (μPC)= 19H (AR)=0804H,(IP)= 0804H 00 0E 00 30 B0 54 01 CI3~CI0=14 PC+1→PC,MEM→IR;取指令到IR寄存器 (μPC)= 1AH (PC)=0805H,(IR)=4003H 00 02 00 90 80 00 00 CI3~CI0=2 /MAP 转入相应微程序入口 (μPC)=38H 41
微指令 0F 83 50 90 80 00 00 CI3~CI0=3 一位原码乘法中,需要判断乘数的最低位是0,还是1,决定部分积加功能 3BH 0,还是加被乘数。因为TEC-2中无法判断Q的最低位Q0,故在上条微指令中,将Q右移,Q0送入C中,根据进位标志C的值判断来Q0,以决定微程序执行部分积加0,还是加被乘数的微指令。 分析 微指令 ① C=0,CC#=1,CI3~CI0=3,(μPC)=3CH ② C=1,CC#=0,CI3~CI0=3,(μPC)=3EH 00 08 07 C0 B0 02 00 CI3~CI0=8 ① 部分积加0后与Q联合右移,Q0→C,作为下次加操作的判断条件,功能 Q的最高位中逐渐移入部分积的低位部分。 ② 判断循环次数是否结束。若未结束,执行3BH;结束,执行3DH。 3CH AM2910用8号命令生成下条微指令的地址。若AM2910的寄存器/计数器R/C中为0,表示循环次数已到,下条微指令的地址是3DH分析 (3CH+1),弹出栈顶内容3BH;若AM2910的寄存器/计数器R/C中不为0,表示循环次数未到,下条微指令的地址是栈顶内容3BH,返回循环首地址; 微指令 29 03 01 B0 A0 10 00 CI3~CI0=3 Q→R1,汇编程序通过读R1获得乘积的低16位; 3DH 功能 (μPC)= A4H (思考:没有Q→R1可以吗?) 分析 微指令 (请学生自己分析) 0F 4F 27 C0 90 02 80 CI3~CI0=15 ① 部分积加被乘数后与Q联合右移,Q0→C,作为下次加操作的判断功能 条件,Q的高位中逐渐移入部分积的低位部分。 ② 判断循环次数是否结束。若未结束,执行3BH;结束,执行3DH。 AM2910用15号命令生成下条微指令的地址,且CC#=1。若AM29103EH 的寄存器/计数器R/C中不为0,表示循环次数未到,下条微指令的地址3BH,来自微堆栈栈顶内容,微程序返回循环首地址;若AM2910分析 的寄存器/计数器R/C中为0,表示循环次数已到,下条微指令的地址来自本条微指令下地址字段0F 4H中的高10位,即3DH。 部分积R0与被乘数相加,被乘数寄存器来自指令的IR3~IR0 42
按照以上思路,很容易分析出其它指令的微程序执行过程。上述程序段的微指令执行过程涉及到寄存器传输、运算器外的数据传入寄存器、读内存、算术逻辑运算等基本操作。对于写内存的操作,请同学们分析指令 MOV [DR],SR来理解写操作的过程。
4.自行设计新指令的微程序段
所谓新指令,是指TEC-2机支持的64条基本指令中尚未实现、留给学生实验中自行设计的11条机器指令,即指令汇总表中最后的11条指令。这11条指令的情况是:
?6位操作码已定,为D4、D8、DC、E0、E4、E8、EC、F0、F4、F8和FC,这是按8位长度的16进制方式给出的。其最低两位,可用于选择C、Z、V、S 四个标志位作为判别条件。
?这11条指令的徽程序段的入口地址已定为100H、110H、120H、……、1A0H。这是由MAPROM器件的内容限定的,这些内容已写好在该器件的相应单元中。
?这11条指令没有相应的汇编语句名,执行的功能也未定义。但在使用时,必须使其指令格式与已实现的53条指令的格式类同,如要用C、Z、V、S作为判别条件,只能用指令寄存器的第9、8两位编码加以标明,作为写入用的寄存器编号只能通过IR7~IR4标明等等。使用不当,目前已给出的硬件可能无法直接支持。
设计新指令的微程序段将涉及以下几个问题:
?选定指令格式及功能,包括确定要用的操作码,指令中其它字段的内容分配与使用,本指令要实现的功能。
?按新指令的功能与格式,设计该指令的执行过程,即分成几步完成,每一步要实现的详细操作细节,各步之间的衔接等等。
?将每一步中的操作,用一条微指令实现,即具体设计每条微指令各字段的具体码值,既包括控制码的各字段,也包括下地址字段,形成下地址用到的条件码等等。
?将设计好的微码,装入到控制存储器的相应单元。
?设计一个使用新、旧指令的用户程序,检查程序运行的正确性,以确定新指令是否正确执行,对新指令的执行过程仔细调试,直到得到满意的结果。
这一过程中的装入新指令的微码有两种方法,一是通过水平板上的开关与按键直接拨入,二是在程序中用LDMC指令实现自动装入。这里我们先介绍在程序中自动装入的具体操作步骤。
作为例子,最简单的方法,是抄一条现有指令作为新指令予以实现。例如,操作码选D4,指令格式选为D4 DR,SR,实现DR+SR→DR的功能。它就是ADD DR,SR那条指令,
43
差别仅是操作码由04变为D4。查指令汇总表,D4操作码的微指令的入口地址应为100H,故将控存1CH地址中的微指令(实现ADD DR,SR的操作)中的内容复制到100H单元,就完成了这条新指令的微程序设计的过程。看下面一个程序例子。 >A800
800: MOV R8, 240 MOV R9, 360
MOV Rl, 900 ;微码在内存的首地址 MOV R2, 1 ;徽指令条数
MOV R3, 100 ;徽码在控存中的首地址
LDMC ;用R1,R2,R3作为参数,装入徽码 D489 RET
>E900
900:....0029....0301....B090....0088
该程序的功能是将240和360两个16进制形式的整数分别送入R8和R9。用新指令(机器码为D489,其操作码为D4,DR选R8,SR选R9)完成两个寄存器的内容相加,结果写入R8。
该程序当中的4条指令,实现的是装入新指令的微码。微码在内存的首地址为900,四个宇的内容为0029,0301,B090,0088,可以用监控程序的E命令键入。
该程序可以用监控程序的A命令打入。倒数第2行的D489是新指令的机器码,不能在A命令方式下打入。具体操作过程可以在A命令方式下,先在此处打入任何一条单字指令。例如, MOV R0,R0。整个程序输入后,再将该单元的内容用E命令改为D489。
该程序运行过程中,在为R8、R9赋值后,接着装入新指令的微码,再执行新指令,并返回监控程序以结束该程序的执行过程。
该程序运行结束后,用R命令检查程序的执行结果,R8的值应变为05A0。以上用到的数值均为16进制,在监控命令工作时,均不能跟H或h字符。
从这个例子可以得到以下几个结论: ?新旧指令可以用在同一程序中。
?新指令在每次TEC-2机重新加电后,至少得重新装入一次对应的微码;仅在装入相应微码后,新指令才能执行,即新指令已追加到TEC-2的指令系统中。
?新指令无汇编码(因汇编程序实现在前,新指令实现在后),故在程序中,只能通过机器码使用新指令。
44
?装入新的微指令与使用新指令变得非常容易,同学的精力就可以全部集中到微程序设计中去。但必须想到,新、旧指令的微程序之间存在着如下协调与配合关系:
前边的例子中,只设计了新指令的具体执行功能,执行前的取指过程和执行后的判中断、与下条指令的衔接等均使用了原微程序的有关内容。从同学们学习微程序设计的角度看,取指过程与每条指令完成后的相应处理是公用于所有指令的,而且比较简单,看懂原来的实现方法与细节,以及与每条指令执行过程的衔接方式,也就达到了深入掌握的程度,故一般不必在自己设计的微程序中考虑这一部分内容。若有的学生想在自己的微程序中实现自己的取指等处理过程,必须保证在新旧指令衔接时不出现矛盾。
任何一条新指令的执行步骤,每一步中的微指令字段的编码设计,是学习TEC-2机微程序设计的重点,也是学懂计算机指令执行过程的核心内容。
§1.6 TEC-2机的输入输出及中断
1.TEC-2的输入输出
在TEC-2中,用50芯扁平电缆将信号引出(见附录4 TEC-2机的接插件的引脚信号),其中与输入输出相关的信号有:
AB7~AB0: I/O地址信号 DB7~DB0: I/O数据信号 /IOR: /IOW: /IORQ: /IOS:
I /O读信号 I /O写信号
I/O请求,只有/IORQ为低时才能访问I/O设备
可以作I/O片选信号(见附录14 TEC-2机实验计算机系统逻辑线路图(三)) 主脉冲信号
/CLK3:
/Reset: 复位信号
根据I/O设备的地址要求,对AB7~AB0,/IORQ进行全译码,产生I/O片选信号,也可以直接使用已有的I/O片选信号/IOS。
输入指令:IN PORT;R0←[PORT],从外设读入一字节到R0低8位; 输出指令:OUT PORT;[PORT] ←R0,把R0的低8位数据写到外设。
2.TEC-2的中断
在§1.5节中,流程图1.5.2表示的是在没有中断请求的情况下,微程序的运行过程。当
45