东南大学-微机原理-微机系统与接口-实验一-二-实验报告-自动化学院

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《微机实验及课程设计》实验报告学号08011-1-东南大学《微机实验及课程设计》实验报告实验一汇编语言与程序调试基础实验二汇编语言程序设计姓名:学号:08011专业:自动化实验室:金智楼实验时间:2013年04月02日报告时间:2013年04月12日评定成绩:审阅教师:《微机实验及课程设计》实验报告学号08011-2-一.实验目的与内容1.实验目的:(1)了解命令行操作基本方式和基本命令,掌握PC环境下命令行方式的特点;(2)掌握汇编语言程序指令编辑、宏汇编、连接、运行基本概念;(3)熟练掌握动态调试程序TD的常用命令和窗口功能,学会用TD调试程,修改环境;(4)学会利用DEBUG或TD检查认识指令功能的正确方法。(5)进一步熟悉汇编语言程序的编辑、宏汇编、链接、运行基本概念;(6)熟练掌握动态调试程序TD/DEBUG的常用命令或窗口功能,学会用TD/DEBUG调试程序,修改数据和寄存器等环境;(7)熟悉掌握汇编语言程序的典型数据结构设计、典型程序流控制方法,了解DOS/BIOS功能调用的基本方法。2.实验内容:(1)内容一:1)掌握进入全屏命令行方式、修改环境的两种方法;2)确定源程序的存放目录,构建个人实验环境;3)建立、编辑汇编源程序,选择程序样本,构建典型的汇编程序框架;4)用汇编工具(MASM/TASM.EXE)汇编源程序产生OBJ目标文件;5)用链接程序(LINK/TLINK.EXE)产生EXE可执行文件;6)用调试工具软件(Debug.com/TD.EXE)调试执行程序;①观察CPU寄存器、存储器环境;②单步、断点运行,观察中间结果;③完成正常执行;④修改中间运行环境(寄存器,存储器);⑤直接编写程序片断,验证指令功能;(2)内容二:1)C盘目录下点击执行TD.EXE,理解典型寻址方式与指令;①进入debug,并执行以下内容,理解指令的含义及其执行后的结果:MOVAX,1234HMOVBX,789AHADDAX,BXMOVCX,[BX+2]JMPBXJMPNEARPTR[BX+2]JMPFARPTR[BX]②执行下列指令,观察堆栈段数据和SP的变化,跟踪进入.RET.RETF返回PUSH[BX]POPAXCALLCXCALLNEARPTR[BX+2]CALLFARPTR[BX]《微机实验及课程设计》实验报告学号08011-3-2)①指令的理解与调试PUSH[BX]JMPDWORDPTR[BX+2]CALLDWARDPTR[BX]②中断指令,设置中断向量并编译简单中断服务程序INT80HIRET③DOS系统的功能调用(AH=01,AH=02,AH=09),实现键盘输入、读取、屏幕输出INT21H(3)内容三:1)编写程序实现如下功能:①从键盘输入任意字符串后,存入自定义存储单元,判断处理后将字符串中小写字母转换为大写字母(其他字符不变)并按原顺序将这些字符在屏幕上显示出来。②从键盘输入在0~65535之间的十进制数,将其转换为16进制数并在屏幕中显示出来,要求判断输入字符串是否为在0~65535之间的十进制数。2)复习TD各种操作,并用DEBUG调试程序,学会基本命令操作,并通过单步、设置断点等方法观察中间结果,完成正常运行。命令行方式下直接键入debugmyfile.exe回车(myfile为待调试可执行程序),进入调试方式(显示-),键入H回车显示全部命令、格式和功能。常用命令有:U(反汇编)、A(汇编输入指令程序)、R(寄存器显示/修改)、I(端口输入)、O(端口输出)、D(显示数据)、E(修改数据)。除资源修改管理功能外,重点应用T(单步)、Tn(执行n步)、P(过程/指令)、G××××(从当前CS:IP执行到断点××××)或G=××××1××××2(从××××1执行到××××2断点)调试实验程序。二.基本实验原理(1)编程者使用文本编辑程序通过键盘键入源程序,检查无误,可将源程序存到硬盘或软盘上。源程序扩展名为“源程序名.ASM”1)常用MS-DOS命令:DIRF:[目录名](显示指定盘[目录]存储文件列表)CDF:\mydir(指定A盘上mydir为当前工作目录)2)基础操作命令:①R----显示CPU内部寄存器的内容和全部标志位状态。-R[16位寄存器名](AX,BX,CX,DX,SI,DI,IP,SP,CS,DS,ES,SS)----显示和修改一个指定寄定器的内容和标志位的状态。②D----显示内存命令-D[地址范围]----显示指定内存范围的内容。-D----从上一个D命令所显示的最后一个单元的下一个单元开始(首次CS:IP)③E[地址][内容表]----用命令所给定的内容表去代替指定地址范围的内存单元内容。其中:内容表为一个十六进制数,也可以是用单引号括起的一串字符。-E[地址]----逐个单元连续修改单元内容。(空格跳到下一单元,回车修改结束)《微机实验及课程设计》实验报告学号08011-4-④U[地址[范围]]----将指定范围内的代码以汇编语言形式显示,同时显示该代码位于内存的地址和机器。⑤A[段寄存器名]:[偏移地址]----将汇编语言程序指令逐行直接输入内存单元。(默认段寄存器CS,偏移地址为上次汇编尾地址(初值CS:IP)⑥T[=地址]----单步执行当前指定地址处的指令(默认为CS:IP处),显示CPU所有寄存器内容和全部标志位的状态,以及下一条指令的地址和内容(同执行R命令)⑦P----越过(挂停)命令(2)1)小写字母的ASCII码比其所对应的大写字母的ASCII码值大20H,如字符“a”的ASCII码为61H,而字符“A”的ASCII码为41H,因此字符变换时将小写字母的ASCII码减去20H即为大写字母的ASCII码。同样将数字转换为ASCII码的方法为:将其值加上30H。2)键盘输入字符串:采用DOS系统功能调用(INT21H),功能号为AH=0AH,DS:DX为存放键入字符串的缓冲区首地址,其中第一个字节需要初始化,为用户定义的缓冲区长度。当完成字符串输入并存储后,第二个字节为键入的字符串的个数,从第三个字节开始存放键入的字符串,并在最后有一个字节为0DH作为字符串的结束。3)显示字符:采用DOS系统功能调用(INT21H),功能号为AH=02H,DL中存放要显示字符的ASCII码;显示字符串:采用DOS系统功能调用(INT21H),功能号为AH=09H,DS:DX存放要显示字符串的首地址,串尾字符为“$”但不显示出来。4)将10进制数转换为16进制数可采用按位取值再相加的方法,即(个位*1)+(十位*10)+(百位*100)+…,可用数值位数来判断位值。5)输入的十进制数,要求介于0~65535,因此缓冲区长度可定为6字节(第二字节要存放实际键入的字符数),数据段定义时可采用如下方式:inputdb6,7dup(0)。6)判断输入的是否为介于0~65535之间的十进制数可分为两步:①按位比较,如果某个字符不是0~9则不符合条件;②将数值计算累加后若溢出,表示输入数值大于FFFFH,则也不符合要求。三.方案实现与测试(1)内容一:1)编写代码完成功能要求,文件格式为.asm文件(如文件名为add.asm),将文件放入带汇编工具的文件夹中,即含有汇编工具(MASM/TASM.EXE)和链接工具(LINK/TLINK.EXE)的文件夹。2)全屏启动命令行模式,进入上述文件夹输入:tasmadd.asm或(MASMADD;)回车后编译产生add.obj文件《微机实验及课程设计》实验报告学号08011-5-再输入:tlinkadd.obj或(LINKADD;)回车后链接产生add.exe文件如果程序有错误,编译时会产生错误提示,指出错误的位置和错误类型及错误码,改正错误后再重新编译链接,直到没有错误和编译链接成功。3)启动TD并载入add.exe,可以查看各寄存器和存储器的数值,如图3.1-4。选择数据区的菜单中的Goto,在其输入框内输入要查看的数据区地址,如ds:0000,如图3.1-5,回车确认后即可查看数据区从段地址为DS、偏移地址为0000h开始的存储情况,如图3.1-6。《微机实验及课程设计》实验报告学号08011-6-图3.1-4图3.1-5输入数据区地址《微机实验及课程设计》实验报告学号08011-7-图3.1-6查看数据区存储数据情况4)先设置断点再直接运行:载入程序后,将光标放置在要设置断点的指令上,使用TD功能键F2即可设置断点,再按F9直接运行程序,当执行到该指令时将停止执行,这时可观察各个寄存器及存储器的值,可以验证程序运行是否正常。运行结果如下图所示。红色的一行为设置断点处,程序会运行到此处停止,此时AX变为53F6,DS变为53F6,AX变为53F7,SS变为53F7。5)单步运行:使用TD功能键F7,每按一次程序向下运行一句,同时观察数据区、寄存器区、标志区的相应变化,验证程序是否运行正常。此时执行完AL,[SI],则DS:0000中存储的数据12《微机实验及课程设计》实验报告学号08011-8-传给了AL。6)直接添加指令:选择代码区局部菜单中的assemble选项,在其编辑框中直接输入指令确认后即可完成添加,单步运行可查看该指令的功能和执行结果。《微机实验及课程设计》实验报告学号08011-9-运行完结果如上所示,AX变成了0000.(2)内容二:1)①执行以下命令,BX变为789A,AX先变为1234再加上789A等于8ACE。此时[bx+2]出存储的值我们将其修改为2301。则执行movcx,[bx+2]以后,cx变成了2301。执行完jmpbx,ip由原来的010B变成了789A。《微机实验及课程设计》实验报告学号08011-10-执行完jmpnearptr[bx+2],ip变为[bx+2]存储的数值2301。执行完jmpfarptr[bx],ip变为[bx]存储的数值0000,CS变成2301,就是[bx+2]。《微机实验及课程设计》实验报告学号08011-11-②执行以下语句的结果如下所示:PUSH[BX];[BX]是20CD存入堆栈,SP减2POPAX;20CD出栈至AX,SP加2CALLCX;ip变为CX,即0108,SP减2,将下一行指令的IP存入堆栈CALLNEARPTR[BX+2];ip变为[BX+2],即010D,SP2,将下一行指令的IP存入堆栈,为010BCALLFARPTR[BX];ip变为[BX],也就是20CD,SP减2,将下一行指令的IP存入堆栈,CS变为[BX+2]即010D《微机实验及课程设计》实验报告学号08011-12-2)①执行push[bx]前后对比如下:sp比原来减小了2,ip增加了2,[bx]即ds:0000处存储的值20CD存入了堆栈。执行JMPDWORDPTR[BX+2],ip变为[bx+2]中存储的数字9FFF,cs变为[bx+2]后两个字节的内容。执行完CALLDWORDPTR[BX],把当前程序执行的ip存入堆栈,ip跳转到[bx]存储的值20CD,cs变为[bx+2]存储的值9FFF②中断指令,设置中断向量并编译简单中断服务程序,此处中断int80H执行MOVAX,1234的指令。结果如下所示:③DOS系统的功能调用(AH=01,AH=02,AH=09),实现键盘输入5,读取到AL,再把5存到DL在屏幕输出。《微机实验及课程设计》实验报告学号08011-13-(3)内容三:1)实现将字符串中小写字母转换为大写字母①编译链接:《微机实验及课程设计》实验报告学号08011-14-②运行在一开始,在用debug一步一步调试的过程中,在输入字符串hjhj后,查看每个字符的ASCII码的变化。《微机实验及课程设计》实验报告学号08011-15-输入DDS:0后,看到该地址存储的是6404686A686A0D,这与原理中所说的相符。DS:DX为存放键入字符串的缓冲区首地址,其中第一个字节需要初始化,为用户定义的缓冲区长度。当完成字符串输入并存储后,第二个字节为键入的字符串的个

1 / 22
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功