计算机原理实验报告.docx
《计算机原理实验报告.docx》由会员分享,可在线阅读,更多相关《计算机原理实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
计算机原理实验报告
计算机科学系实验报告(首页)
课程名称:
计算机组成原理实验名称:
基础汇编语言程序设计
一、实验目的:
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;在屏幕上输出显示字符‘6’,80为串行接口地址
2003:
RET;每个用户程序都必须用RET指令结束
2004:
;(按回车键即结束输入过程)
这就建立了一个从主存2000h地址开始的小程序。
在这种方式下,所有的数字都约定使用16进制数,故数字后不用跟字符h,每个用户程序的最后一个语句一定为RET汇编语句。
因为监控程序是选用类似子程序调用方式使实验者的程序投入运行的,用户程序只有用RET语句结束,才能保证程序运行结束时能正确返回到监控程序的断点,保证监控程序能继续控制教学机的运行过程。
【例2】设计一个小程序,用次数控制在终端屏幕上输出’0’到’9’十个数字符
A2020
2020MVRDR2,000A;送入输出字符个数
MVRDR0,0030;“0”字符的ASCII码送寄存器R0
OUT80;输出保存在R0低位字节的字符
DECR2;输出字符个数减1
JRZ202E;判10个字符输出完否,已完,则转到程序结束处
PUSHR0;未完,保存肋的值到堆栈中
2028IN81;查询接口状态,判字符串行输出完成否,
SHRR0
JRNC2028;未完成,则循环等待
POPR0;已完成,准备输出下一字符并从堆栈恢复R0的值
INCR0;得到下一个要输出的字符
JR2024;转去输出字符
202ERET
这个程序只使用基本汇编语句。
理解中的一个难点,是程序当中判串行口是否完成一个字符的输出过程并循环等待的三个汇编语句。
具体解释见有关串行接口讲解部分的内容。
该程序的执行码放在2020起始的连续内存区中。
若送入源码的过程中有错,系统会进行提示,等待重新打入正确汇编语句。
在输入过程中,在应打入语句的位置直接打回车则结束输入过程。
接下来可用G2020命令运行该程序。
【例3】从键盘上连续打入多个属于’0’到’9’的数字符并在屏幕上显示,遇非数字符结束输入过程。
A2040
2040MVRDR2,0030;用于判数字符的下界值
MVRDR3,003A;用于判数字符的上界值
2044IN81;判键盘上是否按了一个键,
SHRR0;即串行口是否有了输入的字符
SHRR0
JRNC2044;没有输入则循环测试
IN80;输入字符到R0
MVRDR1,00FF
ANDR0,R1;清零R0的高位字节内容
CMPR0,R2;判输入字符≥字符’0’否
JRNC2053;为否,则转到程序结束处
CMPR0,R3;判输入字符≤字符’g’否
JRC2053;为否,则转到程序结束处
OUT80;输出刚输入的数字符
JMPA2044;转去程序前边2044处等待输入下一个字符
2053RET
思考题:
本程序中为何不必判断串行口输出完成否?
设计打入‘A’~‘Z’和‘0’~‘9’的程序,遇其它字符结束输入过程。
【例4】计算1到10的累加和。
A2060
2060MVRDR1,0000;置累加和的初值为0
MVRDR2,000A;最大的加数
MVRDR3,0000
2066INCR3;得到下一个参加累加的数
ADDR1,R3;累加计算
CMPR3,R2;判是否累加完
JRNZ2066;未完,开始下一轮累加
RET
运行过后,可以用R命令看R1中的累加结果。
【例5】设计一个有读写内存和子程序调用指令的程序,功能是读出内存中的字符,将其显示到显示器的屏幕上,转换为小写字母后再写回存储器原存储区域。
E20FO(送入将被显示的6个字符‘A’,~‘F’到内存20F0开始的存储区域中)
004100420043004400450046
A2080
2080MVRDR3,0006;指定被读数据的个数
MVRDR2,20F0;指定被读,写数据内存区首地址
2084LDRRR0,[R2];读内存中的一个字符到R0寄存器
CALA2100;调用于程序,完成显示。
转换并写回的功能
DECR3;检查输出的字符个数
JRZ208B;完成输出则结束程序的执行过程
INCR2;未完成,修改内存地址
JR2084;转移到程序的2086处,循环执行规定的处理
208BRET
A2100;输入用到的于程序到内存2100开始的存储区
2100OUT80;输出保存在R0寄存器中的字符
MVRDR1,0020
ADDR0,R1;将保存在R0中的大写字母转换为小写字母
STRR[R2],R0;写R0中的字符到内存,地址同LOD所用的地址
2105IN81;测试串行接口是否完成输出过程
SHRR0
JRNC2105;未完成输出过程则循环测试
RET;结束子程序执行过程,返回主程序
运行过程中,可以直接看到屏幕上显示的内容,运行过后,再用D20F0命令看内存的20F0区域中保存的运行结果:
006100620063006400650066
5.运行结果。
6.实验体会
通过本次实验,发现基础语言比较简单,比较容易理解,但是我还是掌握的不好。
以后有机会再深究。