1、福建农林大学东方学院信息工程类实验报告系: 计算机系 专业: 电子信息工程 年级: 10 姓名: 廖少冰 学号: 1050302103 实验课程: 汇编语言 实验室号:_ 实验设备号: 实验时间: 指导教师签字: 成绩: 实验二 顺序程序设计1实验目的和要求1. 学习使用 DEBUG 的命令;2. 使用 DEBUG 命令在数据段中查看程序运行的结果;3. 利用 DEBUG 运行简单的程序段。2实验用的软硬件环境实验的硬件环境是:IBMPC 机及其兼容机实验的软件环境是:操作系统:DOS 2.0 以上;调试程序:DEBUG.COM;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MA
2、SM.EXE(或 ASM .EXE) ;连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无) 。3实验内容及实验数据记录1)输入程序观察寄存器变化使用 DEBUG,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU 中相关寄存器的内容变化。注意用 T 命令执行时,CS: IP 寄存器的内容MOVAX, 4E20ADDAX, 1416MOVBX, 2000ADDAX, BXMOVBX, AXADDAX, BXMOVAX, 001AMOVBX, 0026ADDAL, BLADDAH, BLADDBH, ALMOVAH, 0ADDAL, BLADDAL, 9C2)下
3、列程序单步运行,注意 AL,BX,CX 寄存器的变化,并观察数据段字母的变化。DSEG SEGMENTMSG1 DB abcDSEG ENDSCSEG SEGMENT ASSUME CS: CSEG, DS: DSEGSTART: MOVAX, DSEGMOVDS, AXLEA BX, MSG1MOVCX, 3S: MOVAL, BXANDAL, 11011111B ;将 AL 中的 ASCII 码的第 5 位置0,;变成大写字母。MOV BX, ALINC BXLOOP SMOVAL, 0MOVAH, 4CHINT 21HCSEG ENDSENDSTART3)程序的跟踪执行操作在 DOS 下
4、直接输入文件主名就可以执行文件了,有的程序会显示结果,可能执行后什么结果都没有,是因为程序中没有显示命令。那么如何查看程序的运行结果呢?程序执行过程的跟踪操作步骤如下:(1)在 DOS 下输入:DEBUG 文件名.EXE(2)在 DEBUG 提示符下输入 U 命令(3)可以用 T 命令单步执行指令,执行到 MOV AH, 4CH 时结束,也可以用 G 命令执行整个程序,输入:G=B 地址(如:G=0000)(4)用 D 命令查看程序执行后数据段的变化输入:D K 地址:0 (如:D1260:0)在显示的数据中,对照源程序或 LST 文件查看结果所在的偏移地址的内容。4)输入下面程序,按实验一和
5、上面步骤运行一遍DSEG SEGMENTMSG1 DW 7856H,2038HMSG2 DW ?DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART: MOV AX,DSEGMOV DS,AXMOV AX,MSG1AND AX,MSG1+2MOV MSG2,AXMOV AL,0MOV AH,4CHINT 21HCSEG ENDSENDSTART5)编写调试下面的程序,用 DEBUG 查看数据段中的结果(1) )/()510*(YXWZ,X,Y,W 为字节类型变量,结果存于Z 单元,写出数据段和代码段。(无符号数)(2)X,Y 为字节类型数,求 16/
6、)2*(8)(YZ,写出完整的数据段和代码段,不用乘除指令。(无符号数)4操作方法及实验步骤1)(1) 、dos 进入 debug 环境,输入 a 进行程序段写入内存操作,如图:(2) 、输入 t 单步运行跟踪观察到各寄存器的变化如图:(3) 、在执行第一条指令 MOV AX, 4E20 后寄存器 AX 内容随即变为 4E20,而当执行第二条指令 ADD AX, 1416 后 AX 变为了 6236,运行随后的指令各寄存器的变化完全吻合程序段所实现的功能,并且不难看到 IP 由 0103 不断的增加,而 CS 保留为 13A1 不变。2)(1) 、由文本编辑内容 2 中的程序段存为 II2.t
7、xt 文件,并 masm 编译 link 连接通过,如图:3)之前误解为乘指令操作数需 16 位故而出现此错误。MUL DATA+1之后加 5 结果除于 X+Y 有:ADD AX,DB ;DATA 错输入为 DBMOV CL,XADD CL,YDIV CL(3) 、所以有最初代码如下(错误):DSEG SEGMENTDATA DB 5,10X DB 2Y DB 8Z DW ?W DB 10DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART: MOV AX,DSEGMOV DS,AXMOV AL,WSUB AL,XCBWMUL DATA+1ADD A
8、X,DBMOV CL,XADD CL,YDIV CLCSEG ENDSEND START(5-2)编写程序段如下(1) 、分析题目可知数据段中有 X、Y、Z 和常数 8、2、16,所以有:DATA DB 8,2,16X DB 5Y DB 3Z DW ?(2) 、代码段先实现(X+X)*8 有如下:MOV AL,XADD AL,AL ;实现 X+XMOV CL,3SHL AL,CL ;逻辑左移 3 位实现乘 8实现(X-Y)*2 有:MOV BL,XSUB BL,Y ;实现 X-YMOV CL,1SHL BL,CL ;逻辑左移 1 位实现乘 2实现分子部分(X+X)*8-(X-Y)*2 :SUB AL,BL实现除于 16 并把结果送 Z:MOV CL,4SHR AL,CL ;逻辑右移 4 位实现除于 16MOV Z,AL(3) 、程序段通过编译并并成功链接,如图:5实验数据处理与分析1) 2) INT 21H;的一个好处就是让我更好了解到 t 跟踪运行多条指令的好处并能很好得运用它,使我更深刻理解了调试程序对整个程序设计得重要。总而言之该次实验让我看到了自己很多不足并学到了很多,很好得巩固升华了理论知识。