计算机组成原理实验报告2 下载本文

内容发布更新时间 : 2024/6/26 12:01:20星期一 下面是文章的全部内容请认真阅读。

信息科学技术学院实验报告(首页) 课程名称 计算机组成原理 实验名称 基础汇编语言程序设计 姓名

班级 16软件工程1班 教导教师 组号

学号

日期 2018年5月7日

一、实验目的

1.学习TEC-XP+十六位机监控命令的用法: 2.学习TEC-XP+十六位机的指令系统;

3.学习简单TEC—XP+十六位机汇编程序设计。

二、实验环境、设备与器件

1.TEC-XP+教学计算机。

三、实验内容与步骤

(1)实验内容

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

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

(2)实验步骤

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

A 2000 ;地址从16进制2000(内存RAM区的起始地址)开始 2000:MVRD R0,0036 ;把字符‘6’的ASCII码送入R0 2002:OUT 80 ;在屏幕上输出显示字符‘6’,80为串行接口地址 2003:RET ;每个用户程序都必须用RET指令结束 2004: ;(按回车键即结束输入过程)

这就建立了一个从主存2000h地址开始的小程序。在这种方式下,所有的数字都约定使用16进制数,故数字后不用跟字符h,每个用户程序的最后一个语句一定为RET汇编语句。因为监控程序是选用类似子程序调用方式使实验者的程序投入运行的,用户程序只有用RET语句结束,才能保证程序运行结束时能正确返回到监控程序的断点,保证监控程序能继续控制教学机的运行过程。

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

2020 MVRD R2,000A ;送入输出字符个数 MVRD R0,0030 ;“0”字符的ASCII码送寄存器R0 OUT 80 ;输出保存在R0低位字节的字符 DEC R2 ;输出字符个数减1

JRZ 202E ;判10个字符输出完否,已完,则转到程序结束处 PUSH R0 ;未完,保存肋的值到堆栈中

2028 IN 81 ;查询接口状态,判字符串行输出完成否, SHR R0

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

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

1

INC R0 ;得到下一个要输出的字符 JR 2024 ;转去输出字符 202E RET

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

该程序的执行码放在2020起始的连续内存区中。若送入源码的过程中有错,系统会进行提示,等待重新打入正确汇编语句。在输入过程中,在应打入语句的位置直接打回车则结束输入过程。

接下来可用G 2020命令运行该程序。 思考题:若要求在终端屏幕上输出‘A’到‘Z’共26个英文字母,应如何修改例1中给出的程序?请验证之。

【例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开始的存储区域中)

2

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

(3)实验结果

程序1结果:

3