实验一基础汇编语言程序设计
- 格式:doc
- 大小:318.00 KB
- 文档页数:11
实验一基础汇编语言程序设计
一、实验目的
1、学习和了解TEC-XP教学实验系统监控命令的用法;
2、学习和了解TEC-XP教学实验系统的指令系统;
3、学习简单的TEC-XP教学实验系统汇编程序设计;
二、实验内容
1、学习练级使用TEC-XP教学实验系统和仿真终端软件PCEC。
2、使用监控程序R命令显示/修改寄存器内容、D命令显示存储器内容、E命令修改存储器内容;
3、使用A命令写一小段汇编程序,U命令反汇编刚输入的程序,用G命令连续运行改程序,用T、P命令单步运行并观察程序单步执行情况;
三、实验步骤
1、用R命令查看寄存器内容或修改寄存器的内容
2、用D命令显示存储器内容
3、用E命令修改存储器内容
4、用D命令显示着几个单元的内容
5、用A命令键入一段汇编源程序,主要是向累加器送入数据和进行运算,执行程序并观察运行结果。
1)
2)
3)
4)
6、举例编写汇编程序,用“A”命令输入,运行并观察结果
1)、例1:设计一个小程序,从键盘上接受一个字符并在屏幕上输出显示该字符。
2)、例2:设计一个小程序,用次数控制在终端屏幕上输出‘0’到‘9’十个数字符。
实验一单指令功能测试实验一、实验目的1.会使用DEBUG软件;2.利用DEBUG单步执行功能测试指令的执行。
二、实验内容P129,14题三、实验要求:1. 在上机实验之前,首先做完作业;2. 设计如何验证指令执行的正确性操作,并在作业中描述;3. 周五上机验证,并给出上机结果。
若有出入,简要说明原因。
4. 实验报告当堂提交。
实验二完整的汇编语言程序设计实验一、实验目的1.掌握完整的汇编语言源程序的设计方法;2.掌握汇编语言源程序的执行过程。
二、实验内容设计一个程序,将所有的小写字母转换为大学字母,此程序不能改变除字母a~z外的任何其它字符。
三、实验要求(结果)1. 在上机实验之前,首先编写程序;2. 周一上机调试程序,并给出修改、运行正确的源程序;3. 分析错误原因;4. 实验报告当天提交。
实验三子程序设计实验一、实验目的1.掌握汇编语言源程序子程序设计方法;2.会使用CV软件工具。
二、实验内容编写子程序:判断三边能否构成三角形;编写主程序:输入三边,调用子程序判断,若能,则输出“Y”,否则输出“N”。
共判断10次。
三、实验要求同实验二。
实验四 宏汇编程序设计实验一、实验目的1.掌握宏汇编程序编程技术及宏调用的方法;2. 了解浮点CPU 编程方法及特点。
二、实验内容求(1+2+3+4+5+6+7+8+9)⨯LC π21的和。
三、实验要求1. 利用重复宏定义实现1、2、3⋯9数据的定义;2. 编写程序,上机验证结果的正确性。
3. 其它要求同前。
实验五 多模块程序设计实验一、实验目的1.掌握汇编段的属性的含义;2. 掌握利用LINK 将多模块连接起来的方法;3.掌握利用库文件将多模块连接起来的方法。
二、实验内容将字符串反序。
具体要求:1. 子模块:完成反序。
2. 主模块:输入字符串,调用子模块,显示反序后字符串。
3. 用 LINK 或库文件的方法实现多模块连接。
4. 其他要求同前。
实验六 混合程序的开发实验一、实验目的1.了解混合调用中的参数设置;2. 掌握混合调用的方法;二、实验内容求(1+2+3+4+5+6+7+8+9)⨯LC π21的和,并将和显示在屏幕上;具体要求:1. 用汇编语言完成子程序LC π21的编程;2. 通过C++完成实验内容的要求。
汇编语言程序设计实验报告课程名称汇编语言程序设计班级姓名学号指导教师汇编语言程序设计实验一DEBUG 程序使用技巧1.寄存器和内存开始Debug 程序。
输入“Q ” 退出程序。
再次启动Debug。
输入“r ”来显示CPU的当前状态和寄存器中的当前内容。
输入“r AX ”和“1234”,AX 寄存器中的内容变为1234。
输入“r DS ”和“2000”,DS 寄存器中的内容变为2000。
输入“d DS:1000 ”来显示数据段中80H 字节数据,把数据抄在这里:输入“f DS:1000 1100 77 ”再显示一次这80H 字节。
判断这条指令的作用是什么?答:从DS:1000地址七,将1100H字节的内容赋值为77H再输入“d 2000:1000 ”来显示数据段中80H 字节数据。
观察与前面的数据有无不同。
输入“d 1900:0100 ”和“d 1ff0:0100 ”来显示两个存储段中的内容。
比较其中2000:0000 段中的数据。
相同段落中的数据相同么?根据你的观察,得出结论,是否程序员可以用不同的段起始地址和偏移量组合,把不容内容存入相同的内存段中。
答:相同段落中的数据相同, 程序员可以用不同的段起始地址和偏移量组合,把不容内容存入相同的内存段中。
2.输入机器码,使用单步和断点退出Debug,再重新启动Debug。
输入“r ”观察CPU 的状态,下一条指令是什么?答:下一条指令是ADD [BX+SI],AL使用两种方式输入一段程序,第一种方式:直接输入机器码。
输入“u ”来显示程序段中的指令序列。
然后输入“d CS:100 ” 来显示代码段中的数据。
观察显示内容。
“u CS:100 106 ”做反汇编,就是显示出汇编语句。
将这几句汇编语句记录下来:使用输入“r ”观察CPU 的状态,使用“t ”来跟踪程序,直至最后一条指令执行完毕。
注意,跟踪程序前,要让IP 寄存器中的值是100H。
一直监视AX 和IP 寄存器的内容变化,尤其是标志位的变化。
实验1 简单汇编语言程序设计一、实验目的与要求1.熟悉汇编语言运行、调试环境及方法。
2.掌握简单汇编语言程序的设计方法。
3.熟悉调试工具DEBUG,并运用DEBUG 工具调试程序。
二、实验容根据以下要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG 工具调试程序,验证程序的正确性。
1. 假设X、Y、R、W 是存放8 位带符号数字节单元的地址,Z 是16 位字单元的地址。
试编写汇编程序,完成Z((W X) 5Y)(R2) 。
2.试编写一个程序,测试某数是否是奇数。
如该数是奇数,那么把DL 的第0 位置1,否那么将该位置0。
三、实验报告要求1.程序算法流程图。
2.源程序清单。
3.程序运行结果。
4.调试过程中遇到的问题和解决的方法。
实验2 分支及循环程序设计一、实验目的与要求1.熟悉汇编语言运行、调试环境及方法。
2.掌握分支程序和循环程序的设计方法。
3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。
二、实验容根据以下要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。
1.编写汇编程序,统计某存储区假设干个数据中英文字母的个数,并将结果在屏幕上显示。
2.从键盘任意输入一组字符数据,请编写汇编程序将该组数据加密后在屏幕上显示。
参考加密方法是:每个数乘以2。
〔说明:此题的加密方法,同学们可以自己拟定〕三、实验报告要求1.程序算法流程图。
2.源程序清单。
3.程序运行结果。
4.调试过程中遇到的问题和解决的方法。
实验3 子程序程序设计一、实验目的与要求1.熟悉汇编语言运行、调试环境及方法。
2.掌握子程序的设计方法。
3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。
二、实验容根据以下要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。
1.编程以十进制形式和十六进制形式显示AX的容,并把两个显示功能分别封装成子程序dispDEC和dispHEX。
汇编语言程序设计实验1——汇编程序与调试器的使用一、实验目的熟悉DOS操作系统环境下的汇编程序MASM的使用、掌握DEBUG的基本命令及其功能。
二、实验内容1.编写一个小程序,从键盘接收一个大写字母,存放到指定的内存单元BUFF1,并转换其为对应的小写字母,存放到指定的内存单元BUF2中。
上机编辑、汇编、连接并运行该程序。
2. 输入源程序、汇编、连接并执行相应程序,并用DEBUG 实现以下操作:(1)用反汇编命令查看相应程序的可执行语句序列,分析其与源程序的异同,查看相应程序占用内存单元的字节数。
(2)用数据查看命令查看执行前的数据单元的内容。
(3)分别用P命令和T命令逐步执行程序,分析这两种方式的区别,记录“转换为小写字母”指令执行后的状态字。
(4)查看程序执行后数据单元的内容。
(5)查看0000:0000 起始的32个单元的内容。
(6)用汇编命令编写一个简单加法程序“3+5=8”,加数和结果分别存在内存单元NUM1、NUM2、NUM3中。
三、实验要求学生要提前做好相关内容的预习(包括源程序的分段组织、DEBUG的系列命令等),熟悉被调试的程序(学生应当在本实验中自行设计一些汇编语言程序,其目的是熟悉相关编程环境的特性),并对程序的测试/调试过程(包括所用的编程环境命令、DEBUG命令等)作出详细计划。
认真完成实验,正确记录各项数据,记录实验过程中出现的问题及其解决过程。
四、实验报告写出各实验程序的测试/调试的详细过程(包括DEBUG命令的使用等),特别是要写出在DEBUG状态下编写、运行程序的过程。
要系统给出各程序在测试/调试过程中所遇到的问题、解决问题的方法与途径。
要对程序在测试/调试过程中的问题进行分析,对相关的执行结果进行分析。
重庆师范大学涉外商贸学院计算机各专业实验用书汇编语言程序设计实验指导书(第一版)张开成编前言为适应教学内容由简到繁、由易到难、由浅入深的教学特点,我们编写了这本简易实验指导书,用以指导实验教学。
该指导书分两部分,第一部分指出实验的实验目的、实验内容、实验准备、实验要求、共提出十五个实验,需三十个学时完成。
第二部分为十五个实验的全部程序,仅供学生参考。
该实验指导书由数计学院计算机教研室张开成同志编写。
2010年2月第一部分提出各实验的实验内容、实验目的、实验要求和学时分配实验一:汇编语言基本操作实验(2学时)一、实验目的:明确QE、MASM、LINK三个系统软件的作用。
掌握汇编语言程序的编辑、汇编、连接过程。
二、实验内容:1、编写一个程序:用十进制输出一个按键的AS CⅡ值。
2、从键盘上读入两个一位数(必须保证按下数字键),输出它们的积。
三、实验准备:1、预习QE、MASM、LINK 三个软件的使用方法。
2、按实验要求,编写好实验源程序。
四、实验步骤:1、用QE编辑扩展名为.ASM的源文件。
2、汇编、连接生成扩展名为.EXE的可执行文件。
3、运行程序。
五、实验报告要求:1、总结用QE编辑源程序的方法。
2、说明源程序的连接、汇编过程。
3、分析运行结果。
4、按要求写出完整的实验报告(必须列出程序清单)。
实验二:分支程序设计实验(2学时)一、实验目的:1、学会简单分支和多分支程序的设计方法。
2、掌握程序的调试方法。
二、实验内容:1、从键盘读入两个一位数,输出它们的积。
若为非数字键,则显示字符“E”,退出程序。
2、从键盘接收一个按键,如为小写字母,则显示“L”,是大写字母,则显示“U”,如是数字,则显示“N”,都不是则显示“*”。
三、实验准备:1、预习分支程序设计方法。
2、按实验内容要求,编写好实验源程序。
四、实验步骤:1、用QE编辑扩展名为.ASM的源文件。
2、汇编、连接生成可执行文件.EXE。
3、运行程序。
实验一汇编语言程序设计EMU8086基础实验1、实验目的和要求:了解使用EMU8086(8086汇编模拟工具)学习汇编的方法。
2、实验内容:编写汇编程序,计算2010H+2011H,并把和存入RESULT单元。
8086汇编模拟工具,结合了一个先进的原始编辑器、汇编器、反汇编器、具除错功能的软体模拟工具(虚拟 PC),还有一个循序渐进的指导工具。
这对刚开始学汇编语言的人会是一个很有用的工具。
它会在模拟器中一步一步的编译程式码并执行,视觉化的工作环境让它更容易使用。
你可以在程式执行当中检视暂存器、标志以及内存。
模拟器会在虚拟 PC 中执行程式,这可以隔绝你的程式,避免它去存取实际硬体,像硬盘、内存,而在虚拟机器上执行汇编程序,这可以让除错变得更加容易。
3、实验仪器与器材:计算机及EMU8086汇编软件等。
4、实验原理:自己总结5、实验过程与测试数据(含电路图/程序框图):A、打开EMU8086 v4.08软件,新建工程,选EXE模板,清屏,编写8086程序代码。
B、保存程序代码为*.asm文件,编译保存为可执行文件.exe,编译保存没有错误则模拟运行。
如果有错误返回修改。
运行有单步运行、全速运行等。
实验一参考程序DATA SEGMENTX DW 2010HY DW 2011HRESULT DW ?DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV AX,XADD AX,YMOV RESULT,AXRETMAIN ENDPCODE ENDSEND START6、实验分析:自己分析7、实验体会自己总结。
实验一基础汇编语言程序设计实验目的1.学习和了解TEC-XP十六位机监控命令的用法;2.学习和了解TEC-XP十六位机的指令系统;3.学习简单的TEC-XP十六位机汇编程序设计。
实验内容1.使用监控程序的R命令显示/修改寄存器内容、D命令显示存储器内容、E命令修改存储器内容;2.使用A命令写一小段汇编程序,U命令反汇编刚输入的程序,用G命令连续运行该程序,用T、P命令单步运行并观察程序单步执行情况。
3.学习联机使用TEC-XP教学试验系统和仿真终端软件。
实验要求在使用该教学机之前,应先熟悉教学机的各个组成部分及其使用方法。
实验步骤1.关闭电源,将大板上的COMl口与PC机的串口相连;2.接通电源,在PC机上运行PCEC.EXE文件,设置所用PC机的串口为“l”或“2”,其它的设置一般不用改动,直接回车即可;3.置控制开关为001110(连续、内存读指令、组合逻辑、16位、联机),开关拨向上方表示“1”,拨向下方表示“0”,“X”表示任意。
其它实验相同;4.按一下“RESET”按键,再按一下“START”’按键,主机上显示:5.用R命令查看寄存器内容或修改寄存器的内容1.用R命令查看寄存器或修改寄存器内容1)在命令行提示符状态下输入:R↙;显示寄存器的内容注:寄存器的内容在运行程序或执行命令后会发生变化。
2)在命令行提示符状态下输入:R R0↙;修改寄存器R0的内容,被修改的寄存器与所赋值之间可以无空格,也可有—个或数个空格主机显示:寄存器原值:xxxx在后面输入新的值0036再用R命令显示寄存器内容,则R0的内容变为0036。
2.用D命令显示存储器内容在命令行提示符状态下输入:D 2000↙会显示从2000H地址开始的连续128个字的内容;连续使用不带参数的D命令,起始地址会自动加128(即80H)。
3.用E命令修改存储器内容在命令行提示符状态下输入:E 2000↙屏幕显示:2000 xxxx(地址单元的原有内容):(光标在此闪烁等待输入)输入0000(提示快捷使用方法:用E命令连续修改内存单元的值时,每修改完—个,按一下空格键,系统会自动给出下一个内存单元的值,等待修改;按回车键则退出E命令。
)依次改变地址单元2001~2005的内容为:1111 2222 3333 4444 5555用D命令显示这几个单元的内容D 2000↙可以看到这六个地址单元的内容变为0000 1111 2222 3333 4444 5555。
8.用A命令键入一段汇编源程序,主要是向累加器送入数据和进行运算,执行程序并观察运行结果。
1)在命令行提示符状态下输入:A 2000↙;表示该程序从2000H(内存RAM区的起始地址)地址开始屏幕将显示:2000:输入如下形式的程序:2000:MVRD R0,AAAA;MVRD与R0之间只有一个空格,其他指令相同2002:MVRD R1,55552004:ADD R0,R12005:AND R0,R12006:RET;程序的最后一个语句,必须为RET指令2007:↙;直接敲回车键,结束A命令输入程序的操作过程若输入有误,系统会给出提示并显示出错地址,用户只需在该地址重新输入正确的指令即可。
2)用U命令反汇编刚输入的程序在命令行提示符状态下输入:U 2000↙在相应的地址会得到输入的指令及其操作码。
注:连续使用不带参数的U命令时,将接着从上一次反汇编的最后一条语句之后继续反汇编。
3)用G命令运行前面刚键入的源程序G 2000↙程序运行结束后,观察程序的运行结果,记录寄存器R0和R1的值。
4)用P或T命令,单步执行这段程序,观察指令执行结果在命令行提示符状态下输入:T 2000↙T↙T↙T↙用P命令执行过程同上。
注:T总是执行单条指令,但执行P命令时,则把每一个CALL语句连同被调用的子程序一次执行完成。
T、P命令每次执行后均显示所有通用寄存器及状态寄存器的内容,并反汇编出下一条将要执行的指令。
7.举例编写汇编程序,用“A”命令输入,运行并观察结果1)例1:设计一个小程序,从键盘上接收一个字符并在屏幕上输出显示该字符。
<1>在命令行提示符状态下输入:A 2000↙屏幕将显示:2000:输入如下形式的程序:2000:IN 81;判断键盘上是否按了一个键2001:SHR R0;即串行口是否有了输入的字符2002:SHR R02003:JRNC 2000;未输入完则循环测试2004:IN 80;接收该字符2005:OUT 80;在屏幕上输出该字符2006:RET;每个用户程序都必须用RET指令结束2007:↙;(按回车键即结束输入过程)<2>用“G”命令运行程序在命令行提示符状态下输入:G 2000↙执行上面输入的程序。
光标闪烁等待输入,用户从键盘键入字符后,屏幕会显示该字符。
该例建立了一个从主存2000H地址开始的小程序。
在这种方式下,所有的数字都约定使用16进制数,故数字后不用跟字符H。
每个用户程序的最后一个语句一定为RET汇编语句。
因为监控程序是选用类似子程序调用方式使实验者的程序投入运行的,用户程序只有用RET语句结束,才能保证程序运行结束时能正确返回到监控程序的断点,保证监控程序能继续控制教学机的运行过程。
2)例2:设计一个小程序,用次数控制在终端屏幕上输出‘0’到‘9’十个数字符。
<1>在命令行提示符状态下输入:A 2020↙屏幕将显示:2020:从地址2020H开始输入下列程序:2020:MVRD R2,000A ;送入输出字符个数2022:MVRD R0,0030;“0”字符的ASCII码送寄存器R02024:OUT 80;输出保存在R0低位字节的字符2025:DEC R2;输出字符个数减1,置状态位Z2026:JRZ 202E;判10个字符输出完否,已完,则转到程序结束处;R2=0,即z=1时,跳转到202E2027:PUSH R0;未完,保存R0的值到堆栈中,为了将状态字送入R02028:IN 81;查询接口状态,判字符串行输出完成否,2029:SHR R0;R0右移一位,将移出的一位送入状态位C202A:JRNC 2028;未完成,则循环等待,C=0时跳转202B:POP R0;已完成,准备输出下一字符并从堆栈恢复R0的值202C:INC R0;得到下一个要输出的字符R0+1202D:JR 2024;转去输出字符,无条件转移202E:RET202F:↙该程序的执行码放在2020H起始的连续内存区中。
若送入源码的过程中有错,系统会进行提示,等待重新输入正确的汇编语句。
输入过程中,在应输入语句的位置直接打回车则结束输入过程。
<2>用“G”命令运行程序在命令行提示符状态下输入:G 2020↙记录执行结果:【思考题】当把IN 81,SHR R0,JNC 2028三条语句换成3个MVRR R0,R0语句,该程序执行过程会出现什么现象?试分析并实际执行一次。
类似的,若要求在终端屏幕上输出‘A’到‘Z’共26个英文字母,应如何修改例2中给出的程序?请验证之。
将程序写入实验报告。
例3:从键盘上连续打入多个属于‘0’到‘9’的数字符并在屏幕上显示,遇非数字符结束输入过程。
<1>在命令行提示符状态下输入:A 2040↙屏幕将显示:2040:从地址2040H开始输入下列程序:(2040)MVRD R2,0030;用于判数字符的下界值,‘0’的ASCII码MVRD R3,0039;用于判数字符的上界值,‘9’的ASCII码(2044)IN 81;判键盘上是否按了一个键SHR R0;即串行口是否有了输入的字符SHR R0JRNC 2044;没有输入则循环测试IN 80;输入字符到R0的低字节MVRD R1,00FFAND R0,R1;R0的高位字节内容清零(R0的高字节可能原来的值不为零)CMP R0,R2 ;判输入字符≥字符‘0’否,R0-R2,置状态位CJRNC 2053;若为否,则转到程序结束处,C=0,跳转CMP R3,R0;判输入字符≤字符‘9’否JRNC 2053;若为否,则转到程序结束处OUT 80;输出刚输入的数字符JMPA 2044;转去程序前边2044处等待输入下一个字符,无条件跳到2044(2053)RET<2>在命令行提示符状态下输入:G 2040↙光标闪烁等待键盘输入,若输入0~9十个数字符,则在屏幕上回显;若输入非数字符,则屏幕不再显示该字符,出现命令提示符,等待新命令。
【思考题】从2000H开始,一次存入0-9、a-z、A-Z。
程序如下:A 2100MVRD R10,000AMVRD R15,2000MVRD R0,0030TABLE_10 STRR [R15],R0INC R15INC R0DEC R10JRNZ TABLE_10MVRD R10,001AMVRD R0,0041TABLE_10 STRR [R15],R0INC R15INC R0DEC R10JRNZ TABLE_10MVRD R10,001AMVRD R0,0061 TABLE_10 STRR [R15],R0INC R15INC R0DEC R10JRNZ TABLE_10RET执行结果如下:实验总结:通过本次试验,学习了联机使用TEC-XP试验系统和仿真终端软件PCEC。
学习使用基本汇编语言及简单使用汇编语言编写程序,感受到了汇编语言的美妙。
实验中遇到的问题有:程序执行前需要进行反汇编,但每次总是忘记,故造成实验结果错误。