发布时间 : 星期四 文章计算机组成原理实验手册 - 图文更新完毕开始阅读7cffb37bb4daa58da1114a34
符结束输入过程。
<1> 在命令行提示符状态下输入:
A 2040↙ 屏幕将显示: 2040:
从地址2040H开始输入下列程序:
(2040) MVRD R2,0030 ; 用于判数字符的下界值
MVRD R3,0039 ; 用于判数字符的上界值
(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 R3,R0 ; 判输入字符≤字符'9'否 JRNC 2053 ; 为否, 则转到程序结束处 OUT 80 ; 输出刚输入的数字符 JMPA 2044
(2053) RET
<2> 在命令行提示符状态下输入:
G 2040↙
光标闪烁等待键盘输入,若输入0-9十个数字符,则在屏幕上回显;若输入非数字符,则屏幕不再显示该字符,出现命令提示符,等待新命令。
;转去程序前边2044处等待输入下一个字符
思考题, 本程序中为什么不必判别串行口输出完成否? 设计打入'A'~'Z'和'0'~'9'的程序, 遇到其它字符结束输入过程。 例子4: 计算1到10的累加和。
<1> 在命令行提示符状态下输入:
A 2060↙ 屏幕将显示: 2060:
从地址2060H开始输入下列程序:
(2060)MVRD R1,0000
MVRD R2,00OA MVRD R3,0000
(2066) INC R3
; 得到下一个参加累加的数 ; 置累加和的初值为0 ; 最大的加数
17
ADD R1,R3 CMP R3,R2 JRNZ 2066 RET
; 累加计算 ; 判是否累加完 ; 未完, 开始下一轮累加
<2> 在命令行提示符状态下输入:
G 2060↙
运行过后, 可以用R命令观察累加器的内容。R1的内容为累加和。 结果为:R1=0037 R2=00OA R3=00OA
例子5:设计一个有读写内存和子程序调用指令的程序,功能是读出内存中的 字符,将其显示到显示器的屏幕上,转换为小写字母后再写回存储器原存储区域。
<1> 将被显示的6个字符‘A’~‘F’送入到内存20F0H开始的存储区域中。
在命令行提示符状态下输入: E 20F0↙ 屏幕将显示:
20F0 内存单元原值: 按下列格式输入:
20F0 内存原值:0041 内存原值:0042 内存原值:0043 内存原值:0044 内存原值:0045 内存原值:0046↙ 在命令行提示符状态下输入: 从地址2080H开始输入下列程序:
(2080)MVRD R3,0006
MVRD R2,20F0
(2084)LDRR R0,[R2]
CALA 2100 DEC R3 INC R2 JR 2084
(208B)RET
从地址2100H开始输入下列程序:
(2100)OUT 80
;输出保存在R0寄存器中的字符
;写R0中的字符到内存,地址同LOD所用的地址 ;测试串行接口是否完成输出过程
;未完成输出过程则循环测试
MVRD R1,0020 STRR [R2],R0
(2105)IN 81
SHR R0 JRNC 2105
;指定被读数据的个数
;指定被读、写数据内存区首地址 ;读内存中的一个字符到R0寄存器
;指定子程序地址为2100,调用子程序,完成显示、
转换并写回的功能 ;检查输出的字符个数 ;未完成,修改内存地址
;转移到程序的2086处,循环执行规定的处理
JRZ 208B ;完成输出则结束程序的执行过程
ADD R0,R1 ;将保存在R0中的大写字母转换为小写字母
18
RET ;结束子程序执行过程,返回主程序
<2> 在命令行提示符状态下输入:
G 2080↙ 屏幕显示运行结果为: ABCDEF
<3> 在命令行提示符状态下输入:
D 20F0↙
20F0H~20F5H内存单元的内容为: 0061 0062 0063 0064 0065 0066
例子6:设计一个程序在显示器屏幕上循环显示95个(包括空格字符)可打印字符。
<1>在命令行提示符状态下输入:
A 20A0↙ 屏幕将显示: 20A0:
从地址20A0H开始输入下列程序:
A 20A0 ;从内存的20A0单元开始建立用户的第一个程序 20A0: MVRD R1,7E ;向寄存器传送立即数 20A2: MVRD R0,20 ;
20A4: OUT 80 ;通过串行接口输出R0低位字节内容到显示器屏幕 20A5: PUSH R0 ;保存R0寄存器的内容到堆栈中 20A6: IN 81 ;读串行接口的状态寄存器的内容
20A7: SHR R0 ;R0寄存器的内容右移一位,最低位的值移入标志位C 20A8: JRNC 20A6 ;条件转移指令,当标志位C不是1时就转到20A6地址 20A9: POP R0 ;从堆栈中恢复R0寄存器的原内容
20AA: CMP R0,R1 ;比较两个寄存器的内容是否相同,相同则标志位Z=1 20AB: JRZ 20A0 ;条件转移指令,当标志位Z为1时转到200A0地址 20AC: INC R0 ;把R0寄存器的内容增加1
20AE: JR 20A4 ;无条件转移指令,一定转移到20A4地址 20AF: RET ;子程序返回指令,程序结束 <2> 在命令行提示符状态下输入:
G 20A0↙
运行过后, 可以观察到显示器上会显示出所有可打印的字符。
上述例子, 都是用监控程序的A命令完成输入源汇编程序的。在涉及到汇编语句标号的地方, 不能用符号表示, 只能在指令中使用绝对地址。使用内存中的数据, 也由程序员给出数据在内存中的绝对地址。显而易见, 对这样的极短小程序矛盾并不突出, 但很容易想到,对很大的程序, 一定会有较大的困难。
在用A命令输入汇编源语句的过程中, 有一定用机经验的人, 常常抱怨A命令中未提供适当的编辑功能, 这并不是设计者的疏漏, 因为我们并不准备在这种操作方式下支持设计较长的程序, 这种工作应转到提供了交叉汇编程序的PC机上去完成。相反的情况是, 输入上述一些小程序, 用监控程序的A命令完成, 往往比用交叉汇编完成更简捷。
19
2.2
实验目的
脱机运算器实验
深入了解AM2901运算器的功能与具体用法,4片AM2901的级连方式,深化运算器部件的组成、设计、控制与使用等诸项知识。
实验说明
脱机运算器实验,是指让运算器从教学计算机整机中脱离出来,此时,它的全部控制与操作均需通过两个12位的微型开关来完成,这就谈不上执行指令,只能通过开关、按键控制教学机的运算器完成指定的运算功能,并通过指示灯观察运算结果。
下面先把前边讲过的、与该实验直接有关的结论性内容汇总如下。 一. 12位微型开关的具体控制功能分配如下:
A口、B口地址:送给AM2901器件用于选择源与目的操作数的寄存器编号;
I8-I0:选择操作数来源、运算操作功能、选择操作数处理结果和运算器输出内容的3组3位的控制码;
SCi、SSH和SST:用于确定运算器最低位的进位输入、移位信号的入/出和怎样处理AM2901产生的状态标志位的结果。
二. 开关位置说明:
做脱机运算器实验时,要用到提供24位控制信号的微动开关和提供16位数据的拨动开关。微动开关是红色的,一个微动开关可以提供12位的控制信号,标有micro switch 1和micro switch 2;数据开关是黑色的,左边的标有SWH的是高8位,右边的标有SWL的是低8位。
微动开关与控制信号对应关系见表(由左到右):
Micro switch 1 Micro switch 2 I8-I6 I5-I3 I2-I0 SST SSH SCI B PORT A PORT
三. 开关检测
红色微动开关是该实验系统使用寿命最短的器件,开关好坏的检测方法比较简单,用户将五个控制机器工作方式的开关置于“1XX00”,从左面起第二个和第三个的开关处于任意位置,然后将两个微动开关上的24个小纽子依次置为1(开关拨到上方为1),看对应的指示灯是否亮,如果有一个或数个指示灯不亮,则一般是开关出了问题。
实验步骤
1. 将教学机左下方的5个拨动开关置为1XX00(单步、16位、脱机);先按一下“RESET”按键,再按一下“START”按键,进行初始化。
2. 接下来,按下表所列的操作在机器上进行运算器脱机实验,将结果填入表中:其中D1取为0101H,D2取为1010H;通过两个12位的红色微型开关向运算器提供控制信号,通过16位数据开关向运算器提供数据,通过指示灯观察运算结果及状态标志。
20