当前位置:文档之家› 微实验报告

微实验报告

本科生实验报告实验课程微机原理与接口技术学院名称信息科学与技术学院专业名称电子信息工程学生姓名干娜学生学号************指导教师李志鹏实验地点6B610实验成绩二〇一六年十月二〇一六年十二月实验一、动态调试程序DEBUG一、实验目的1.动态调试程序DEBUG环境的搭建;2. 掌握各种汇编指令的作用;3. 掌握磁盘文件操作命令的使用;4.掌握查找、比较、填充和移动内存命令的使用。

二、实验内容1.搭建汇编调试环境,安装DOS系统;2.进行DEBUG动态调试程序的启动与退出;3.进行汇编、执行、跟踪与反汇编命令的编写与运行;4.进行显示、修改内存和寄存器命令的编写与运行;5.进行查找、比较、填充和移动内存命令的编写与运行。

三、DEBUG的启动与退出DEBUG的启动:首先选择一个磁盘,建立一个名为“TEST”的文件,文件名可以任意,然后挂载DOS系统在任意磁盘上,执行代码界面为:出现“-”表示执行成功,进入DEBUG调试环境,此后可以进行代码的编译与执行。

DEBUG的退出命令:-Q四、汇编、执行、跟踪与反汇编1.A命令:逐行汇编命令,主要用于小段程序的汇编和修改目标程序。

使用逐行汇编命令的格式为:A[地址]实验内容:汇编一小段程序,DOS运行界面为:该段程序完成了对AX,BX,CX,DX寄存器写入规定的数据。

2.G命令:启动运行一个程序或程序的一段,编写格式为:G[=<起始地址>][<断点地址>…]执行A命令的代码后,运用G命令查看各个寄存器状态:结果分析:从运行结果可以看出,BX、CX、DX已经写入了输入值,但AX中的值并不是输入值,可能是AX寄存器的值写入后又被改变。

3.T命令T命令用来逐条跟踪程序的运行,编写格式如下:T[=<地址>][<跟踪条数>]每条指令执行后,都要暂停并显示各寄存器的内容,跟踪执行实际上是单步执行,执行结果如下:从地址100开始,跟踪三条指令,从执行细节可以看出AX、BX、CX、DX都写入了程序给定的值,IP指针的值也是逐条递增。

4.U命令:用来对二进制代码程序进行反汇编,常用于分析和调试目标程序,引用格式如下:U[<地址>]对前面那段程序进行反汇编,运行界面如下:结果分析:上述反汇编程序增加了二进制机器码,右侧两列是反汇编出的原来的程序,可以看出与之前输入的程序一致,同时增加了入栈出栈等信息。

五、显示、修改内存和寄存器命令1.D命令该命令是将调入内存的程序以十六进制形式以及对应的ASCII码字符形式显示出来,格式为:D[<地址>]显示内存地址从100H到200H这一段内容的程序执行为:从结果可以看出从100H到110H这段地址中写入数据,其他地址写入数据都为0。

2.R命令R命令的作用是显示寄存器内容,格式如下:R (显示所有寄存器和标志)R寄存器(显示指定寄存器)RF (显示所有标志)显示寄存器内容时,首先显示13个16位寄存器的内容,随后是标志寄存器的内容,最后一行是下一条要执行指令的地址及指令内容。

显示CX寄存器中的内容,并修改为0F,运行界面如下所示:然后利用T命令跟踪,可以看到显示结果,CX寄存器的内容确实被修改为0F实验二、DEBUG命令及8086指令使用一、实验目的通过实验复习和掌握下列知识:1.8086汇编指令:MOV、ADD、ADC、SUB、SBB、DAA、XCHG;2.DEBUG命令:A、D、E、F、H、R、T、U;3.BCD码、ASCLL码以及用十六进制数表示二进制数的方法;4.寄存器:AX、BX、CX、DX、F、IP。

二、实验内容1.DEBUG命令的使用实验;2.常用8086汇编指令练习。

三、DEBUG命令的使用实验步骤:1.输入“DEBUG”进入DEBUG控制状态,显示提示符“-”;2.用命令F 1001 0F“A”将“A”的ASCLL码填入内存;3.用命令D 1001 0F观察内存中的十六进制码以及屏幕右边的ASCLL字符;4.用命令F 1101 1F 41重复上两项实验,观察结果并比较;5.用命令E 100 303132…将30H-3FH写入地址为100H开始的内存单元,再用命令D观察结果,看输入的十六进制是什么字符的ASCLL码;6.用H命令检查下列各组十六进制数加减结果并和手算结果比较:34H、22H 56H、78H A5H、79H 1284H、5678H 3A758H、347FH 7.用R命令检查个寄存器内容,注意AX、BX、CX、DX、IP及标志ZF、CF和AF的内容;8.用R命令将AX、BX内容改为1050H及22A8H。

执行步骤1,2,3得到的结果为:从运行结果可以看出A字符被写入内存,同时写入的内容是其ASCLL码41。

执行步骤4,得到的结果为:从运行结果可以看出写入ASCLL码和直接写入字符,得到的效果是一样的,屏幕右边的ASCLL码字符都被写入和显示。

执行步骤5,运行结果为:可以看出30H-3FH对应的ASCLL字符“0123456789:;<=?. ”被写入,将其ASCLL码对应的字符显示在了屏幕右侧。

执行步骤6,用H命令实现两个数的加减,“和”显示在前面,“差”显示在后面,运行的结果为:经过手算,可以看出计算结果与运行结果一致,在进行减法运算时,应当用操作数的补码。

执行步骤7,结果为:由运行结果可以看出标志位ZF的值为0,CF的值为0,AF的值为0,AX、BX、CX、DX寄存器的都为0,IP指针指向地址0100H。

四、常用8086汇编指令练习1.传送指令用A指令在内存100H处输入下列内容:用U命令检查输入的程序并记录,如下所示:左侧是机器码,右侧是反汇编出来的代码。

用T命令逐条运行这些指令,每运行一条检查并记录有关寄存器及IP的变化情况,运行结果为:结果分析:以上是运行4条指令,寄存器内的值的情况,可以看出首先将AX写入1234,再向BX写入5678,然后交换AX,BX的值,接着将AX的高4位改写为35,运行结果与程序相符。

再运行后三条指令,检查寄存器变化情况,如下:结果分析:从运行结果可以看出,达到了程序编写的目的,将AX的低4位改写成48,DX写入75AB,接着讲AX与DX中存储的内容交换。

2.加减法指令用A命令在内存100H处输入下列语句:用U命令查看输入的程序及对应的机器码,可以看出,程序成功写入,并且生成对应的机器码。

用T命令逐条运行这些指令,检查并记录相关寄存器及ZF的情况:结果分析:运行4条指令后的结果如上所示,可以看到AX的低4位和高4位分别被写入了22和34,DX,BX寄存器还保存着上次运行的值,然后将AX低4位与高4位相加,结果存入低4位,再将低4位减去78H,得到的结果为DEH,因为结果为负,所以用的是反码。

再运行后面的指令,可以看到IP指针每次自动加2,实验结果与程序指令作用一致。

带进位加减法用A命令在内存200H处输入系列内容:用T命令逐条运行这些指令,运行结果为:结果分析:SUB指令只和两个操作数有关,SBB指令不仅与SUB有关还与标志位CF 的值有关,从倒数第二次状态查看可知CF的值为1,因此DH与34之差还需要减个1。

BCD码加减法,运行界面如下所示:逐条跟踪指令的运行可以看出,AL的值从写入的58变为25,执行BCD 码加法的结果为CD。

实验三、内存操作数及寻址方法一、实验目的1.掌握DEBUG命令:G、N、W、L、Q;2.了解8086系统中数据在内存中的存放方式和内存操作数的几种寻址方式;3.掌握8086指令:INC、DEC、LOOP、INT 3、INT 20H,寄存器SI;4.掌握8086汇编语言伪操作:BYTE PTR,WORD PTR;5.求累加和程序和多字节加减法操作。

二、实验内容1.通过编程掌握内存操作数及各种寻址方式的使用;2.编写求累加和程序;3.编写多字节加法程序。

三、实验步骤和结果1.内存操作数及各种寻址方式使用程序的编写及每步寄存器状态查看运行界面如下:结果分析:通过T命令逐条跟踪寄存器的情况,可以看出随着每一步程序的执行,寄存器按照要求被修改,同时D命令将写入的程序以十六进制的形式以及对应的ASCLL码形式显示出来。

2.求累加和程序输入下列程序:用T命令逐条跟踪的结果为:由运行结果可以看出,当程序运行到跳转指令处,指针跳到对应的地址,再接着往下执行程序,寄存器的值也随程序的执行改变。

该程序完成了AL和BX中存储数据的加和,并且BX不断累加。

3.多字节加法程序实验内容步骤:1)输入指导书上的程序;2)用E命令在1000H开始处输入一个8B被加数,在2000H开始处输入一个8B加数,均为低字节在前面;3)运行此程序,并用D命令检查其结果。

运行结果截图:在运行G命令运行程序时,DOS系统会出现崩溃的情况,因此不能用G 命令运行该段程序,用D命令查看寄存器状态结果为:结果分析:从以上实验结果可以看出1000H和2000H两个地址处分别被写入了12,34,然后两数相加,是带进位的加法,结果存入地址[DI],之后两地址中的数自加,然后再相加,同时加上低字节相加的进位CF,不断循环,直到CX中的数减为0,退出循环,程序实现多字节加法。

实验四、汇编语言程序上机过程一、实验目的1.掌握常用工具软件EDIT、MASM、LINK的使用;2.掌握伪指令:SEGMENT、ENDS、ASSUME、END、OFFSET、DUP的使用;3.利用INT 21H的1号功能实现键盘输入的方法;4.了解.exe文件和.com文件的区别及用INT 21H 4C号功能返回系统的方法。

二、实验内容1.用伪指令编写完整的汇编源程序;2.用LINK命令产生exe文件,完成代码功能。

三、实验步骤与结果1.用文字编辑工具(EDIT或记事本)将源程序输入,其扩展名为.asm;代码如下:DATA SEGMENTMESSAGE DB '1THIS IS A SAMPLE PROGRAM OF KEYBOARD AND DISPLAY'DB 0DH,0AH,'PLEASE STRIKE THE KEY!',0DH,0AH,'$' DATA ENDSSTACK SEGMENT PARA STACK'STACK'DB 50 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET MESSAGEMOV AH,9INT 21HAGAIN: MOV AH,1INT 21HCMP AL,1BHJE EXITCMP AL,61HJC NDCMP AL,74HJA NDAND AL,11011111BND: MOV DL,ALMOV AH,2INT 21HJMP AGAINEXIT: MOV AH,4CHINT 21HCODE ENDSEND START2.用MASM对源程序进行汇编,产生.obj文件和.lst文件,若汇编时提示有错,则用文字编辑工具修改源程序后重新汇编,直至通过;3.同TYPE命令产生.lst文件;4.用LINK命令将.obj文件连接成可执行的.exe文件;5.在DOS状态下运行LINK产生的.exe文件。

相关主题