2.3.2 TEC-2008指令系统
TEC-2008是由清华大学自主设计并研制的16位教学计算机系统,该系统是一台硬件组成相对完备的计算机系统,CPU、主存、I/O接口及总线均具有一定的典型性,并能够驱动常见的输入/输出设备。更重要的是,该系统能够提供计算机组成原理部分教学所要求的教学实验功能,学生能够深入到计算机内部,查看、测试主要信号与部件的工作状态。
1.指令分类
16位机的指令按不同的分类标准可划分为:
①从指令长度区分,有单字指令和双字指令。
②从操作数的个数区分,有三操作数指令、双操作数指令、单操作数指令和无操作数指令。
③从使用的寻址方式区分,有寄存器寻址、寄存器间接寻址、立即数寻址、直接地址、相对寻址等多种基本寻址方式。
④从指令功能区分,给出了算术和逻辑运算类指令、读写内存类指令、输入/输出类指令、转移指令、子程序调用和返回类指令,还有传送、移位、置进位标志和清进位标志等指令。
⑤按照指令的功能和它们的执行步骤,可以把该机的指令划分为如下4组。在后面几节中给出的指令流程框图、指令流程表都是以此为标准进行指令划分的。
A组:基本指令ADD、SUB、AND、OR、XOR、CMP、TEST、MVRR、DEC、INC、SHL、SHR、JR、JRC、JRNC、JRZ、JRNZ;扩展指令ADC、SBB、RCL、RCR、ASR、NOT、CLC、STC、EI、DI、JRS、JRNS、JMPR。
B组:基本指令JMPA、LDRR、STRR、PUSH、POP、PUSHF、POPF、MVRD、IN、OUT、RET。
C组:扩展指令CALR、LDRA、STRA、LDRX、STRX。
D组:基本指令CALA;扩展指令IRET。
说明:
①A组指令完成的是通用寄存器之间的数据运算或传送,在取指之后可一步完成。
②B组指令完成的是一次内存或I/O读、写操作,在取指之后可两步完成,第一步把要使用的地址传送到地址寄存器ARH、ARL中,第二步执行内存或I/O读、写操作。
③C组指令在取指之后可三步完成,其中CALR指令在用两步读、写内存之后,第三步执行寄存器之间的数据传送;而其他指令在第一步置地址寄存器ARH、ARL,第二步读内存(即取地址操作数)、计算内存地址、置地址寄存器ARH、ARL,第三步读、写内存。
④D组指令完成的是两次读、写内存操作,在取指之后可四步完成。
2.指令格式
TEC-2008教学机是16位机,实现29条基本指令,用于编写教学机的监控程序和支持简单的汇编语言程序设计。同时保留了19条扩展指令,供学生在教学实验中完成对这些指令的设计与调试。16位教学机的指令格式,支持单字和双字指令,第一个指令字的高8位是指令操作码字段,低8位和双字指令的第二个指令字是操作数、地址字段,分别有3种用法,如图2-2所示。
图2-2 TEC-2008指令格式示意图
这8位指令操作码(记作“IR15~IR8”),含义如下:
①IR15、IR14用于区分指令组:0X表示A组,10表示B组,11表示C、D组,C、D组的区分还要用IR11,IR11=0为C组,IR11=1为D组。
②IR13用于区分基本指令和扩展指令:基本指令该位为0,扩展指令该位为1。
③IR12用于简化控制器实现,其值恒为0。
④IR11~IR8用于区分同一指令组中的不同指令。
16位机根据指令字长、操作数不同可划分为如下5种指令格式:
(1)单字、无操作数指令:
格式:
基本指令:
PSHF;状态标志(C、Z、V、S、P1、P0)入栈
POPF;弹出栈顶数据送状态标志寄存器
RET;子程序返回
扩展指令:
CLC;清进位标志位C=0
STC;置进位标志位C=1
EI;开中断,置中断允许位INTE=1
DI;关中断,置中断允许位INTE=0
IRET;中断返回
(2)单字、单操作数指令:
格式:
基本指令:
DEC DR;DR←DR-1
INC DR;DR←DR+1
SHL DR;DR逻辑左移,最低位补0,最高位移入C
SHR DR;DR逻辑右移,最高位补0,最低位移入C
JR OFFSET;无条件跳转到ADR,ADR=原PC值+OFFSET
JRC OFFSET;当C=1时,跳转到ADR,ADR=原PC值+OFFSET
JRNC OFFSET;当C=0时,跳转到ADR,ADR=原PC值+OFFSET
JRZ OFFSET;当Z=1时,跳转到ADR,ADR=原PC值+OFFSET
JRNZ OFFSET;当Z=0时,跳转到ADR,ADR=原PC值+OFFSET
IN I/O PORT;R0←[I/O PORT],从外设I/O PORT端口读入数据到R0
OUT I/O PORT;[I/O PORT]←R0,将R0中的数据写入外设I/O PORT端口
PUSH SR;SR入栈
POP DR;弹出栈顶数据送DR
扩展指令:
RCL DR;DR与C循环左移,C移入最低位,最高位移入C
RCR DR;DR与C循环右移,C移入最高位,最低位移入C
ASR DR;DR算术右移,最高位保持不变,最低位移入C
NOT DR;DR求反,即DR←/DR
JMPR SR;无条件跳转到SR指向的地址
CALR SR;调用SR指向的子程序
JRS OFFSET;当S=1时,跳转到ADR,ADR=原PC值+OFFSET
JRNS OFFSET;当S=0时,跳转到ADR,ADR=原PC值+OFFSET
(3)单字、双操作数指令:
格式:
基本指令:
ADD DR,SR;DR←DR+SR
SUB DR,SR;DR←DR-SR
AND DR,SR;DR←DR and SR
CMP DR,SR;DR-SR
XOR DR,SR;DR←DR xor SR
TEST DR,SR;DR and SR
OR DR,SR;DR←DR or SR
MVRR DR,SR;DR←SR
LDRR DR,[SR];DR←[SR]
STRR [DR],SR;[DR]←SR
扩展指令:
ADC DR,SR;DR←DR+SR+C
SBB DR,SR;DR←DR-SR-C
(4)双字、单操作数指令:
格式:
基本指令:
JMPA ADR;无条件跳转到地址ADR
CALA ADR;调用首地址在ADR的子程序
(5)双字、双操作数指令:
格式1:
基本指令:MVRD DR,DATA;DR←DATA扩展指令:LDRA DR,[ADR];DR←[ADR]STRA [ADR],SR;[ADR]←SR格式2:
扩展指令:
LDRX DR,OFFSET[SR];DR←[OFFSET+SR]
STRX DR,OFFSET[SR];[OFFSET+SR]←[DR]