390 likes | 578 Views
第九章 教学计算机简介. 本章主要针对清华大学开发的 TEC - 2000 教学机进行讲解,并配有各部件实验。. 第一讲 运算器. TEC-2000 教学机系统的组成. 电 源 +5V. 计算机 终端. 微程序 控制器. 运算器. 接口实验 中断实验 内存扩展实验. 串行接口. 硬布线 控制器. 主存储器. PC 机. 按键 开关 指示灯. 实验设备. 按键: 用于启动计算机,执行 RESET 操作, 控制打入开关拨入的数据或地址, 作为中断源以产生中断请求信号。
E N D
第九章 教学计算机简介 • 本章主要针对清华大学开发的TEC-2000教学机进行讲解,并配有各部件实验。
TEC-2000 教学机系统的组成 电 源 +5V 计算机 终端 微程序 控制器 运算器 接口实验 中断实验 内存扩展实验 串行接口 硬布线 控制器 主存储器 PC机 按键 开关 指示灯
按键: 用于启动计算机,执行RESET操作, 控制打入开关拨入的数据或地址, 作为中断源以产生中断请求信号。 开关: 用于选择TEC-2000 机的运行方式, 可向机内拨入数据 和 地址等信息, 微型开关用于给出实验控制信号。 指示灯:有一百多个,同时显示实验机内的 各种数据、地址和控制信号的状态。
运算器 微程序控制器 主振 脉冲 C Z V S 微程序定序器 ALU 程序计数器 控制 存储器 PC R0 操作数 地址 R1 映射 乘商寄存器 寄存器组 指令寄存器 地址寄存器 微指令寄存器 Rn 操作码 IR AR . 下地址字段内容 用于运算器 数据总线 控制总线 地址总线 0 单元 接口 1单元 主存储器 输入设备 输出设备 n单元
TEC-2000 机运算器的组成 TEC-2000 机上的运算器,16 位字长,4 片 4 位的位片结构的器件组成。 可脱离 TEC-2000 主机,单独地进行运算器部件实验,也可在主机控制下完成运算器部件实验。 位片结构是说,每个器件本身就是一个完整的运算器,只是位数较少,要组成更多位数的实用运算器要用多片共同实现 这里选用的是美国AMD公司的 Am2901芯片。
输出Y 二选一 /OE F F3 F=0000 OVR Cn+4 A L U S R 组成 算逻运算部件 16 个 累加器 乘商寄存器 Q 功能 8种运算功能 8种数据组合 8种结果处理 Cn 三选一 二选一 输入D B锁存器 A锁存器 乘商寄存器Q A口地址 Q3 Q0 B 16个 A 通用寄存器 三选一 B口地址 三选一 RAM3 RAM0
Am2901芯片是一个 4位的位片结构的运算器器件,其内部组成讲解如下: F 符号位 结果为零 结果溢出 进位输出 F3 F=0000 OVR Cn+4 A L U S R Cn 第一个组成部分是算逻运算部件ALU,完成 3 种算术运算 和 5 种逻辑运算, 共计 8 种功能。 3位功能选择码 8种运算功能 000 001 010 011 100 101 110 111 R+S SR RS R∨S RS RS RS RS 其输出为 F,两路输入为 S、R, 最低位进位Cn,四个状态输出信号如图所示。
第二个组成部分 是通用寄存器组, 由16个寄存器构 成,并通过B口 与A口地址选择 被读的寄存器, B口地址还用于 指定写入寄存器。 F F3 F=0000 OVR Cn+4 A L U S R Cn B锁存器 A锁存器 通过B口地址、 A口地址读出的 数据将送到B、 A锁存器,要写 入寄存器的数据 由一个多路选择 器送来。 A口地址 B 16个 A 通用寄存器 B口地址 (写入)
第三个组成部分 是乘商寄存器Q, 它能对自己的内 容完成左右移位 功能,其输出可 以送往ALU,并 可接收ALU的输 出结果。 F F3 F=0000 OVR Cn+4 A L U S R Cn B锁存器 A锁存器 Q寄存器 A口地址 B 16个 A 通用寄存器 B口地址
一组三选一门和 另一组二选一门 用来选择送向 ALU的 R、S输 入端的数据来源 ,包括Q寄存器、 A口、 B口、外 部输入D数据的 8 种不同组合。 F F3 F=0000 OVR Cn+4 A L U S R Cn 三选一 二选一 输入D B锁存器 A锁存器 Q寄存器 A口地址 该芯片的第四个 组成部分是 5 组 多路选通门,包括 B 16个 A 通用寄存器 8种数据组合(R,S) AQ AB 0Q 0B 0A DA DQ D0 B口地址 3位数据选择码 000 001 010 011 100 101 110 111
一组三选一门 完成把ALU的 输出、或左移 一位、或右移 一位的值送往 通用寄存器组 ,最高、最低 位移位信号有 双向入/出问题 F F3 F=0000 OVR Cn+4 A L U S R Cn 三选一 二选一 输入D 一组三选一门 完成Q寄存器 的左移一位、 或右移一位、 或接收ALU输 出值的功能, 最高、最低位 移位信号有双 向入/出问题。 B锁存器 A锁存器 Q寄存器 A口地址 Q3 Q0 B 16个 A 通用寄存器 三选一 B口地址 三选一 RAM3 RAM0
输出Y 一组二选一门, 选择把A口数据 或ALU结果送出芯片,以给出输出Y的数据,Y输出的有无还受输出使能 /OE信号的控制,仅当 /OE为低是才有Y输出 ,/OE为高,Y输出为高阻态。 二选一 /OE F F3 F=0000 OVR Cn+4 A L U S R Cn 三选一 二选一 输入D B锁存器 A锁存器 Q寄存器 A口地址 Q3 Q0 B 16个 A 通用寄存器 三选一 B口地址 三选一 RAM3 RAM0
8 种结果处理 • 3位控制码 通用寄存器 Q寄存器 Y输出 • 000 QF F • 001 F • 010 BF A • 011 BF F • 100 BF/2 QQ/2 F • 101 BF/2 F • 110 B2F Q2Q F • 111 B2F F
I5~I3: 运算功能 I8~I6: 运算结果处理 I2~I0:数据来源 编码 000 001 010 011 100 101 110 111
返回 入出信号及引脚 Y3~Y0 CP OE Cy F=0 Over F3 Cin Am2901 RAM3 RAM0 Q3 Q0 A3~A0 B3~B0 I8~I6 I2~I0 I5~I3 D3~D0
返回 Am2901的操作使用 控制信号 B口 A口 I8 I7 I6 I5 I4 I3 I2 I1 I0 Cn 操作功能 R0R0+R1 0000 0001 011 000 001 0 R2R2R0 0010 0000 010 001 001 1 右移 R0R0+R1 0000 0001 101 000 001 0 / 0000 QR0 Y F 0000 000 000 100 0 R0R0R1 Y A口 0000 0001 010 100 001 0 R0R0R1 Y F 0000 0001 011 100 001 0
F=0 F15 Y15~12 OVER Cy 高位 Am2901 Am2901 Am2901 Am2901 RAM15 Q15 CP A口 B口 I8~6 I5~3 I2~0 D15~12 返回 Vcc R 4 片Am2901之间的连接 Y11~8 Y3~0 Y7~4 Cin RAM0 Q0 D3~0 D11~8 D7~4
返回 入出信号及引脚 Y15~Y0(指示灯显示) 一片GAL 一片GAL SST CP OE(已接地) Cy F=0 Over F15 SCi Cin 运 算 器 部 件 4片2901 RAM15 RAM0 Q15 Q0 SSH A3~A0 B3~B0 I8~I6 I5~I3 I2~I0 2个12位的微型开关 D15~D0(开关拨数)
返回 运算器用的GAL20V8的控制信号 • GAL1:状态寄存器 GAL3:进位入、移位入 • SST C Z V S SCi 运算 Cn 运算 Cn • 000 C Z V S 00 加 0 减 1 • 001 Cy ZROV F15 01 加 1 减 0 • 010 内部总线的一位 10 加 C 减 /C • 011 1 Z V S 11 方波 方波 • 100 0 Z V S SSH 左移位 右移位 • 101 RAM0 Z V S 00 0 X 0 X • 110 RAM15 Z V S 01 C X C X • 111 Q0 Z V S 10 Q15 /F15 CyRAM0 • RAM0 Q0 RAM15 Q15
返回 16位运算器脱机实验 Y15~Y0 (用16个指示灯显示结果) 用四个指示灯显示状态 SST SCi C Z V S Cy F=0 Over F15 Cin 运 算 器 部 件 RAM15 RAM0 Q15 Q0 A3~0 I5~3 D15~D0 B3~0 SSH I8~6 I2~0 (用16个开关提供输入数据) 通过24位微型开关 提供控制信号 A口 B口 SCi SSH I8~6 I5~3 I2~0 SST
返回 16 位运算器的操作使用 SCi 控制信号 B口 A口 SST I8~6 I5~3 I2~0 Cn SSH 操作功能 R0R0+R1 0000 0001 001 011 000 001 00 / R2R2R0 0010 0000 001 010 001 001 / 01 右移 R0R0+R1 逻辑右移 00 01 0000 0001 001 101 000 001 00 与C循环右移 / 0000 QR0 Y F 0000 001 000 000 100 00 / 联合左移 R0QR0R3Q 0000 0011 001 110 001 001 01 10 / R0R0R1 Y A口 0000 0001 001 010 100 001 00
8位 4位 4位 目的寄存器 源寄存器 操 作 码 I/O 端 口 地 址 条件转移指令的偏移量 直接数 / 内存地址 / 指令中变址偏移量 第二讲 教学机指令系统 一、教学机的指令格式 单字指令仅用一个指令字。 双字指令要用两个指令字, 此时第二个指令字的内容可能是立即数、一个绝对地址或一个变址位移量。
二、指令分类 根据不同的分类标准,可以把TEC-2000 16位教学计算机的指令划分为如下几类: (1)从指令长度区分,有单字指令和双字指令。 (2) 从操作数的个数区分,有双操作数指令、单操作数指令和无操作数指令。 (3)从使用的寻址方式区分,有寄存器寻址、寄存器间址、立即数寻址、直接寻址、相对寻址等多种基本寻址方式。 (4)从指令功能区分,有算术和逻辑运算类指令、读写内存类指令、输人输出类指令、转移类指令、子程序调用和返回类指令,还有传送、移位、置进位标志和清进位标志指令。
(5)按照指令的执行步骤,可以把该机的指令划分为如下4组: A组(通用寄存器之间的数据运算或传送): 基本指令:ADD、SUB、AND、OR、XOR、CMP、TEST、MVRR、DEC、INC、SHL、SHR、JR、JRC、JRNC、JRZ、JRNZ 扩展指令:ADC、SBB、RCL、RCR、ASR、N0T、CLC、STC、EI、CI、JRS、JRNS、JMPR B组(一次内存或I/0读、写操作 ): 基本指令:JMPA、LDRR、STRR、PUSH、P0P、PSHF、P0PF、MVRD、IN、0UT、RET
C组(取指之后可3步完成): 扩展指令CALR、LDRA、STRA、LDRX、STRX D组(两次读、写内存操作,取指之后可4步完成): 基本指令CALA 扩展指令IRET 教学机实现了上面4组中的29条基本指令,用于支持教学机的监控程序和简单的汇编语言程序设计。 保留了其余19条扩展指令,供学生在教学实验中完成对这些指令的设计与调试。
16位教学机的指令格式,支持单字和双字指令,第1个指令字的高8位是指令操作码字段,低8位和双字指令的第2个指令字是操作数、地址字段。16位教学机的指令格式,支持单字和双字指令,第1个指令字的高8位是指令操作码字段,低8位和双字指令的第2个指令字是操作数、地址字段。 8位指令操作码(记作“IRH7←IRH0”),含义如下: (1)IRH7、IRH6用于区分指令组:0X表示A组,10表示B组,11表示C、D组;C、D组的区分还要用IRH3,IRH3=0为C组,IRH3=1为D组。 (2)IRH5用于区分基本指令和扩展指令:基本指令该位为0,扩展指令该位为1。 (3)IRH4用于简化控制器实现,暂定其值恒为0。 (4)IRH3---IRH0用于区分同一指令组中的不同指令。
三、TEC-2000 16位机基本指令系统 指令格式 汇编语句 操作数个数 CZVS 指令分组 功能说明 00000000 DRSR ADD DR,SR 2 ***** A DR←DR+SR 00000001 DRSR SUB DR,SR 2 ***** A DR←DR-SR 00000010 DRSR AND DR,SR 2 ***** A DR←DR and SR 00000011 DRSR CMP DR,SR 2 ***** A DR-SR 00000100 DRSR XOR DR,SR 2 ***** A DR←DR xor SR 00000101 DRSR TEST DR,SR 2 ***** A DR and SR 00000110 DRSR OR DR,SR 2 ***** A DR←DR or SR 00000111 DRSR MVRR DR, SR 2 • • • • A DR←SR 00001000 DR0000 DEC DR 1 ***** A DR←DR-1 00001001 DR0000 INC DR 1 ***** A DR←DR+1 00001010 DR0000 SHL DR 1 * • • • A DR,C←DR*2 00001011 DR0000 SHR DR 1 * • • • A DR,C←DR /2 01000001 OFFSET JR ADR 1 • • • • A 无条件跳转 01000100 OFFSET JRC ADR 1 • • • • A C=1 时跳转 01000101 OFFSET JRNC ADR 1 • • • • A C=0 时跳转 01000110 OFFSET JRZ ADR 1 • • • • A Z=1 时跳转 01000111 OFFSET JRNZ ADR 1 • • • • A Z=0 时跳转
TEC-2000 16位机基本指令系统 指令格式 汇编语句 操作数个数 CZVS 指令分组 功能说明 10000000 0000000 JMPA ADR 1 • • • • B 无条件跳到ADR ADR(16位) 10000001 DRSR LDRR DR,[SR] 2 • • • • B DR←[SR] 10000010 I/O PORT IN I/O PORT 1 • • • • B R0←[I/O PORT] 10000011 DRSR STRR [DR],SR 2 • • • • B [DR]←SR 10000100 00000000 PSHF 0 • • • • B FLAG 入栈 10000101 0000SR PUSH SR 1 • • • • B SR 入栈 10000110 I/O PORT OUT I/O PORT 1 • • • • B [I/O PORT]←R0 10000111 DR POP DR 1 • • • • B 出栈到 DR 00001000 DR0000 MVRD DR, DATA 2 • • • • B DR←DATA DATA(16位) 10001100 00000000 POPF 1 • • • • B FLAG←出栈 10001111 00000000 RET 1 • • • • B 子程序返回 11001110 00000000 CALA ADR 1 • • • • D 调用子程序 ADR(16位)
16位机根据指令字长、操作数不同可划分为如下5种指令格式:16位机根据指令字长、操作数不同可划分为如下5种指令格式: 1.单字、无操作数指令 基本指令 PSHF; 状态标志(C、Z、V、S、Pl、P0)入栈 P0PF; 弹出栈顶数据送状态标志寄存器 RET; 子程序返回 扩展指令 CLC; 清进位标志位C=0 STC; 置进位标志位C=l EI; 开中断,置中断允许位INTE=1 DI; 关中断,置中断允许位INTE=0 IRKTl 中断返回
2.单字、单操作数指令 • 基本指令 DEC DR; DR←DR―1 INC DR; DR←DR十1 SHL DR; DR逻辑左移,最低位补0,最高位移入C SHR DR; DR逻辑右移,最高位补0,最低位移入C JR ADR; 无条件跳转到ADR,ADR=原PC值十OFFSET JRC ADR; 当C=1时,跳转到ADR,ADR=原PC值+OFFSET JRNC ADR;当C=0时,跳转到ADR,ADR=原PC值+OFFSET JRZ ADR; 当Z=1时,跳转到ADR,ADR=原PC值+OFFSET JRNZ ADR; 当Z=0时,跳转到ADR,ADR=原PC值十OFFSET IN I/O PORT; R0←[I/O PORT],从外设I/O PORT端口读人数据到R0 OUT I/O PORT;[I/O PORTl←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 N0T DR; DR求反,即DR←/DR JMPR SR; 无条件跳转到SR指向的地址 CALR SR; 调用SR指向的子程序 JRS ADR; 当S=l时,跳转到ADR,ADR=原PC值十0FFSET JRNS ADR;当S=0时,跳转到ADR,ADR=原PC值十0FFSET
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 X0R DR,SR; DR←DR xor SR TEST DR,SR; DR and SR OR DR,SR; DR4←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.双字、双操作数指令 基本指令 MVRD DR,DATA; DR←DATA 扩展指令 LDRA DR,[ADR]; DR←[ADR] STRA [ADR],SR; [ADR]←SR LDRX DR,0FFSET[SR]; DR←[0FFSET十SR] STRX DR,0FFSET[SR]; [0FFSET十SR]←[DR]
四、16位教学计算机的简单汇编程序设计举例 例1 在显示器屏幕上循环显示95个可打印ASCII字符。 2000: MVRD R1,7E ;向寄存器传送直接数 2002: MVRD R0,20 2004: OUT 80 ;通过串行接口输出R0低位字节内容 2005: PUSH R0 ;保存R0寄存器的内容到堆栈中 2006: IN 81 ;读串行接口的状态寄存器的内容 2007: SHR R0 ;R0寄存器的内容右移←位 2008: JRNC 2006 ;当标志位C不是l时就转移到2006地址 2009: POP R0 ;从堆栈中恢复R0寄存器的原内容 200A: CMP R0,R1 ;相同则标志位z=1 200B: JRZ 2000 ;当标志位z为1时就转移到2000地址 200C: INC R0 ;把R0寄存器的内容增加l 200B: JR 2004 ;无条件转移指令,转移到2004地址 200F: RET ;子程序返回指令
例2 把字符“A” ―“F”写到内存的2040―2045几个单元, 之后再读出来并显示到屏幕上。 2020: MVRD R3,06 ;给出写内存操作的次数 2022: MVRD R2,203F 2024: MVRD R1,40 2026: INC R2 ;给出写内存操作的内存地址 2027: INC R1 ;给出写内存操作的数据内容 2028: STRR[R2],R1 2029: LDRR R0,[R2] ;读出内存单元的数据到R0寄存器 202A:OUT 80 202B:IN 8l 202C:SHR R0 202D:JRNC 202B 202E:DEC R3 ;检查6次写内存操作是否完成 202F:JRNZ 2026 ;末完则开始下←次写内存操作 2030:RET ;程序结束
例3 从键盘输入字符并送到显示器屏幕显示。 利用子程序将大写英文字母变为小写并将其显示出来。 2040: IN 81 ;检查有无敲击过键盘上的一个键 2041: SHR R0 2042: SHR R0 2043: JRNC 2040 2044: IN 80 2045: OUT 80 ;输出R0低位字节内容到显示器屏幕 2046: PUSH R0 2047: IN 8l 2048: SHR R0 2049: IRNC 2047 204A: POP R0 204B: CALA 2050 ;调用子程序 204D: JMPA 2040 ;转移指令,转移地址为2040 204A: RET
;以下是一个子程序 2050: MVRD R1,20 2051: ADD R0,R1 ;修改输入的字符的编码 2052: 0UT 80 ;把修改过的字符输出到显示器屏幕 2053: RET ;子程序返回指令