基础汇编语言程序设计实验序号:实验一实验项目名称:基础汇编语言程序设计学号姓名专业、班实验地点指导教师时间实验目的:1.学习和了解TEC-XP教学实验系统监控命令的用法;2.学习和了解TEC-XP教学实验系统的指令系统;3.学习简单的TEC-XP教学实验系统汇编程序设计;实验内容:1.学习联机使用TEC-XP教学实验系统和仿真终端软件PCEC.2.使用监控程序的R命令显示/修改寄存器内容、D命令显示存储器内容、E命令修改存储器内容;3.使用A命令写一小段汇编程序,U命令反汇编刚输入的程序,用G命令连续运行该程序,用T、P命令单步运行并观察程序单步执行情况;实验要求在使用该教学机之前,应先熟悉教学机的各个组成部分,及其使用方法。实验步骤一.实验具体操作步骤:1.准备一台串口工作良好的PC机;2.将TEC-XP放在实验台上,打开实验箱的盖子,确定电源处于断开状态;3.将黑色的电源线一端接220V交流电源,另一端插在TEC-XP实验箱的电源插座里;4.取出通讯线,将通讯线的9芯插头接在TEC-XP实验箱上的串口“COM1”或“COM2”上,另一端接到PC机的串口上;5.将TEC-XP实验系统左下方的五个黑色的控制机器运行状态的开关置于正确的位置,在找个实验中开关应置为00110(连续、内存读指令、组合逻辑、联机、16位),控制开关的功能在开关上、下方有标识;开关拨向上方表示“1”,拨向下方表示“0”,“X”表示任意,其它实验相同;6.打开电源,船形开关和5V电源指示灯亮。7.在PC机上运行PCEC16.EXE文件,根据连接的PC机的串口设置所用PC机的串口为“1”或“2”,其它的设置一般不用改动,直接回车即可。(具体步骤附后)8.按一下“RESET”按键,再按一下“START”按键,主机上显示:TEC-2000CRTMONITORVersion1.0April2001ComputerArchitecturLab.,TsinghuaUniversityProgrammedbyHeJia二、实验注意事项:1.连接电源线和通讯线前TEC-XP实验系统的电源开关一定要处于断开状态,否则可能会对TEC-XP实验系统上的芯片和PC机的串口造成损害;2.五个黑色控制开关的功能示意图如下:单步手动置指令组合逻辑联机8位上面下面连续从内存读指令微程序脱机16位3.几种常用的工作方式(开关拨到上方表示为1,拨到下方为0;)工作方式5个拨动开关连续运行程序、组合逻辑控制器、联机、16位机00110连续运行程序、微程序控制器、联机、16位机00010单步、手动置指令、组合逻辑控制器、联机、16位机11110单步、手动置指令、微程序控制器、联机、16位机1101016位机、脱机运算器实验1XX00三、仿真终端软件的操作步骤:1.在PC机上建一个文件夹TEC-XP;2.取出配套的用户盘,将应用程序PCEC16拷贝到用户机器硬盘上该文件夹里;3.双击PCEC16图标,出现如图所示的界面:5.系统默认选择串口1,用户可根据实际情况选择串口1或是串口2(这里的串口指的是和TEC-XP教学实验系统相连的PC机的串口),按回车后出现如图界面:6.图中是系统设定的一些传输参数,建议用户不要改动,直接回车。按一下“RESET”按钮放开后再按一下“START”按钮,出现界面如图所示:7.此时表明TEC-XP机器联机通讯正常。四.软件操作注意事项:1.用户在选择串口时,选定的是PC机的串口1或串口2,而不是TEC-XP实验系统上的串口。即选定的是用户实验时通讯线接的PC机的端口;2.如果在运行到第五步时没有出现应该出现的界面,用户需要检查是不是打开了两个软件界面,若是,关掉其中一个再试;3.有时若TEC-XP实验系统不通讯,也可以重新启动软件或是重新启动PC再试;4.在打开该应用软件时,其它的同样会用到该串口的应用软件要先关掉。五.联机通讯失败自检:如果上述的硬件和软件的操作都正确,联机却依旧失败,用户可以进行如下测试:1.测试PC机的串口是否能正常工作,或是换一台PC或换同一台PC的另一个串口再试,在换串口时要将TEC-XP实验系统断电,换完后重新启动实验系统和软件;2.检查机器上的元器件插接是否正确(建议用户对照能够正常通讯的实验系统进行详细检查),有没有被学生动过,尤其是扩展内存和扩展I/O接口时,芯片方向是否插对,片选信号有没有连接;3.检查相应的短路子是否连接正确;4.建议教师预留一台运行正常的TEC-XP实验系统备用,机器出问题后可以对照检查。六.实验过程:1.用R命令查看寄存器内容或修改寄存器的内容1)在命令行提示符状态下输入:R↙;显示寄存器的内容注:寄存器的内容在运行程序或执行命令后会发生变化。2)在命令行提示符状态下输入:RR0↙;修改寄存器R0的内容,被修改的寄存器与所赋值之间可以无空格,也可有一个或数个空格主机显示:寄存器原值:_在该提示符下输入新的值0036再用R命令显示寄存器内容,则R0的内容变为0036。2.用D命令显示存储器内容在命令行提示符状态下输入:D2000↙会显示从2000H地址开始的连续128个字的内容;连续使用不带参数的D命令,起始地址会自动加128(即80H)。3.用E命令修改存储器内容在命令行提示符状态下输入:E2000↙屏幕显示:2000地址单元的原有内容:光标闪烁等待输入输入0000依次改变地址单元2001~2005的内容为:11112222333344445555注意:用E命令连续修改内存单元的值时,每修改完一个,按一下空格键,系统会自动给出下一个内存单元的值,等待修改;按回车键则退出E命令。4.用D命令显示这几个单元的内容D2000↙可以看到这六个地址单元的内容变为000011112222333344445555。5.用A命令键入一段汇编源程序,主要是向累加器送入数据和进行运算,执行程序并观察运行结果。1)在命令行提示符状态下输入:A2000↙;表示该程序从2000H(内存RAM区的起始地址)地址开始屏幕将显示:2000:输入如下形式的程序:2000:MVRDR0,AAAA;MVRD与R0之间有且只有一个空格,其他指令相同2002:MVRDR1,55552004:ADDR0,R12005:ANDR0,R12006:RET;程序的最后一个语句,必须为RET指令2007:(直接敲回车键,结束A命令输入程序的操作过程)若输入有误,系统会给出提示并显示出错地址,用户只需在该地址重新输入正确的指令即可。2)用U命令反汇编刚输入的程序在命令行提示符状态下输入:U2000↙在相应的地址会得到输入的指令及其操作码注:连续使用不带参数的U命令时,将从上一次反汇编的最后一条语句之后接着继续反汇编。3)用G命令运行前面键入的源程序G2000↙程序运行结束后,可以看到程序的运行结果,屏幕显示各寄存器的值,其中R0和R1的值均为5555H,说明程序运行正确。4)用P或T命令,单步执行这段程序,观察指令执行结果在命令行提示符状态下输入:T2000↙寄存器R0被赋值为AAAAHT↙寄存器R1被赋值为5555HT↙做加法运算,和放在R0,R0的值变为FFFFHT↙做与运算,结果放在R0,R0的值变为5555H用P命令执行过程同上。注:T总是执行单条指令,但执行P命令时,则把每一个CALL语句连同被调用的子程序一次执行完成。T、P命令每次执行后均显示所有通用寄存器及状态寄存器的内容,并反汇编出下一条将要执行的指令。6.举例编写汇编程序,用“A”命令输入,运行并观察结果1)例1:设计一个小程序,从键盘上接收一个字符并在屏幕上输出显示该字符。1在命令行提示符状态下输入:A2000↙;屏幕将显示:2000:输入如下形式的程序:2000:IN81;判键盘上是否按了一个键2001:SHRR0;即串行口是否有了输入的字符2002:SHRR02003:JRNC2000;未输入完则循环测试2004:IN80;接收该字符2005:OUT80↙;在屏幕上输出显示字符‘6’2006:RET↙;每个用户程序都必须用RET指令结束2007:↙;(按回车键即结束输入过程)注:在十六位机中,基本I/O接口的地址是确定的,数据口的地址为80,状态口的地址为81。2用“G”命令运行程序在命令行提示符状态下输入:G2000↙执行上面输入的程序光标闪烁等待输入,用户从键盘键入字符后,屏幕会显示该字符。该例建立了一个从主存2000H地址开始的小程序。在这种方式下,所有的数字都约定使用16进制数,故数字后不用跟字符H。每个用户程序的最后一个语句一定为RET汇编语句。因为监控程序是选用类似子程序调用方式使实验者的程序投入运行的,用户程序只有用RET语句结束,才能保证程序运行结束时能正确返回到监控程序的断点,保证监控程序能继续控制教学机的运行过程。2)例2:设计一个小程序,用次数控制在终端屏幕上输出'0'到'9'十个数字符。1在命令行提示符状态下输入:A2020↙屏幕将显示:2020:从地址2020H开始输入下列程序:2020:MVRDR2,00OA;送入输出字符个数2022:MVRDR0,0030;“0”字符的ASCII码送寄存器R02024:OUT80;输出保存在R0低位字节的字符2025:DECR2;输出字符个数减12026:JRZ202E;判10个字符输出完否,已完,则转到程序结束处2027:PUSHR0;未完,保存R0的值到堆栈中2028:IN81;查询接口状态,判字符串行输出完成否,2029:SHRR0;202A:JRNC2028;未完成,则循环等待202B:POPR0;已完成,准备输出下一字符并从堆栈恢复R0的值202C:INCR0;得到下一个要输出的字符202D:JR2024;转去输出字符202E:RET202F:↙该程序的执行码放在2020H起始的连续内存区中。若送入源码的过程中有错,系统会进行提示,等待重新输入正确汇编语句。在输入过程中,在应输入语句的位置直接打回车则结束输入过程。2用“G”命令运行程序在命令行提示符状态下输入:G2020↙执行结果为:0123456789思考题:若把IN81,SHRR0,JRNC2028三个语句换成4个MVRRR0,R0语句,该程序执行过程会出现什么现象?试分析并实际执行一次。提示:该程序改变这三条语句后,若用T命令单条执行,会依次显示0~9十个数字。若用G命令运行程序,程序执行速度快,端口输出速度慢,这样就会跳跃输出。在命令行提示符状态下输G2020,屏幕显示09。类似的,若要求在终端屏幕上输出'A'到'Z'共26个英文字母,应如何修改例1中给出的程序?请验证之。参考答案:在命令行提示符状态下输入:A2100↙屏幕将显示:2100:从地址2100H开始输入下列程序:(2100)MVRDR2,001A;循环次数为26MVRDR0,0041;字符“A”的值(2104)OUT80;输出保存在R0低位字节的字符DECR2;输出字符个数减1JRZ210E;判26个字符输出完否,已完,则转移到程序结束处PUSHR0;未完,保存R0的值到堆栈中(2108)IN81;查询接口状态,判字符串行输出完成否SHRR0JRNC2108;未完成,则循环等待POPR0;已完成,准备输出下一字符,从堆栈恢复R0的值INCR0;得到下一个要输出的字符JR2104;转去输出字符(210E)RET用G命令执行该程序,屏幕上显示“A”~“Z”26个英文字母.例3:从键盘上连续打入多个属于‘0’到‘9’的数字符并在屏幕上显示,遇到非数字字符结束输入过程。1在命令行提示符状态下输入:A2040↙屏幕将显示:2040:从地址2040H开始输入下列程序:(2040)MVRDR2,0030;用于判数字符的下界值MVRDR3,0039;用于判数字符的上界值(2044)IN81;判键盘上是否按了一个键,SHRR0;即串行口是否有了输入的字符SHRR0JRNC2044;没有输入则循环测试IN80;输入字符到R0MVRDR1,00FFANDR0,R1;清零R0的