南京工程学院计算机工程学院计算机组成与结构实验报告书实验学生班级K网络工程121实验学生姓名王云峰学号240121525实验地点信息楼A1151实验一TEC-XP+用法与汇编语言程序设计同组同学李翔240121515实验日期12周周五实验仪器号16一、实验目的1.了解TEC-XP+机的基本结构,掌握各开关、指示灯、按键的功能,建立对TEC-XP+机的感性认识。2.掌握TEC-XP+机与PC机联机通讯的方法。3.了解TEC-XP+机的指令系统及寻址方式;掌握TEC-XP+机的汇编语言程序设计方法。4.掌握TEC-XP+机汇编语言程序的调试方法;掌握常用监控命令的格式、功能及用法。二、实验内容1.了解TEC-XP+机的基本结构,熟悉各开关、指示灯、按键的功能。2.完成TEC-XP+机与PC机的联机通讯。3.调试几个汇编语言源程序,修改错误直至获得正确运行结果。4.记录运行结果,并读懂实验程序。三、实验步骤与结果例1:设计一个程序,在屏幕上输出显示字符‘6’。A2000;地址从16进制的2000(内存RAM区的起始地址)开始2000:MVRDR0,0036;把字符‘6’的ASCII码送入R02002:OUT80;在屏幕上输出显示字符‘6’,80为串行接口地址2003:RET;每个用户程序都必须用RET指令结束2004:(按回车键即结束源程序的输入过程)这就建立了一个从主存2000h地址开始的小程序。在这种方式下,所有的数字都约定使用16进制数,故数字后不用跟字符h。每个用户程序的最后一个语句一定为RET汇编语句。因为监控程序是选用类似子程序调用方式使实验者的程序投入运行的,用户程序只有用RET语句结束,才能保证用户程序运行结束时能正确返回到监控程序的断点,保证监控程序能继续控制教学机的运行过程。2例2:设计一个程序,用次数控制在终端屏幕上输出‘0’到‘9’十个数字符。A2020MVRDR2,00OA;送入输出字符个数MVRDR0,0030;‘0’字符的ASCII码OUT80;输出保存在R0低位字节的字符DECR2;输出字符个数减1JRZ202E;判10个字符输出完否,已完,则转移到程序结束处PUSHR0;未完,保存R0的值到堆栈中(2028)IN81;查询接口状态,判字符串行输出完成否SHRR0;JRNC2028;未完成,则循环等待POPR0;已完成,准备继续输出下一字符,从堆栈恢复R0的值INCR0;得到下一个要输出的字符JR2024;转去输出字符(202E)RET这个程序只使用基本汇编语句。理解中的一个难点,是程序当中判串行口是否完成一个字符的输出过程并循环等待的三个汇编语句。具体解释见教材《计算机组成与设计》中的有关串行接口的内容。该程序的执行码放在2020起始的连续内存区中。若送入源码的过程中有错,系统会进行提示,等待重新输入正确汇编语句。输入过程中,在应键入语句的位置直接输回车则结束输入过程。接下来可用G2020命令运行该程序。思考题:当把IN81,SHRR0,JRNC2028三个语句换成4个MVRRR0,R0语句,该程序执行过程会出现什么现象?试分析并实际执行一次。类似的,若要求在终端屏幕上输出‘A’到‘Z’共26个英文字母,应如何修改例中给出的程序?请验证之。3例3:从键盘上连续键入多个属于‘0’到‘9’的数字符并在屏幕上显示,遇非数字符结束程序。从地址2040开始输入下列程序:A2040MVRDR2,0030;用于判数字符的下界值MVRDR3,0039;用于判数字符的上界值(2044)IN81;判键盘上是否按了一个键SHRR0;即串行口是否有了输入的字符SHRR0JRNC2044;尚没有输入则循环测试IN80;输入字符读到R0低位字节MVRDR1,00FFANDR0,R1;将R0的高位字节清0CMPR0,R2;判输入字符≥字符‘0’否JRNC2053;为否,则转到程序结束处CMPR3,R0;判输入字符≤字符‘9’否JRNC2053;为否,则转到程序结束处OUT80;输出刚输入的数字符JMPA2044;转去程序前边2044处等待输入下一个字符(2053)RET思考题,本程序中为什么不必判别串行口输出完成否?设计读入‘A’~‘Z’和‘0’~‘9’的程序,遇其它字符结束输入过程。4例4:计算1到10的累加和。A2060MVRDR1,0000;置累加和的初值为0MVRDR2,00OA;最大的加数MVRDR3,0000(2066)INCR3;得到下一个参加累加的数ADDR1,R3;累加计算CMPR3,R2;判断是否累加完JRNZ2066;未完,开始下一轮累加RET运行过后,可以用R命令看R1中的累加结果。5例5:设计一个有读写内存和子程序调用指令的程序,功能是读出指定内存中的大写字母字符,将其显示到屏幕上,转换为小写字母后再写回存储器原存储区域。E20F0(送入将被显示的6个字符‘A’~‘F’到内存20F0开始的存储区域中)414243444546140A2080MVRDR3,0006;指定被读数据的个数MVRDR2,20F0;指定被读、写数据内存区首地址(2084)LDRRR0,[R2];读内存中的一个字符到R0寄存器CALA2100;指定子程序地址为2100调用子程序,完成显示、转换并写回的功能DECR3;检查输出的字符个数JRZ208C;完成输出则结束程序的执行过程INCR2;未完成,修改内存地址JR2084;转移到程序的2084处,循环执行规定的处理(208C)RETA2100;输入用到的子程序到内存2100开始的存储区OUT80;输出保存在R0寄存器中的字符MVRDR1,0020;转换保存在R0中的大写字母为小写字母ADDR0,R1STRR[R2],R0;写R0中的字符到内存,地址同LDRR所用的地址(2105)IN81;测试串行接口是否完成输出过程SHRR0JRNC2105;未完成输出过程则循环测试RET;结束子程序执行过程,返回主程序运行过程中,可以直接看到屏幕上显示的内容,运行过后,再用D20F0命令看内存的20F0区域中保存的运行结果:0061006200630064006500666四、实验分析与思考1.注释实验程序,并指出操作数的寻址方式。(相同的寻址方式只需说明一次)实验程序注释已注于[三、实验步骤]上1:设计一个程序,在屏幕上输出显示字符‘6’。A2000;2000:MVRDR0,0036;立即数寻址2002:OUT80;直接寻址2003:RET;2004:2:设计一个程序,用次数控制在终端屏幕上输出‘0’到‘9’十个数字符。A2020MVRDR2,00OA;立即数寻址MVRDR0,0030;立即数寻址OUT80;DECR2;JRZ202E;PUSHR0;(2028)IN81;SHRR0;JRNC2028;POPR0;INCR0;JR2024;(202E)RET3:从键盘上连续键入多个属于‘0’到‘9’的数字符并在屏幕上显示,遇非数字符结束程序。从地址2040开始输入下列程序:A2040MVRDR2,0030;立即数寻址MVRDR3,0039;立即数寻址(2044)IN81;SHRR0;SHRR0JRNC2044;IN80;MVRDR1,00FF立即数寻址ANDR0,R1;立即数寻址CMPR0,R2;JRNC2053;7CMPR3,R0;寄存器寻址JRNC2053;OUT80;JMPA2044;直接地址寻址(2053)RET4:计算1到10的累加和。A2060MVRDR1,0000;立即数寻址MVRDR2,00OA;立即数寻址MVRDR3,0000立即数寻址(2066)INCR3;ADDR1,R3;寄存器寻址CMPR3,R2;、JRNZ2066;RET5:设计一个有读写内存和子程序调用指令的程序,功能是读出指定内存中的大写字母字符,将其显示到屏幕上,转换为小写字母后再写回存储器原存储区域。E20F0(送入将被显示的6个字符‘A’~‘F’到内存20F0开始的存储区域中)414243444546A2080MVRDR3,0006;立即数寻址MVRDR9,20F0;立即数寻址(2084)LDRRR0,[R2];寄存器间接寻址MVRDR8,2100;立即数寻址CALR2100;直接寻址DECR3;JRZ208C;INCR2;JR2084;(208C)RETA2100;OUT80;MVRDR1,0020;立即数寻址ADDR0,R1;寄存器寻址STRR[R2],R0;寄存器间接寻址(2105)IN81;SHRR0JRNC82.如何在PC机显示器上显示字符,如何获得PC机键盘键入的字符?说明端口80H和81H的作用。把计算机接入教学机系统(TEC-2000),而教学机拥有监控程序,当教学机被正常设置并加电启动之后,首件事情是从内存0地址开始启动监控程序,也就是使监控程序进入运行状态,此后便可以从键盘打入监控程序的命令并使其执行,达到显示字符的目的。由于PC机与教学机已经相联,监控程序已经正常运行,通过命令,将字符的ASCLL码键入到寄存器中(例如MVRDR0,0036),然后输出显示字符即可(例如OUT80注:80为串行接口地址),然后RET结束,然后打入监控程序的命令(例如G2000)即可显示字符80H和81H是串行接口的I/O(输入/输出)端口地址I/O接口的功能是负责实现CPU通过系统总线把I/O电路和外围设备联系在一起因此,作用即是将教学机TEC-2000与PC机相联系起来的,输出保存在寄存器当中的字符。3.解释监控命令:A、U、D、R、G、T、P、E。单条汇编命令A格式:A[adr]这里的adr表示A命令的地址参数,用[]将adr括起来,表示此处的adr为任选项,可有可无,无此参数时,系统将取默认值。该规则亦适用于下述对各命令的说明。功能:完成单条指令汇编操作,把产生出来的教学机的指令代码放入对应的内存单元中。命令名后的地址将是存放头一条汇编语句的指令码的内存单元地址。每条语句汇编完成之后,系统将相应修改地址值,以便正确处理下一条汇编语句。在应该输入汇编语句时,不给出汇编语句而直接回车,则结束A命令的运行过程。反汇编命令U格式:U[adr]功能:每次从指定的(或默认的)地址反汇编15条指令,并将结果显示在终端屏幕上。反汇编完成之后,已将该命令的默认地址修改好。接下来再键入不带参数的U命令,保证接着从上一次反汇编过的最后一条语句之后继续反汇编。显示存储器内容命令D格式:D[adr]功能:从指定(或默认)地址开始显示内存120个存储字的内容。显示的格式:最左一列4位的16进制数字,是本行中第一个字的内存地址;接下来的8列是4位的16进制的8个连续内存字的内容;最右一列是每个字节所对应的ASCII字符。当其值不为可显示字符的ASCII码值时,用一个“.”字符标记。9连续的D命令,保证所显示内容前后正确的连续关系,即每次执行D命令之后,会将默认的地址值加上120。TEC-XP计原16机通常采用字地址方式按字读写内存。D命令执行过程中,可以用键盘上的ESC终止其显示过程。打了其他键将会暂停显示过程,再一次敲击任一键则继续显示尚未显示完的剩余内容。显示/修改寄存器内容的命令R格式:R[reg],reg为一个寄存器名(R0-R15),是任选参数。功能:当R命令不带寄存器名参数时,显示全部寄存器和状态寄存器的值,并反汇编当前PC所指向的一条指令,其中状态的显示格式为:“F=8位二进制数”,其各位的值分别对应于C、Z、V、S,P1、P0(中断优先级)的值,最后2位是00。当R命令带有寄存器名参数时,是要实现修改一个寄存器内容的操作,首先显示出该寄存器的现有值,若要修改这个值则打入新值并回车,不输入新的值就直接回车,该寄存器内容将保持不变。执行用户程序命令G格式;G[adr]功能:从指定的(或默认的)地址运行一个用户程序。为了使程序执行后能正确地返回监控程序,要求每个程序的最后一条指令一定为RET指令,以便通过该指令从堆栈中取得监控程序为运行用户程序而产生并保存的一个断点地址。每次执行后均显示所有通用寄存器和