预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

基础汇编语言程序设计 实验目的: 1.学习和了解TEC-2000十六位机监控命令的用法; 2.学习和了解TEC-2000十六位机的指令系统; 3.学习简单的TEC-2000十六位机汇编程序设计; 实验内容: 1.使用监控程序的R命令显示/修改寄存器内容、D命令显示存储器内容、E命令修改存储器内容; 2.使用A命令写一小段汇编程序,U命令反汇编刚输入的程序,用G命令连续运行该程序,用T命令单步运行并观察程序单步执行情况; 3、执行下面程序,查看执行过程。 4、编写汇编语言程序,编写汇编语言程序,实现10(十进制)以内一位数的乘法运算,例如输入“8*9=”同步显示8*9=后接着显示72,即“8*9=72”。或实现100(十进制)以内两位数的乘法运算,例如输入“8*9=”同步显示8*9=后接着显示72,即“8*9=72”;如果输入“12*12=”则显示“12*12=144”。 实验要求 在使用该教学机之前,应先熟悉其的各个组成部分,及使用方法。 十六位教学机的汇编语言程序设计举例 例子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 MVRDR2,000A;送入输出字符个数 MVRDR0,0030;“0”字符的ASCII码送寄存器R0 OUT80;输出保存在R0低位字节的字符 DECR2;输出字符个数减1 JRZ202E;判10个字符输出完否,已完,则转到程序结束处 PUSHR0;未完,保存R0的值到堆栈中 (2028)IN81;查询接口状态,判字符串行输出完成否, SHRR0; JRNC2028;未完成,则循环等待 POPR0;已完成,准备输出下一字符并从堆栈恢复R0的值 INCR0;得到下一个要输出的字符 JR2024;转去输出字符 (202E)RET 这个程序只使用基本汇编语句。理解中的一个难点,是程序当中判串行口是否完成一个字符的输出过程并循环等待的三个汇编语句。具体解释见有关串行接口讲解部分的内容。 该程序的执行码放在2020起始的连续内存区中。若送入源码的过程中有错,系统会进行提示,等待重新打入正确汇编语句。在输入过程中,在应打入语句的位置直接打回车则结束输入过程。接下来可用G2020命令运行该程序。 思考题:当把IN01,SHRR0,JNC,2029三个语句换成4个MVRRR0,R0语句,该程序执行过程会出现什么现象?试分析并实际执行一次。 类似的,若要求在终端屏幕上输出'A'到'Z'共26个英文字母,应如何修改例1中给出的程序?请验证之。 例子3:从键盘上连续打入多个属于'0'到'9'的数字符并在屏幕上显示,遇非数字符结束输入。 A2040 (2040)MVRDR2,0030`;用于判数字符的下界值 MVRDR3,0039;用于判数字符的上界值 (2044)IN81;判键盘上是否按了一个键, SHRR0;即串行口是否有了输入的字符 SHRR0 JRNC2044;没有输入则循环测试 IN80;输入字符到R0 MVRDR1,00FF ANDR0,R1;清零R0的高位字节内容 CMPR0,R2;判输入字符≥字符'0'否 JRNC2053;为否,则转到程序结束处 CMPR0,R3;判输入字符≤字符'9'否 JRC2053;为否,则转到程序结束处,想一想做这步有什么用!! OUT80;输出刚输入的数字符 JMPA2044;转去程序前边2044处等待输入下一个字符 (2053)RET 思考题,本程序中为什么不必判别串行口输出完成否?设计打入'A'~'Z'和'0'~'9'的程序, 遇其它字符结束输入过程。 从地址2040开始输入下列程序: 例子4:计算1到10的累加和。 A2060 (2060)MVRDR1,0000;置累加和的初值为0 MVRDR2,000A;最大的加数 MVRDR3,0000 (2066)INCR3;得到下一个参加累加的数 AD