计算机组成原理实验1.docx
《计算机组成原理实验1.docx》由会员分享,可在线阅读,更多相关《计算机组成原理实验1.docx(10页珍藏版)》请在冰豆网上搜索。
计算机组成原理实验1
实验一基础汇编语言程序设计
一、实验目的:
1、学习和了解TEC-XP16教学实验系统监控命令的用法。
2、学习和了解TEC-XP16教学实验系统的指令系统。
3、学习简单的TEC-XP16教学实验系统汇编程序设计。
二、预习要求:
1、学习TEC-XP16机监控命令的用法。
2、学习TEC-XP16机的指令系统、汇编程序设计及监控程序中子程序调用。
3、学习TEC-XP16机的使用,包括开关、指示灯、按键等。
4、了解实验内容、实验步骤和要求。
三、实验步骤:
在教学计算机硬件系统上建立与调试汇编程序有几种操作办法。
第一种办法,是使用监控程序的A命令,逐行输入并直接汇编单条的汇编语句,之后使用G命令运行这个程序。
缺点是不支持汇编伪指令,修改已有程序源代码相对麻烦一些,适用于建立与运行短小的汇编程序。
第二种办法,是使用增强型的监控程序中的W命令建立完整的汇编程序,然后用M命令对建立起来的汇编程序执行汇编操作,接下来用G命令运行这个程序。
适用于比较短小的程序。
此时可以支持汇编伪指令,修改已经在内存中的汇编程序源代码的操作更方便一些。
第三种办法,是使用交叉汇编程序ASEC,首先在PC机上,用PC机的编辑程序建立完整的汇编程序,然后用ASEC对建立起来的汇编程序执行汇编操作,接下来把汇编操作产生的二进制的机器指令代码文件内容传送到教学机的内存中,就可以运行这个程序了。
适用于规模任意大小的程序。
在这里我们只采用第一种方法。
在TEC-XP16机终端上调试汇编程序要经过以下几步:
1、使教学计算机处于正常运行状态(具体步骤见附录联机通讯指南)。
2、使用监控命令输入程序并调试。
⑴用监控命令A输入汇编程序
>A或>A主存地址
如:
在命令行提示符状态下输入:
A2000↙;表示该程序从2000H(内存RAM区的起始地址)地址开始
屏幕将显示:
2000:
输入如下形式的程序:
2000:
MVRDR0,AAAA;MVRD与R0之间有且只有一个空格,其他指令相同
2002:
MVRDR1,5555
2004:
ADDR0,R1
2005:
ANDR0,R1
2006:
RET;程序的最后一个语句,必须为RET指令
2007:
(直接敲回车键,结束A命令输入程序的操作过程)
若输入有误,系统会给出提示并显示出错地址,用户只需在该地址重新输入正确的指令即可。
⑵用监控命令U调出输入过的程序并显示在屏幕上
>U或>U主存地址
如:
在命令行提示符状态下输入:
U2000↙
在相应的地址会得到输入的指令及其操作码
注意:
连续使用不带参数的U命令时,将从上一次反汇编的最后一条语句之后接着继续反汇编。
通过这一步进一步检查程序是否有除了语法外的其它错误。
⑶通过监控命令G(连续执行)或T/P(单步执行)执行程序
>G/T/P或>G/T/P主存地址
如:
在命令行提示符状态下输入:
G2000↙
程序运行结束后,可以看到程序的运行结果,屏幕显示各寄存器的值,其中R0和R1的值均为5555H,说明程序运行正确。
⑷修改或显示寄存器或内存值的命令。
R、D、E命令的使用
1)用R命令查看寄存器内容或修改寄存器的内容
a.在命令行提示符状态下输入:
R↙;显示寄存器的内容
注意:
寄存器的内容在运行程序或执行命令后会发生变化。
b.在命令行提示符状态下输入:
RR0↙;修改寄存器R0的内容,被修改的寄存器与所赋值之间可以无空格,也可有一个或数个空格
主机显示:
寄存器原值:
_
在该提示符下输入新的值0036
再用R命令显示寄存器内容,则R0的内容变为0036。
2)用D命令显示存储器内容
在命令行提示符状态下输入:
D2000↙
会显示从2000H地址开始的连续128个字的内容;
连续使用不带参数的D命令,起始地址会自动加128(即80H)。
3)用E命令修改存储器内容
在命令行提示符状态下输入:
E2000↙
屏幕显示:
2000地址单元的原有内容:
光标闪烁等待输入
输入0000
依次改变地址单元2001-2005的内容为:
11112222333344445555
注意:
用E命令连续修改内存单元的值时,每修改完一个,按一下空格键,系统会自动给出下一个内存单元的值,等待修改;按回车键则退出E命令。
四、实验内容:
1、输入下列各汇编程序段,将结果调试出来,并回答问题。
程序1:
A2000↙
2000:
IN81
SHRR0
SHRR0
JRNC2000
IN80
OUT80
RET
注意:
在十六位机中,基本I/O接口的地址是确定的,数据口的地址为80,状态口的地址为81。
问题:
⑴该程序段的功能是什么?
从键盘上接收一个字符并在屏幕上输出显示该字符
程序2:
>A2060↙
2060:
MVRDR1,0000
MVRDR2,00OA
MVRDR3,0000
2066:
INCR3
ADDR1,R3
CMPR3,R2
JRNZ2066
RET
问题:
⑴该程序段的功能是什么?
计算1到10的累加和
⑵如何察看结果?
结果是什么?
输入G2060结果为:
R1=0037R2=00OAR3=00OA
⑶请用一字长的指令替换程序中的MOVR3,0写出该语句。
Movr3,r1
程序3:
用次数控制在终端屏幕上输出'0'到'9'十个数字符。
>A2020↙
2020:
MVRDR2,00OA;送入输出字符个数
MVRDR0,0030;“0”字符的ASCII码送寄存器R0
OUT80;输出保存在R0低位字节的字符
DECR2;输出字符个数减1
JRZ202E;判10个字符输出完否,已完,则转到程序结束处
PUSHR0;未完,保存R0的值到堆栈中
2028:
IN81;查询接口状态,判字符串行输出完成否,
SHRR0;
JRNC2028;未完成,则循环等待
POPR0;已完成,准备输出下一字符并从堆栈恢复R0的值
INCR0;得到下一个要输出的字符
JR2024;转去输出字符
202E:
RET
五、思考题:
⑴若把IN81,SHRR0,JRNC2028三个语句换成4个MVRRR0,R0语句,该程序执行过程会出现什么现象?
试分析并实际执行一次。
程序改变这三条语句后,若用T命令单条执行,会依次显示0,9十个数字。
若用G命令运行程序,由于程序运行速度快,端口串行输出的速度很慢,这样新会丢失某些输出的字行;如,在命令行提示符状态下输入G2020命令后,屏幕可能的显示为059或069,而不是023456789全部的10个字符。
⑵若要求在终端屏幕上输出'A'到'Z'共26个英文字母,应如何修改程序?
请验证之。
A2100
MVRDR2,001A
MVRDR0,0041
OUT80
DECR2
JRZ210E
PUSHR0
IN81
SHRR0
JRNC2108
POPR0
INCR0
JR2104
RET
2、试编写程序完成两个双字长的数相加并验证之。
3、设计一个有读写内存和子程序调用指令的程序,功能是读出内存中的字符,将其显示到显示器的屏幕上,转换为小写字母后再写回存储器原存储区域。
E20FO↙
屏幕将显示:
20F0:
按下列格式输入:
20Fo:
41
20F1:
42
20F2:
43
20F3:
44
20F4:
45
20F5:
45
2)在命令行提示符状态下输入
A2080↙
屏幕将显示:
2080:
从地址2080开始输入下列程序:
(2080)MVDR3,06:
指定技读数据的个数
MVDR9,20:
指定被读、写数据内存区首地址
MVDR8,F0
(2086)LODR0:
使内存中的一个字符到R0寄存器
MVDRB,21;指定于程序地址为2100
MVDRA,00
CALL;调用于程序,完成显示、转换并写回的功能
DECR3;检查输出的字符个数
JZ2092;完成输出则结束程序的执行过程
INCR8;未完成,修改内存地址
JR2086:
转移到程序的2086处,循环执行规定的处理
(2092)RET
A2100输入用到的子程序到内存2100开始的存储区
OUT00:
输出保存在R0寄存器中的字符
MVDR1,20:
转换保存在R0中的大写字母为小写字母
ADDR0,B1
STOR0;写R0中的字符到内存,地址同LOD所用的地址
(2105)IN01;测试串行接口是否完成输出过程
SHRR0
JNC2105;末完成输出过程则循环试
RET:
结束子程序执行过程,返回主程序
3)在命令行提示符状态下输入:
G2080↙
屏幕显示运行结果为:
ABCDEF
11个寄存器内容及状态标志
2080:
MVDR3,06
4)在命令行提示符状态下输入:
D20F0↙
20F0—20F5内存单元的内容为:
6l6263646566
4、设计一个程序在显示器屏幕上循环显示95个(包括空格字符)可打印字符。
A20A0;从内存的20A0单元开始建立用户的第一个程序
20A0:
MVRDR1,7E;向寄存器传送立即数
20A2:
MVRDR0,20;
20A4:
OUT80;通过串行接口输出R0低位字节内容到显示器屏幕
20A5:
PUSHR0;保存R0寄存器的内容到堆栈中
20A6:
IN81;读串行接口的状态寄存器的内容
20A7:
SHRR0;R0寄存器的内容右移一位,最低位的值移入标志位C
20A8:
JRNC20A6;条件转移指令,当标志位C不是1时就转到20A6地址2
0A9:
POPR0;从堆栈中恢复R0寄存器的原内容
20AA:
CMPR0,R1;比较两个寄存器的内容是否相同,相同则标志位Z=1
20AB:
JRZ20A0;条件转移指令,当标志位Z为1时转到
200A0地址20AC:
INCR0;把R0寄存器的内容增加1
20AE:
JR20A4;无条件转移指令,一定转移到
20A4地址20AF:
RET;子程序返回指令,程序结束
六、实验心得: