文档视界 最新最全的文档下载
当前位置:文档视界 > TEC-2000指令系统

TEC-2000指令系统

第2章 TEC-2000教学计算机十六位机指令系统

2.1 TEC-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位指令操作码(记作“IR

15–IR

8

”)的含义

1)IR

15–IR

14

用于区分指令组,0X表示A组,10表示B组,11表示C、D组;

2)IR

11

用于区分C、D组,IR11=0为C组,IR11=1为D组;

3)IR

13

用于区分基本指令和扩展指令,基本指令为0,扩展指令为1。

4)IR

12

用于简化控制器实现,暂定为0。

5)IR

10–IR

8

用于区分同一指令组的不同指令。

2.1.2 指令格式

TEC-2000十六位的教学机系统实现了29条基本指令,保留了其余的19条扩展指令,供在教学实验中进行扩展,即完成对这些指令的设计与调试。

十六位教学机支持单字和双字指令。第一个指令字的高8位为指令操作码字段,低8位和双字指令的第二个字为操作数、地址字段,共有三种格式:

TEC-2000指令系统

TEC-2000指令系统

十六位机根据指令长度、操作数不同划分为6种指令格式。

1、单字、无操作数指令

格式:

基本指令:

TEC-2000指令系统

PSHF ;状态标志寄存器(C 、Z 、V 、S 、P1、P0)入栈 POPF ;弹出栈顶数据送入状态标志寄存器 RET ;子程序返回

扩展指令:

CLC ;清进位标志位C (C ←0) STC ;置进位标志位C (C ←1) EI ;开中断,即置中断允许位 DI ;关中断,即清中断允许位 IRET

;中断返回

2、单字、单操作数指令

格式:

TEC-2000指令系统

基本指令:

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 ;I/O 端口输入,R0←[I/O Port] OUT I/O port ;I/O 端口输出,[I/O Port]←R0 PUSH SR ;SR 入栈

POP DR ;弹出栈顶数据送入DR

扩展指令:

RCL DR ;DR 与C 循环左移,C 移入DR 最低位,DR 最高位移入C RCR DR ;DR 与C 循环右移,C 移入DR 最高位,DR 最低位移入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、单字、双操作数指令

格式:

基本指令:

TEC-2000指令系统

ADD DR, SR ;DR ←DR+SR SUB DR, SR ;DR ←DR-SR AND

DR, SR ;DR ←DR ∧SR

CMP DR, SR ;DR-SR

XOR DR, SR ;DR←DR⊕SR

TEST DR, SR ;DR∧SR

OR DR, SR ;DR←DR∨SR

MVRR DR, SR ;DR←SD

LDRR DR, SR ;DR←[SR]

STRR DR, SR ;[DR]←SR

扩展指令:

ADC DR,SR ;DR←DR+SR+C

SUBB DR,SR ;DR←DR-SR-C

4.双字、单操作数指令

格式:

TEC-2000指令系统

基本指令:

JMPA ADR ;无条件转移到地址ADR

CALA ADR ;调用首地址为ADR的子程序5.双字、双操作数指令

格式1:

TEC-2000指令系统

基本指令:

MVRD DR, DATA ;DR←DATA

扩展指令:

LDRA DR, [ADR] ;DR←[ADR]

STRA [ADR], SR ;[ADR]←SR 格式2:

TEC-2000指令系统

扩展指令:

LDRX DR, offset[SR] ;DR←[offset+SR]

STRX offset[SR],DR ;[offset+SR]←DR

2.2 TEC-2000 十六位指令汇总表

2.2.1 基本指令

TEC-2000指令系统

说明:

1)表中CZVS一栏,*表示该标志位在指令执行后被重置,·表示该标志位不受指令执行的影响。

2)运算器中有16个通用寄存器R0-R15,其中R5、R4用作16位的堆栈指针SP,R7、R6用作16位的程序计数器PC,其余寄存器用作通用寄存器,即有关指令中的DR,SR。

2.2.2 扩展指令

TEC-2000指令系统

实验一基础汇编语言程序设计

一、实验目的

1、学习和了解TEC-2000十六位机的指令系统;

2、学习简单的TEC—2000十六位机汇编程序设计;

3、学习和了解TEC-2000十六位机监控命令的用法。

二、实验内容

1、使用监控程序的R命令显示/修改寄存器内容、D命令显示存储器内容、E命令修改存储器内容;

2、使用A命令写一小段汇编程序,U命令反汇编刚输入的程序,用G命令连续运行该程序,用T 命令单步运行并观察程序单步执行情况。

三、实验要求

在使用该教学机之前,应先熟悉其的各个组成部分,及使用方法。

四、十六位教学机的汇编语言程序设计

【程序1】设计一个小程序,在屏幕上输出显示字符‘6’。

A 2000 ;地址从16进制2000(内存RAM区的起始地址)开始

2000:MVRD R0,0036 ;把字符‘6’的ASCII码送入R0

2002:OUT 80 ;将R0内容输出到80H端口(即串口,在PC屏幕上显示)

2003:RET ;每个用户程序都必须用RET指令结束

2004:;(按回车键即结束输入过程)

程序的机器码存放在地址为2000h开始的主存中。所有的数字都约定使用16进制数,故数字后不能跟修饰符h。用户程序的最后一个语句必须为RET,因为监控程序采用子程序调用方式运行用户程序,只有用RET语句结束,才能保证程序运行结束时能正确返回到监控程序的调用点。

【例2】设计一个程序,用次数循环控制在终端屏幕上输出’0’到’9’十个数字符。

A 2020

2020:MVRD R2,000A ;送入输出字符个数(10个)

MVRD R0,0030 ;“0”字符的ASCII码送寄存器R0

2024:OUT 80 ;输出保存在R0低位字节的字符

DEC R2 ;输出字符个数减1

JRZ 202E ;判10个字符输出完否,已完,则转到程序结束处

PUSH R0 ;未完,保存R0的值到堆栈中

2028:IN 81 ;查询串行口,判字符串行输出是否完成

SHR R0

JRNC 2028 ;未完成,则循环等待

POP R0 ;已完成,准备输出下一字符并从堆栈恢复R0的值 INC R0 ;得到下一个要输出的字符

JR 2024 ;转去输出字符

202E:RET

这个程序只使用基本汇编语句。理解中的一个难点,是程序当中判串行口是否完成一个字符的输出过程并循环等待的三个汇编语句,具体解释见有关串行接口讲解部分的内容。

该程序的执行码放在2020起始的连续内存区中,可用G 2020命令运行该程序。

若要求在终端屏幕上输出‘A’到‘Z’共26个字母,应如何修改例中的程序?请验证之。

【例3】从键盘上连续打入多个在’0’到’9’之间的数字符并在屏幕上显示,遇非数字符结束

输入过程。

A 2040

2040:MVRD R2,0030 ;用于判数字符的下界值

MVRD R3,003A ;用于判数字符的上界值

2044:IN 81 ;判键盘上是否按了一个键,

SHR R0 ;即串行口是否有了输入的字符

SHR R0

JRNC 2044 ;没有输入则循环测试

IN 80 ;输入字符到R0

MVRD R1,00FF

AND R0,R1 ;屏蔽R0的高位字节内容

CMP R0,R2 ;判输入字符≥字符’0’否

JRNC 2053 ;为否,则转到程序结束处

CMP R0,R3 ;判输入字符≤字符’g’否

JRC 2053 ;为否,则转到程序结束处

OUT 80 ;输出刚输入的数字符

JMPA 2044 ;转去程序前边2044处等待输入下一个字符

2053:RET

思考题:本程序中为什么不必判断串行口输出完成否?设计打入‘A’~‘Z’和‘0’~‘9’的程序,遇其它字符结束输入过程。

【例4】计算1到10的累加和。

A 2060

2060:MVRD R1,0000 ;置累加和的初值为0

MVRD R2,000A ;最大的加数

MVRD R3,0000

2066:INC R3 ;得到下一个参加累加的数

ADD R1,R3 ;累加计算

CMP R3,R2 ;判是否累加完

JRNZ 2066 ;未完,开始下一轮累加

RET

运行过后,可以用R命令看R1中的累加结果。注意:显示的和数用十六进制数表示。

【例5】设计一个有读写内存和子程序调用指令的程序,功能是读出内存中的字符,将其显示到显示器的屏幕上,再转换为小写字母后写回原存储单元。

E 20FO(送入将被显示的6个字符‘A’,~‘F’到内存20F0开始的存储区域中)

0041 0042 0043 0044 0045 0046

A 2080

2080:MVRD R3,0006 ;指定被读数据的个数

MVRD R2,20F0 ;指定被读,写数据内存区首地址

2084:LDRR R0,[R2] ;读内存中的一个字符到R0寄存器

CALA 2100 ;调用于程序,完成显示。转换并写回的功能

DEC R3 ;检查输出的字符个数

JRZ 208B ;完成输出则结束程序的执行过程

INC R2 ;未完成,修改内存地址

JR 2084 ;转移到程序的2086处,循环执行规定的处理

208B:RET

A 2100 ;输入用到的于程序到内存2100开始的存储区

2100:OUT 80 ;输出保存在R0寄存器中的字符

MVRD R1,0020

ADD R0,R1 ;将保存在R0中的大写字母转换为小写字母

STRR [R2],R0 ;写R0中的字符到内存,地址同LOD所用的地址

2105:IN 81 ;测试串行接口是否完成输出过程

SHR R0

JRNC 2105 ;未完成输出过程则循环测试

RET ;结束子程序执行过程,返回主程序

运行过程中,可以直接看到屏幕上显示的内容,运行过后,再用D 20F0命令看内存的20F0区域中保存的运行结果:

0061 0062 0063 0064 0065 0066

上述程序都是用监控程序的A命令完成输入汇编源程序的。在涉及到汇编语句标号的地方,不能用符号表示,只能在指令中使用绝对地址。使用内存中的数据,也由程序员给出数据在内存中的绝对地址。对这样的极短小程序矛盾并不突出,对很大的程序一定会有较大的困难。

实验二 脱机运算器实验

一、实验目的

1、深入了解位片结构运算器AM2901的功能与用法;

2、学习由4片AM2901组成一个16位运算器的级连方式,深化运算器部件的组成、设计、控制和使用等方面的知识。

二、实验原理

运算器是计算机中执行各种算术和逻辑运算操作的部件。运算器的基本操作包括加、减、乘、除四则运算,与、或、非、异或等逻辑运算,以及传送、移位、比较等操作。运算器的组成除了ALU 单元外,还包括必要的寄存器和移位器等部件。寄存器用于存放操作数和运算结果,以节省访问存储器的时间;移位器实现数据的移位功能,以扩展ALU 的运算功能,增加数据传送的灵活性。

1、AM2901的结构与组成

AM2901是一个4位的位片结构运算器器件。主要由ALU 、输入多路选择器、输出选择器、寄存器组和移位器等部件组成,如图1-1所示。

TEC-2000指令系统

图2-1 AM2901芯片的内部组成结构

2、AM2901各组成部分及其功能 1)算术逻辑ALU

ALU 为4位算术逻辑单元,共有8种运算功能,由输入端I 5I 4I 3的编码值确定执行哪种功能。 2)通用寄存器组

AM2901内部有一个通用寄存器组,共有16个4位寄存器。寄存器组有A 和B 两个端口,其中端口A 只具有读出数据功能,而端口B 具有读出和写入两种功能。即数据可以从A 口和B 口输出,但只能从B 口输入。

3)Q 寄存器

Q 寄存器位4位,在乘除运算中可用来存放乘数或商,故称做乘商寄存器。Q 寄存器本身具有移位功能,可对数据进行左移一位或右移一位的处理。

I 6 I 7 I 8

4)ALU 输入多路选择器

AM2901具有两个输入多路选择器R 和S ,为ALU 提供两个操作数。R 可选择来自数据线的数据D 或寄存器组端口A 的数据;S 可从寄存器组端口A 、B 和Q 寄存器3个来源选取数据。两个操作数的组合由控制信号I 2I 1I 0的编码确定。

5)移位器

4位,用于对ALU 的输出实现直送、左移或右移处理。 6)输出选择门

选择AM2901输出数据Y 的来源。输出数据Y 有两个来源:一个是ALU 的运算结果F ,另一个是直接来自寄存器组端口A 。输出数据Y 的选择,以及ALU 的运算结果F 如何传送给寄存器组端口B 的输入或Q 寄存器,由控制信号I 8I 7I 6的编码值确定。

表1-1、表1-2和表1-3为ALU 操作运算、数据来源以及运算结果处理的选择情况。

表1-1 选择8种运算 表1-2 选择ALU 的8种输入数据组合

TEC-2000指令系统

TEC-2000指令系统

注:D 表示外部数据

表1-3 选择运算器的8种结果的处置方案

TEC-2000指令系统

三、实验内容与步骤

脱机运算器实验,是指把运算器部件完全脱离与计算机主机和其他部件正常的连接关系,在完全孤立出来的运算器上进行的实验。此时,只能通过开关、按键控制教学机的运算器完成指定的运算功能,并通过信号指示灯观察运算结果。

除I 8~I 0 的9个开关之外,另个开关的功能和作用如下:

1)A 口、B 口地址:输入从A 口、B 口对内部寄存器组的寄存器进行读、写操作的地址。 2)SCI (2位):选择最低位进位输入信号C 0的形成,可取0、1,也可取进位标志C 的值(用于带进位的加、减运算)。

3)SSH (2位):选择移位器左移、右移时最高位或最低位的移入信号。 4)SST (3位):选择运算器的操作结果对状态标志寄存器的影响,即选择某个操作结果将对状态寄存器的标志有什么样的影响。

实验内容与步骤:

1、打开电源开关后,将教学机左下方的5个拨动开关置为1XX00(单步、16位、脱机方式);先

按一下“RESET”按键,再按一下“START”按键,进行初始化。

2、将SST设置为“001”,通过两个12位的微型拨动开关向运算器提供控制信号。

3、按下表所列的操作进行脱机运算器实验,将结果填入表中。其中D1取为0101H,D2取为1010H;D1、D2通过16位数据开关向运算器提供数据;通过指示灯观察运算结果及状态标志。

TEC-2000指令系统

四、实验要求

1、认真写出预习报告,包括实验用的全部数据,实验操作步骤等。

2、实验之后写出实验报告,包括实验过程中遇到的问题,解决方法,实验后的心得体会及对该次实验的建议与意见。