实验一TECXP+用法与汇编语言程序设计.docx
《实验一TECXP+用法与汇编语言程序设计.docx》由会员分享,可在线阅读,更多相关《实验一TECXP+用法与汇编语言程序设计.docx(15页珍藏版)》请在冰豆网上搜索。
实验一TECXP+用法与汇编语言程序设计
南京工程学院
计算机工程学院
计算机组成与结构实验报告书
实验学生班级K网络工程121
实验学生姓名王云峰
学号*********
实验地点信息楼A115
实验一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码送入R0
2002:
OUT80;在屏幕上输出显示字符‘6’,80为串行接口地址
2003:
RET;每个用户程序都必须用RET指令结束
2004:
(按回车键即结束源程序的输入过程)
这就建立了一个从主存2000h地址开始的小程序。
在这种方式下,所有的数字都约定使用16进制数,故数字后不用跟字符h。
每个用户程序的最后一个语句一定为RET汇编语句。
因为监控程序是选用类似子程序调用方式使实验者的程序投入运行的,用户程序只有用RET语句结束,才能保证用户程序运行结束时能正确返回到监控程序的断点,保证监控程序能继续控制教学机的运行过程。
例2:
设计一个程序,用次数控制在终端屏幕上输出‘0’到‘9’十个数字符。
A2020
MVRDR2,00OA;送入输出字符个数
MVRDR0,0030;‘0’字符的ASCII码
OUT80;输出保存在R0低位字节的字符
DECR2;输出字符个数减1
JRZ202E;判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:
从键盘上连续键入多个属于‘0’到‘9’的数字符并在屏幕上显示,遇非数字符结束程序。
从地址2040开始输入下列程序:
A2040
MVRDR2,0030;用于判数字符的下界值
MVRDR3,0039;用于判数字符的上界值
(2044)IN81;判键盘上是否按了一个键
SHRR0;即串行口是否有了输入的字符
SHRR0
JRNC2044;尚没有输入则循环测试
IN80;输入字符读到R0低位字节
MVRDR1,00FF
ANDR0,R1;将R0的高位字节清0
CMPR0,R2;判输入字符≥字符‘0’否
JRNC2053;为否,则转到程序结束处
CMPR3,R0;判输入字符≤字符‘9’否
JRNC2053;为否,则转到程序结束处
OUT80;输出刚输入的数字符
JMPA2044;转去程序前边2044处等待输入下一个字符
(2053)RET
思考题,本程序中为什么不必判别串行口输出完成否?
设计读入‘A’~‘Z’和‘0’~‘9’的程序,遇其它字符结束输入过程。
例4:
计算1到10的累加和。
A2060
MVRDR1,0000;置累加和的初值为0
MVRDR2,00OA;最大的加数
MVRDR3,0000
(2066)INCR3;得到下一个参加累加的数
ADDR1,R3;累加计算
CMPR3,R2;判断是否累加完
JRNZ2066;未完,开始下一轮累加
RET
运行过后,可以用R命令看R1中的累加结果。
例5:
设计一个有读写内存和子程序调用指令的程序,功能是读出指定内存中的大写字母字符,将其显示到屏幕上,转换为小写字母后再写回存储器原存储区域。
E20F0(送入将被显示的6个字符‘A’~‘F’到内存20F0开始的存储区域中)
414243444546140
A2080
MVRDR3,0006;指定被读数据的个数
MVRDR2,20F0;指定被读、写数据内存区首地址
(2084)LDRRR0,[R2];读内存中的一个字符到R0寄存器
CALA2100;指定子程序地址为2100
调用子程序,完成显示、转换并写回的功能
DECR3;检查输出的字符个数
JRZ208C;完成输出则结束程序的执行过程
INCR2;未完成,修改内存地址
JR2084;转移到程序的2084处,循环执行规定的处理
(208C)RET
A2100;输入用到的子程序到内存2100开始的存储区
OUT80;输出保存在R0寄存器中的字符
MVRDR1,0020;转换保存在R0中的大写字母为小写字母
ADDR0,R1
STRR[R2],R0;写R0中的字符到内存,地址同LDRR所用的地址
(2105)IN81;测试串行接口是否完成输出过程
SHRR0
JRNC2105;未完成输出过程则循环测试
RET;结束子程序执行过程,返回主程序
运行过程中,可以直接看到屏幕上显示的内容,运行过后,再用D20F0命令看内存的20F0区域中保存的运行结果:
006100620063006400650066
四、实验分析与思考
1.注释实验程序,并指出操作数的寻址方式。
(相同的寻址方式只需说明一次)
实验程序注释已注于[三、实验步骤]上
1:
设计一个程序,在屏幕上输出显示字符‘6’。
A2000;
2000:
MVRDR0,0036;立即数寻址
2002:
OUT80;直接寻址
2003:
RET;
2004:
2:
设计一个程序,用次数控制在终端屏幕上输出‘0’到‘9’十个数字符。
A2020
MVRDR2,00OA;立即数寻址
MVRDR0,0030;立即数寻址
OUT80;
DECR2;
JRZ202E;
PUSHR0;
(2028)IN81;
SHRR0;
JRNC2028;
POPR0;
INCR0;
JR2024;
(202E)RET
3:
从键盘上连续键入多个属于‘0’到‘9’的数字符并在屏幕上显示,遇非数字符结束程序。
从地址2040开始输入下列程序:
A2040
MVRDR2,0030;立即数寻址
MVRDR3,0039;立即数寻址
(2044)IN81;
SHRR0;
SHRR0
JRNC2044;
IN80;
MVRDR1,00FF立即数寻址
ANDR0,R1;立即数寻址
CMPR0,R2;
JRNC2053;
CMPR3,R0;寄存器寻址
JRNC2053;
OUT80;
JMPA2044;直接地址寻址
(2053)RET
4:
计算1到10的累加和。
A2060
MVRDR1,0000;立即数寻址
MVRDR2,00OA;立即数寻址
MVRDR3,0000立即数寻址
(2066)INCR3;
ADDR1,R3;寄存器寻址
CMPR3,R2;、
JRNZ2066;
RET
5:
设计一个有读写内存和子程序调用指令的程序,功能是读出指定内存中的大写字母字符,将
其显示到屏幕上,转换为小写字母后再写回存储器原存储区域。
E20F0(送入将被显示的6个字符‘A’~‘F’到内存20F0开始的存储区域中)
414243444546
A2080
MVRDR3,0006;立即数寻址
MVRDR9,20F0;立即数寻址
(2084)LDRRR0,[R2];寄存器间接寻址
MVRDR8,2100;立即数寻址
CALR2100;直接寻址
DECR3;
JRZ208C;
INCR2;
JR2084;
(208C)RET
A2100;
OUT80;
MVRDR1,0020;立即数寻址
ADDR0,R1;寄存器寻址
STRR[R2],R0;寄存器间接寻址
(2105)IN81;
SHRR0
JRNC
2.如何在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码值时,用一个“.”字符标记。
连续的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指令,以便通过该指令从堆栈中取得监控程序为运行用户程序而产生并保存的一个断点地址。
每次执行后均显示所有通用寄存器和状态寄存器的内容,并反汇编出下一条将要执行的指令。
单指令执行程序命令T和P
格式:
P[adr]
T[adr]
功能:
从指定地址(或PC中的当前地址)开始单条指令方式执行用户程序。
通常情况下,每执行一次T或P命令将只执行一条指令。
T和P命令的区别是,T总是执行单条指令,但执行P命令时,则把每一个CALL语句连同被调用的子程序一次执行完成,其目的是在调试一些较大规模的程序时,如果子程序已经正确,重点调试的是主调用程序,则在遇到每个子程序调用语句时,CALL语句连同被调用的子程序一次运行完成,避免反反复复地以单指令方式运行已经证明是正确的子程序的每一个语句。
由于P和T命令是通过在程序中设置断点来实现的,而在ROM区不支持写入断点内容,故不能用它们来执行固化在ROM区中的监控程序,或其他的用户程序。
每次执行后均显示所有通用寄存器和状态寄存器的内容,并反汇编出下一条将要执行的指令。
修改存储器内容命令E
格式:
E[adr]
功能:
从指定(或默认)地址逐字显示每个内存字的内容,并等待用户打入一个新的数值存回原内存单元。
若用户未打入新值就打了空格键,则该内存单元内容保持不变。
若在打入新值后跟空格键,则新值将被写入原内存单元。
空格键用于连续修改一片内存区的内容,故接下来显示下一个内存单元的内容并等待修改。
打回车键,则会结束E命令的执行过程,若回车前打入一个新值,相应内存单元的内容也将被修改。
五、教师评阅
实验态度
实验完成情况
掌握原理情况
实验报告完成情况
优
良
中
差
优
良
中
差
优
良
中
差
优
良
中
差
实验成绩评定:
教师签字:
年月日