TEC指令系统.docx
- 文档编号:29537383
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:20
- 大小:49.07KB
TEC指令系统.docx
《TEC指令系统.docx》由会员分享,可在线阅读,更多相关《TEC指令系统.docx(20页珍藏版)》请在冰豆网上搜索。
TEC指令系统
第2章TEC-2000教学计算机十六位机指令系统
2.1TEC-2000十六位指令系统概述
2.1.1指令分类
十六位机的指令按不同的分类方法可划分为:
1、按指令长度划分为弹子指令和双字指令;
2、按操作数划分为无操作数指令、单操作数指令、双操作数指令和三操作数指令;
3、按指令的功能和执行步骤可划分为四组:
A组:
主要完成通用寄存器之间的数据传送或运算,以及少数特殊操作,在取指后一步完成。
基本指令:
ADD,SUB,AND,OR,XOR,CMP,TEST,MVRR,INC,DEC,SHR,SHL,JR,JRC,JRNC,JRZ,JRNZ
扩展指令:
ADC,SBB,NOT,RCL,RCR,ASR,STC,CLC,EI,DI,JRS,JRNS,JMPR
B组:
完成1次内存读/写操作,或IO读/写操作,在取指后二步完成。
第一步向地址寄存器送入16位(或8位的I/O端口)地址,第二步完成读、写操作。
基本指令:
LDRR,STRR,PUSH,POP,PSHF,POPF,MVRD,IN,OUT,JMPA,RET
C组:
完成2次内存读/写操作(间址操作),在取指令后三步完成。
第一次读出的数据是操作数的地址,读出后直接(或经过一次加法运算)将其送入地址寄存器,省掉第二次内存读/写操作的地址传送步骤。
CALR指令先用第2步保存PC内容到堆栈,第3步把寄存器中的子程序入口地址传送到程序计数器PC中。
扩展指令:
CALR,LDRA,STRA,LDRX,STRX
D组:
完成2次内存的读、写操作,在取指之后四步完成。
基本指令:
CALA
扩展指令:
TRET
8位指令操作码(记作“IR15–IR8”)的含义
1)IR15–IR14用于区分指令组,0X表示A组,10表示B组,11表示C、D组;
2)IR11用于区分C、D组,IR11=0为C组,IR11=1为D组;
3)IR13用于区分基本指令和扩展指令,基本指令为0,扩展指令为1。
4)IR12用于简化控制器实现,暂定为0。
5)IR10–IR8用于区分同一指令组的不同指令。
2.1.2指令格式
TEC-2000十六位的教学机系统实现了29条基本指令,保留了其余的19条扩展指令,供在教学实验中进行扩展,即完成对这些指令的设计与调试。
十六位教学机支持单字和双字指令。
第一个指令字的高8位为指令操作码字段,低8位和双字指令的第二个字为操作数、地址字段,共有三种格式:
操作码
DR
SR
I/O端口地址∕相对偏移量
立即数∕直接存储器地址∕变址偏移量
十六位机根据指令长度、操作数不同划分为6种指令格式。
1、单字、无操作数指令
格式:
操作码
00000000
基本指令:
PSHF;状态标志寄存器(C、Z、V、S、P1、P0)入栈
POPF;弹出栈顶数据送入状态标志寄存器
RET;子程序返回
扩展指令:
CLC;清进位标志位C(C←0)
STC;置进位标志位C(C←1)
EI;开中断,即置中断允许位
DI;关中断,即清中断允许位
IRET;中断返回
2、单字、单操作数指令
格式:
操作码
RD0000
0000SR
OFFSET
I/OPort
基本指令:
DECDR;DR←DR-1
INCDR;DR←DR+1
SHLDR;DR逻辑左移,最低位补0,最高位移入C
SHRDR;DR逻辑右移,最高位补0,最低位移入C
JRoffset;无条件转移到ADR,ADR=PC值+Offset
JRCoffset;当C=1时转移到ADR,ADR=PC值+Offset
JRNCoffset;当C=0时转移到ADR,ADR=PC值+Offset
JRZoffset;当Z=1时转移到ADR,ADR=PC值+Offset
JRNZoffset;当Z=0时转移到ADR,ADR=PC值+Offset
INI/Oport;I/O端口输入,R0←[I/OPort]
OUTI/Oport;I/O端口输出,[I/OPort]←R0
PUSHSR;SR入栈
POPDR;弹出栈顶数据送入DR
扩展指令:
RCLDR;DR与C循环左移,C移入DR最低位,DR最高位移入C
RCRDR;DR与C循环右移,C移入DR最高位,DR最低位移入C
ASRDR;DR算术右移,最高位保持不变,最低位移入C
NOTDR;DR求反,即DR←/DR
JMPRSR;无条件转移到SR指向的地址
CALRSR;调用SR指向的子程序
JRSoffset;当S=1时转移到ADR,ADR=PC值+Offset
JRNSoffset;当S=0时转移到ADR,ADR=PC值+Offset
3、单字、双操作数指令
格式:
操作码
DR
SR
基本指令:
ADDDR,SR;DR←DR+SR
SUBDR,SR;DR←DR-SR
ANDDR,SR;DR←DR∧SR
CMPDR,SR;DR-SR
XORDR,SR;DR←DR⊕SR
TESTDR,SR;DR∧SR
ORDR,SR;DR←DR∨SR
MVRRDR,SR;DR←SD
LDRRDR,SR;DR←[SR]
STRRDR,SR;[DR]←SR
扩展指令:
ADCDR,SR;DR←DR+SR+C
SUBBDR,SR;DR←DR-SR-C
4.双字、单操作数指令
格式:
操作码
00000000
ADR
基本指令:
JMPAADR;无条件转移到地址ADR
CALAADR;调用首地址为ADR的子程序
5.双字、双操作数指令
格式1:
操作码
DR0000
0000SR
DATA/ADR
基本指令:
MVRDDR,DATA;DR←DATA
扩展指令:
LDRADR,[ADR];DR←[ADR]
STRA[ADR],SR;[ADR]←SR
格式2:
操作码
DR
SR
OFFSET
扩展指令:
LDRXDR,offset[SR];DR←[offset+SR]
STRXoffset[SR],DR;[offset+SR]←DR
2.2TEC-2000十六位指令汇总表
2.2.1基本指令
指令
类型
指令格式
汇编语言
操作数
个数
CZVS
功能说明
A
组
00000000DRSR
ADDDR,SR
2
****
DR←DR+SR
00000001DRSR
SUBDR,SR
2
****
DR←DR-SR
00000010DRSR
ANDDR,SR
2
****
DR←DR∧SR
00000011DRSR
CMPDR,SR
2
****
DR-SR
00000100DRSR
XORDR,SR
2
****
DR←DR⊙SR
00000101DRSR
TESTDR,SR
2
****
DR∧SR
00000110DRSR
ORDR,SR
2
****
DR←DR∨SR
00000111DRSR
MVRRDR,SR
2
····
DR←SR
00001000DR0000
DECDR
1
****
DR←DR-1
00001001DR0000
INCDR
1
****
DR←DR+1
00001010DR0000
SHLDR
1
*···
DR←DR*2
00001011DR0000
SHRDR
1
*···
DR←DR/2
01000001OFFSET
JRADR
1
····
无条件跳转的ADR
01000100OFFSET
JRCADR
1
····
C=1时跳转的ADR
01000101OFFSET
JRNCADR
1
····
C=0时跳转的ADR
01000110OFFSET
JRZADR
1
····
Z=1时跳转的ADR
01000111OFFSET
JRNZADR
1
····
Z=0时跳转的ADR
B
组
1000000000000000
ADR(16位)
JMPAADR
1
····
无条件跳转到ADR
10000001DRSR
LDRRDR,[SR]
2
····
DR←[SR]
10000010I/Oport
INI/Oport
1
····
R0←[I/O,PORT]
10000100DRSR
STRR[DR],SR
2
····
[DR]←SR
1000010000000000
PSHF
0
····
FLAG入栈
100001100000SR
PUSHSR
1
····
SR入栈
10000110I/Oport
OUTI/Oport
1
····
[I/O,PORT]←R0
10000111DR0000
POPDR
1
····
DS←出栈
10001000DR0000
DATA(16位)
MVRDDATA
2
····
DR←DATA
1000110000000000
POPF
0
····
FLAG←出栈
1000111100000000
RET
0
····
子程序返回
D
组
1100111000000000
ADR(16位)
CALLADR
1
····
调用首地址为ADR的子程序
说明:
1)表中CZVS一栏,*表示该标志位在指令执行后被重置,·表示该标志位不受指令执行的影响。
2)运算器中有16个通用寄存器R0-R15,其中R5、R4用作16位的堆栈指针SP,R7、R6用作16位的程序计数器PC,其余寄存器用作通用寄存器,即有关指令中的DR,SR。
2.2.2扩展指令
指令
类型
指令格式
汇编语言
操作数
个数
CZVS
功能说明
A
组
00100000DRSR
ADCDR,SR
2
****
DR←DR+SR+C
00100001DRSR
SBBDR,SR
2
****
DR←DR-SR-C
00100010DR0000
RCLDR
1
*···
DR←DR带进位C循环左移
00101011DR0000
RCRDR
1
*···
DR←DR带进位C循环右移
00101100DR0000
ASRDR
1
*···
DR←DR算术右移
01101101DR0000
NOTDR
1
****
DR←/DR
011000000000SR
JMPRSR
1
····
跳转到SR指明的地址
01100100OFFSET
JRSADR
1
····
S=1跳转到ADR
01100101OFFSET
JRNSADR
1
····
S=0跳转到ADR
0110110000000000
CLC
0
0···
C=0
0110110100000000
STC
0
1···
C=1
0110111000000000
EI
0
····
开中断,INTE←1
0110111100000000
DI
0
····
关中断,INTE←0
C
组
111000000000SR
CALRSR
1
····
调用SR指明的子程序
11000100DR0000
ADR(16位)
LDRADR,[ADR]
2
····
DR←[ADR]
11100101DRSR
OFFSET(16位)
LDRXR,offset[SR]
2
····
DR←[OFFSETT+SR]
11100110DRSR
OFFSET(16位)
STRXDR,offset[SR]
2
····
[OFFSETT+SR]←DR
111001110000SR
ADR(16位)
STRA[ADR],SR
1
····
[ADR]←SR
D组
111011110000000
IRET
0
····
中断返回
实验一基础汇编语言程序设计
一、实验目的
1、学习和了解TEC-2000十六位机的指令系统;
2、学习简单的TEC—2000十六位机汇编程序设计;
3、学习和了解TEC-2000十六位机监控命令的用法。
二、实验内容
1、使用监控程序的R命令显示/修改寄存器内容、D命令显示存储器内容、E命令修改存储器内容;
2、使用A命令写一小段汇编程序,U命令反汇编刚输入的程序,用G命令连续运行该程序,用T命令单步运行并观察程序单步执行情况。
三、实验要求
在使用该教学机之前,应先熟悉其的各个组成部分,及使用方法。
四、十六位教学机的汇编语言程序设计
【程序1】设计一个小程序,在屏幕上输出显示字符‘6’。
A2000;地址从16进制2000(内存RAM区的起始地址)开始
2000:
MVRDR0,0036;把字符‘6’的ASCII码送入R0
2002:
OUT80;将R0内容输出到80H端口(即串口,在PC屏幕上显示)
2003:
RET;每个用户程序都必须用RET指令结束
2004:
;(按回车键即结束输入过程)
程序的机器码存放在地址为2000h开始的主存中。
所有的数字都约定使用16进制数,故数字后不能跟修饰符h。
用户程序的最后一个语句必须为RET,因为监控程序采用子程序调用方式运行用户程序,只有用RET语句结束,才能保证程序运行结束时能正确返回到监控程序的调用点。
【例2】设计一个程序,用次数循环控制在终端屏幕上输出’0’到’9’十个数字符。
A2020
2020:
MVRDR2,000A;送入输出字符个数(10个)
MVRDR0,0030;“0”字符的ASCII码送寄存器R0
2024:
OUT80;输出保存在R0低位字节的字符
DECR2;输出字符个数减1
JRZ202E;判10个字符输出完否,已完,则转到程序结束处
PUSHR0;未完,保存R0的值到堆栈中
2028:
IN81;查询串行口,判字符串行输出是否完成
SHRR0
JRNC2028;未完成,则循环等待
POPR0;已完成,准备输出下一字符并从堆栈恢复R0的值
INCR0;得到下一个要输出的字符
JR2024;转去输出字符
202E:
RET
这个程序只使用基本汇编语句。
理解中的一个难点,是程序当中判串行口是否完成一个字符的输出过程并循环等待的三个汇编语句,具体解释见有关串行接口讲解部分的内容。
该程序的执行码放在2020起始的连续内存区中,可用G2020命令运行该程序。
若要求在终端屏幕上输出‘A’到‘Z’共26个字母,应如何修改例中的程序?
请验证之。
【例3】从键盘上连续打入多个在’0’到’9’之间的数字符并在屏幕上显示,遇非数字符结束输入过程。
A2040
2040:
MVRDR2,0030;用于判数字符的下界值
MVRDR3,003A;用于判数字符的上界值
2044:
IN81;判键盘上是否按了一个键,
SHRR0;即串行口是否有了输入的字符
SHRR0
JRNC2044;没有输入则循环测试
IN80;输入字符到R0
MVRDR1,00FF
ANDR0,R1;屏蔽R0的高位字节内容
CMPR0,R2;判输入字符≥字符’0’否
JRNC2053;为否,则转到程序结束处
CMPR0,R3;判输入字符≤字符’g’否
JRC2053;为否,则转到程序结束处
OUT80;输出刚输入的数字符
JMPA2044;转去程序前边2044处等待输入下一个字符
2053:
RET
思考题:
本程序中为什么不必判断串行口输出完成否?
设计打入‘A’~‘Z’和‘0’~‘9’的程序,遇其它字符结束输入过程。
【例4】计算1到10的累加和。
A2060
2060:
MVRDR1,0000;置累加和的初值为0
MVRDR2,000A;最大的加数
MVRDR3,0000
2066:
INCR3;得到下一个参加累加的数
ADDR1,R3;累加计算
CMPR3,R2;判是否累加完
JRNZ2066;未完,开始下一轮累加
RET
运行过后,可以用R命令看R1中的累加结果。
注意:
显示的和数用十六进制数表示。
【例5】设计一个有读写内存和子程序调用指令的程序,功能是读出内存中的字符,将其显示到显示器的屏幕上,再转换为小写字母后写回原存储单元。
E20FO(送入将被显示的6个字符‘A’,~‘F’到内存20F0开始的存储区域中)
004100420043004400450046
A2080
2080:
MVRDR3,0006;指定被读数据的个数
MVRDR2,20F0;指定被读,写数据内存区首地址
2084:
LDRRR0,[R2];读内存中的一个字符到R0寄存器
CALA2100;调用于程序,完成显示。
转换并写回的功能
DECR3;检查输出的字符个数
JRZ208B;完成输出则结束程序的执行过程
INCR2;未完成,修改内存地址
JR2084;转移到程序的2086处,循环执行规定的处理
208B:
RET
A2100;输入用到的于程序到内存2100开始的存储区
2100:
OUT80;输出保存在R0寄存器中的字符
MVRDR1,0020
ADDR0,R1;将保存在R0中的大写字母转换为小写字母
STRR[R2],R0;写R0中的字符到内存,地址同LOD所用的地址
2105:
IN81;测试串行接口是否完成输出过程
SHRR0
JRNC2105;未完成输出过程则循环测试
RET;结束子程序执行过程,返回主程序
运行过程中,可以直接看到屏幕上显示的内容,运行过后,再用D20F0命令看内存的20F0区域中保存的运行结果:
006100620063006400650066
上述程序都是用监控程序的A命令完成输入汇编源程序的。
在涉及到汇编语句标号的地方,不能用符号表示,只能在指令中使用绝对地址。
使用内存中的数据,也由程序员给出数据在内存中的绝对地址。
对这样的极短小程序矛盾并不突出,对很大的程序一定会有较大的困难。
实验二脱机运算器实验
一、实验目的
1、深入了解位片结构运算器AM2901的功能与用法;
2、学习由4片AM2901组成一个16位运算器的级连方式,深化运算器部件的组成、设计、控制和使用等方面的知识。
二、实验原理
运算器是计算机中执行各种算术和逻辑运算操作的部件。
运算器的基本操作包括加、减、乘、除四则运算,与、或、非、异或等逻辑运算,以及传送、移位、比较等操作。
运算器的组成除了ALU单元外,还包括必要的寄存器和移位器等部件。
寄存器用于存放操作数和运算结果,以节省访问存储器的时间;移位器实现数据的移位功能,以扩展ALU的运算功能,增加数据传送的灵活性。
1、AM2901的结构与组成
AM2901是一个4位的位片结构运算器器件。
主要由ALU、输入多路选择器、输出选择器、寄存器组和移位器等部件组成,如图1-1所示。
图2-1AM2901芯片的内部组成结构
2、AM2901各组成部分及其功能
1)算术逻辑ALU
ALU为4位算术逻辑单元,共有8种运算功能,由输入端I5I4I3的编码值确定执行哪种功能。
2)通用寄存器组
AM2901内部有一个通用寄存器组,共有16个4位寄存器。
寄存器组有A和B两个端口,其中端口A只具有读出数据功能,而端口B具有读出和写入两种功能。
即数据可以从A口和B口输出,但只能从B口输入。
3)Q寄存器
Q寄存器位4位,在乘除运算中可用来存放乘数或商,故称做乘商寄存器。
Q寄存器本身具有移位功能,可对数据进行左移一位或右移一位的处理。
4)ALU输入多路选择器
AM2901具有两个输入多路选择器R和S,为ALU提供两个操作数。
R可选择来自数据线的数据D或寄存器组端口A的数据;S可从寄存器组端口A、B和Q寄存器3个来源选取数据。
两个操作数的组合由控制信号I2I1I0的编码确定。
5)移位器
4位,用于对ALU的输出实现直送、左移或右移处理。
6)输出选择门
选择AM2901输出数据Y的来源。
输出数据Y有两个来源:
一个是ALU的运算结果F,另一个是直接来自寄存器组端口A。
输出数据Y的选择,以及ALU的运算结果F如何传送给寄存器组端口B的输入或Q寄存器,由控制信号I8I7I6的编码值确定。
表1-1、表1-2和表1-3为ALU操作运算、数据来源以及运算结果处理的选择情况。
表1-1选择8种运算表1-2选择ALU的8种输入数据组合
I5I4I3
运算类型
I2I1I0
R来源S来源
000
001
010
011
100
101
110
111
R+S
S-R
R-S
R∨S
R∧S
R∧S
R∨S
R∨S
000
001
010
011
100
101
110
111
AQ
AB
0Q
0B
0A
DA
DQ
D0
注:
D表示外部数据
表1-3选择运算器的8种结果的处置方案
I8I7I6
寄存器组
Q寄存器
Y输出
000
001
010
011
100
101
110
111
F→B
F→B
F/2→B
F/2→B
2F→B
2F→B
F→Q
Q/2→Q
Q/2→Q
F
F
A
F
F
F
F
F
三、实验内容与步骤
脱机运算器实验,是指把运算器部件完全脱离与计算机主机和其他部件正常的连接关系,在完全孤立出来的运算器上进行的实验。
此时,只能通过开关、按键控制教学机的运算器完成指定的运算功能,并通过信号指示灯观察运算结果。
除I8~I0的9个开关之外,另个开关的功能和作用如下:
1)A口、B口地址:
输入从A口、B口对内部寄
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TEC 指令系统