220 likes | 390 Views
基础汇编语言实验. 许昌学院 计算机科学与技术学院. 实验目的. 1 、学习和了解 TEC-2000 十六位机监控命令的用法 2 、学习和了解 TEC-2000 十六位机的指令系统 3 、学习简单的 TEC-2000 十六位机汇编程序设计.
E N D
基础汇编语言实验 许昌学院 计算机科学与技术学院
实验目的 • 1、学习和了解TEC-2000十六位机监控命令的用法 • 2、学习和了解TEC-2000十六位机的指令系统 • 3、学习简单的TEC-2000十六位机汇编程序设计
TEC-2000A教学计算机的操作与使用方法,主要指通过由监控程序提供的监控命令控制教学计算机的运行功能。教学计算机处于正常运行状态时,它通过串行接口和PC机仿真终端相连接,通过常用的A、D等监控命令可以进行联机操作。这些监控命令,实现类似于PC机DOS系统下的Debug程序的功能,包括A、U、G、T、P、R、D、E共8条命令,其格式为一个英文字母(大小写随意)表示的命令名、一个空格(可有可无)跟命令参数,下面分别介绍。TEC-2000A教学计算机的操作与使用方法,主要指通过由监控程序提供的监控命令控制教学计算机的运行功能。教学计算机处于正常运行状态时,它通过串行接口和PC机仿真终端相连接,通过常用的A、D等监控命令可以进行联机操作。这些监控命令,实现类似于PC机DOS系统下的Debug程序的功能,包括A、U、G、T、P、R、D、E共8条命令,其格式为一个英文字母(大小写随意)表示的命令名、一个空格(可有可无)跟命令参数,下面分别介绍。
实验内容 • 使用监控程序的R命令显示/修改寄存器内容、D命令显示存储器内容、E命令修改存储器内容 • 使用A命令写一小段汇编程序,U命令反汇编刚输入的程序,用G命令连续运行该程序,用T、P命令单步运行并观察程序单步执行情况
(1)单条汇编命令A 格式:A [adr] 这里的 [adr] 表示此处的地址参数adr为任选项,由4位十六进制的数组成(下同),无此参数时,系统将取默认值。 功能:完成单条指令的汇编操作,把产生出来的教学计算机的执行代码放入对应的内存单元中。命令名后的地址将是头一条汇编语句的执行码的内存单元地址。每条语句汇编完成之后,系统将相应修改地址值,以便正确处理下条汇编语句。在应该输入汇编语句位置不给出汇编语句而直接回车,则结束A命令的运行过程。
(2)反汇编命令U 格式:U [adr] 功能:每次从指定的(或默认的)地址反汇编15条指令,并将结果显示在终端屏幕上。反汇编完成之后,已将该命令的默认地址修改好。接下来键入不带参数的U命令时,将接着从上一次反汇编的最后一条语句之后继续反汇编。 (3)执行程序命令G 格式:G [adr] 功能:从指定的(或默认的)地址连续地运行一个用户程序。为了使程序执行后能返回监控程序,要求每个用户程序的最后一条指令一定为RET指令。
(4)、(5)单指令执行程序命令T和P 格式:T [adr] 或 P [adr] 功能:从指定的(或PC中的当前地址)开始,单条指令方式执行用户程序。通常情况下,每按一次T或P将执行一条指令。它们的区别是,T总是执行单条指令,但执行P命令时,则把每一个CALL语句连同被调用的子程序一次执行完成。每次执行后均显示所有通用寄存器及状态寄存器的内容,并反汇编出下一条将要执行的指令。
(6)显示/修改寄存器内容命令R 格式:R [寄存器名] 功能:不带参数时,是显示全部寄存器及状态寄存器的值,并反汇编当前PC所指的一条指令,其中状态的显示格式为:“F=8位二进制数”,其各位的值分别对应于C、Z、V、S,P1、P0、0、0的值。带参数时,如R R0表示要通过输入新值来修改相应寄存器R0的内容。
(7)显示存储器内容命令D 格式:D [adr] 功能:从指定(或默认的)地址开始显示内存128个存储字的内容。连续的D命令,保证显示内容前后正确的连续关系,即每次执行D命令,会将默认的地址值加上128。 (8)修改存储器内容命令E 格式:E [adr] 功能:从指定(或默认的)地址逐字修改每个内存单元的内容,要求用户打入一个新的值,相应内存单元的内容将被修改。接下来若打入空格键,可以开始修改下一个字,如打入的是回车键,则会结束E命令的执行过程。 使用上述8条命令,就可以完成所期望的操作。
实验步骤 • 1、关闭电源,将大板上的COM1口与PC机的串口相连; • 2、接通电源,在PC机上运行PCEC.EXE文件,设置所用PC机的串口“1”或“2”,其它的设置一般不要改动,直接回车 • 3、置控制开关为00101(连续、内存读命令,组合逻辑,16位,联机) • 4、按一下“RESET”按键,再按一下“START”按键
用A命令键入教学计算机的一段汇编源程序,主要是向累加器送入数据和执行运算。用A命令键入教学计算机的一段汇编源程序,主要是向累加器送入数据和执行运算。 A 2000(回车) ;程序的起始地址选为16进制的2000(即内存RAM区 2000: MVRD R0,AAAA ;的起始地址),这里的数据均为16进制表示方式 2002: MVRD R1,5555 2004: ADD R0,R1 2005: AND R0,R1 2006: RET ;程序的最后一个语句,必须为RET指令 2007:(直接敲回车键,结束A命令的输入程序的操作过程)
用G命令运行前面刚输入的程序。 G 2000(回车) 程序运行结束后,可以看到程序的运行结果,屏幕显示各寄存器的值,其中R0和R1的值均为55,说明程序运行正确。 • 当然也可以用P或T命令,逐条地执行这段程序中的指令,每执行一条指令就停下来,以便查看每一条指令的运行结果。 T 2000(回车) (结果从略,自己到实验中去看) T (回车) (结果从略,自己到实验中去看) 继续打入T命令,直到程序结束(不能用P、T命令运行程序的最后那条指令RET)。
可以用R命令显示和修改有关寄存器的值,例如:可以用R命令显示和修改有关寄存器的值,例如: R 不带参数则显示所有通用寄存器的值,状态字的值,下一条待执行指令的内容; 带寄存器名参数时,是修改寄存器内容,例如,R R3 命令,回车后首先显示R3的原有内容,打入新值则完成替换。 • 可以用U命令对刚输入并运行过的程序进行反汇编。 U 2000(回车) (结果从略,自己到实验中去看) • 可以用D命令看从内存2000单元开始的这片存储区域中的内容。 D 2000(回车); (结果从略,自己到实验中去看) 还可以用E命令向内存储器2100单元开始的一片存储区域键入一些数据,之后再用D命令查看:
实验要求 1. 实验之前认真准备,看清实验要求、初步安排好实验内容和操作步骤,设计好实验程序的源代码; 2.实验中认真操作,听从教师安排,按时开始和结束实验过程;实验中仔细分析遇到的问题并设法解决,做好实验过程与实验结果的记录工作;防止损坏设备; 3.实验之后认真写出实验报告,包括实验预习与数据准备情况,实验中遇到的问题和解决的办法及效果,实验操作过程与实验结果的分析整理等总结性的内容; 4.实验中尚未完全理解或解决的问题,实验的收获及心得体会,对实验安排的建议与意见等。
教学计算机中的汇编程序的例子 例1:设计一个程序,在屏幕上显示字符“6”。 A 2000 ;地址从16进制的2000(内存RAM区的起始地址)开始 2000: MVRD R0,0036 ;把字符‘6’的ASCII码送入R0 2002: OUT 80 ;在屏幕上输出显示字符‘6’,80为串行接口地址 2003: RET ;每个用户程序都必须用RET指令结束 2004: (按回车键即结束源程序的输入过程)
教学计算机中的汇编程序的例子 例2:计算1到10的累加和。 A 2060 MVRD R1,0000 ;置累加和的初值为0 MVRD R2,000A ;最大的加数 SUB R3,R3 ;预置参加累加的数为0 (2064) INC R3 ;得到下一个参加累加的数 ADD R1, R3 ;累加计算 CMP R3, R2 ;判断是否累加完 JRNZ 2064 ;未完,开始下一轮累加 RET 运行过后,可以用R命令看R1中的累加结果。
例3:设计一个程序,用次数控制在终端屏幕上输出‘0’到‘9’十个数字符。例3:设计一个程序,用次数控制在终端屏幕上输出‘0’到‘9’十个数字符。 A 2020 2020 MVRD R2,000A ;送入输出字符的个数 2022 MVRD R0,0030 ;‘0’字符的ASCII码 2024 OUT 80 ;输出保存在R0低位字节的字符 DEC R2 ;输出字符个数减1 JRZ 202E ;判全部字符输出完否,已完,则转移到程序结束处 PUSH R0 ;未完,保存R0的值到堆栈中 (2028) IN 81 ;查询接口状态,判字符的串行输出过程结束否 SHR R0 ; JRNC 2028 ;未完成,则循环等待 POP R0 ;已完成,准备继续输出下一字符,从堆栈恢复 ; R0 的值 INC R0 ;得到下一个要输出的字符 JR 2024 ;转去输出字符 (202E) RET
例4:从键盘上连续键入多个属于‘0’到‘9’的数字符并在屏幕上显示,遇非数字符结束程序。从地址2040开始输入下列程序:例4:从键盘上连续键入多个属于‘0’到‘9’的数字符并在屏幕上显示,遇非数字符结束程序。从地址2040开始输入下列程序: A 2040 MVRD R2,0030 ;用于判数字符的下界值 MVRD R3,0039 ;用于判数字符的上界值 (2044) IN 81 ;判键盘上是否按了一个键 SHR R0 ;即串行口是否有了输入的字符 SHR R0 JRNC 2044 ;尚没有输入则循环测试 IN 80 ;把输入字符读到R0低位字节 MVRD R1, 00FF AND R0, R1 ;将R0的高位字节清0 CMP R0, R2 ;判输入的字符<= 字符‘0’否 JRC 2053 ;是,则转到程序结束处 CMP R3, R0 ;判输入的字符 > 字符‘9’否 JRC 2053 ;是,则转到程序结束处 OUT 80 ;输出刚输入的数字符 JMPA 2044 ;转去程序前边2044处等待输入下一个字符 (2053) RET
例5:该程序的功能是首先把字符‘A’~‘F’写到内存的2040~2045几个单元,然后再读出来并显示到屏幕上:例5:该程序的功能是首先把字符‘A’~‘F’写到内存的2040~2045几个单元,然后再读出来并显示到屏幕上: A 2020 2020: MVRD R3,06 ;给出写内存操作的次数 2022: MVRD R2,203F 2024: MVRD R1,40 2026: INC R2 ;给出写内存操作的内存地址 2027: INC R1 ;给出写内存操作的内存地址 2028: STRR [R2],R1 ;写寄存器R1的内容到由R2指定地址的内存单元中 2029: LDRR R0,[R2] ;读出内存单元的数据到R0寄存器 202A: OUT 80 202B: IN 81 202C: SHR R0 202D: JRNC 202B 202E: DEC R3 ;检查6次写内存操作是否完成 202F: JRNZ 2026 ;未完则开始下一次写内存操作 2030: RET ;程序结束
例6:设计一个有读写内存和子程序调用指令的程序,功能是读出指定内存中的大写字母字符,将其显示到屏幕上,转换为小写字母后再写回存储器原存储区域:例6:设计一个有读写内存和子程序调用指令的程序,功能是读出指定内存中的大写字母字符,将其显示到屏幕上,转换为小写字母后再写回存储器原存储区域: E 20F0 41 42 43 44 45 46 A 2080 MVRD R3,0006 ;指定被读数据的个数 MVRD R2,20F0 ;指定被读、写数据内存区首地址 (2084)LDRR R0,[R2] ;读内存中的一个字符到R0 CALA 2100 ;调用子程序,完成显示、转换并写回的功能 DEC R3 ;检查输出的字符个数 JRZ 208C ;完成输出则结束程序 INC R2 ;未完成,修改内存地址 JR 2084 ;转移到程序的2084处,循环执行规定的处理 (208C)RET A 2100 OUT 80 ;输出保存在R0寄存器中的字符 MVRD R1,0020 ;转换保存在R0中的大写字母为小写字母 ADD R0,R1 STRR [R2],R0 ;写R0中的字符到内存, (2105) IN 81 ;测试串口是否完成输出过程 SHR R0 JRNC 2105 ;未完成输出过程则循环测试 RET
从键盘输入一个四位16进制数到寄存器中,把它以二进制代码形式显示到屏幕上,要求有一定的检错能力,如遇到非法字符要结束程序运行。从键盘输入一个四位16进制数到寄存器中,把它以二进制代码形式显示到屏幕上,要求有一定的检错能力,如遇到非法字符要结束程序运行。 • 编写汇编程序,调试好;报告中附上程序清单,给出注释、必要说明和运行方法,