微机实验报告2 显示程序实验

     

班级  软件工程16-1  学号  3162052051116  姓名  张识虔  同组实验者              

实验名称             显示程序实验                             日期 2018 11 12

一、实验目的:

 

二、实验环境:

 

三、实验内容:

2.1 显示程序实验

2.1.1 实验目的

1. 掌握在 PC 机上以十六进制形式显示数据的方法。

 2. 掌握部分 DOS 功能调用使用方法。

 3. 熟悉 Windows 集成操作软件 Tdpit 的操作环境和操作方法。

 

 2.1.2 实验设备 PC 微机一台、TD-PITD 实验系统一套。

 

2.1.3 实验内容及说明

 

一般来说,有很多程序需要显示输出提示运行的状况和结果,有的还需要将 数据区中的内容显示在屏幕上。本实验要求将指定数据区的数据以十六进制数形 式显示在屏幕上,并利用 DOS 功能调用完成一些提示信息的显示。通过本实验, 初步掌握实验系统配套操作软件的使用。 实验中常使用的 DOS 功能调用(INT 21H)说明如下。

 

 (1) 显示单个字符输出    入口:AH=02H    调用参数:AL=输出字符 

  例如:         MOV  AH ,02H         INT  21H

 

(2) 显示字符串    入口:AH=09H    调用参数:DS:DX=串地址,’$’为结束字符  

 例如:         MOV  AH ,09H         INT  21H

 

(3) 键盘输入并回显    入口:AH=01H    返回参数:AL=

例如:         MOV  AH ,01H         INT  21H

 

(4) 返回 DOS 系统    入口:AH=4CH    调用参数:AL=返回码 

              例如:         MOV  AH ,4CH         INT  21H

 

汇编语言源程序包含指令和伪指令。如 ADD  AL,BL MOV  AX,1000 都是指令。在汇编过程中伪指令并不形成任何代码,常用的伪指令有:

 (1) 确定 CPU 的伪指令.586/.586 P。为了使汇编语言准确运行,要求在汇编 语言源程序的开头用伪指令“.586”或者“.586 P”来表示当前的程序是在 Pentium 系统中运行。否则汇编程序采用默认值“.8086”;

 (2) 标号赋值伪指令 EQU

(3) 定义存储单元伪指令 DBDWDDDQ DTDB 定义字节,DW 定义字,DD 定义双字,DQ 定义四字,DT 定义 10 个字节;

 (4) 定义存储单元类型伪指令 BYTEWORDDWORD

 (5) 段定义伪指令 SEGMENTENDSASSUME ORG。伪指令 SEGMENT ENDS 总是成对使用,用这一对伪指令可将汇编语言与程序分成几个段,通 常分为数据段、堆栈段和代码段。ASSUME 是告诉汇编程序哪个段为数据段, 哪个段为堆栈段,哪个段为代码段;

(6) 简约段定义伪指令.DATA/.STACK/.CODE

(7) 过程定义伪指令 PROCENDPNEARFAR。定义过程的伪指令 PROC ENDP 总是成对出现,这两条伪指令中间的内容作为一个子程序;

 (8) 程序结束伪指令 END  

从存储区域读出的数据为十六进制数据,本程序设计的难点在于将十六进制 的数字转换成 ASCII 码显示。数值与 ASCII 的关系:0~9 转换成 ASCII 码时直 接在数值上加上 30H 即可,A~F 转换成 ASCII 码时直接在数值上加上 37H。程 序流程图如图 2-1-1 所示,根据程序流程图编写汇编源程序。

 

 

2-1-1  显示程序参考流程

 

根据上述流程图编写实验程序(例程文件名:A1.ASM

STACK1 SEGMENT STACK            ;堆栈段开始     
DW 256 DUP(?) 
STACK1 ENDS 
DATA SEGMENT               ;数据段开始     
MES DB 'Press any key to exit!',0AH,0DH,0AH,0DH,'$'     
MES1 DB 'Show a as hex:',0AH,0DH,'$'     
SD DB 'a' 
DATA ENDS 
CODE SEGMENT               ;代码段开始     
ASSUME CS:CODE,DS:DATA 
START: MOV AX,DATA          ;设置 DS 寄存器      
MOV DS,AX      
MOV DX,OFFSET MES     ;取字符串首地址,显示退出提示      
MOV AH,09H              ;在 DOS 界面显示字符串      
INT 21H      
MOV DX,OFFSET MES1    ;取字符串首地址,显示字符串 

MOV AH,09H      
INT 21H      
MOV SI,OFFSET SD      
MOV AL,DS:[SI]          ;把’a’送到 AL 中      
AND AL,0F0H            ;取字节的高 4 位      
MOV CL,4      
SHR AL,CL      
CMP AL,0AH             ;判断是否是 A 以上的数      
JB C2      
ADD AL,07H             ;大于等于 A,数值加 7H 
C2: ADD AL,30H               ;数值加 30H,转换成 ASCII 码     
MOV DL,AL     
MOV AH,02H              ;将转换的相应 ASCII 码在 DOS 界面下显示     
INT 21H     
MOV AL,DS:[SI]      
AND AL,0FH              ;取字节的低 4 位     
CMP AL,0AH     
JB C3     
ADD AL,07H 
C3: ADD AL,30H     
MOV DL,AL              ;显示字符     
MOV AH,02H     
INT 21H 
KEY: MOV AH,1              ;判断是否有按键按下?     
INT 16H                 ;(为观察运行结果,使程序有控制的退出)     
JZ KEY     
MOV AX,4C00H          ;结束程序,退出      
INT 21H 
CODE ENDS 
END START

2.1.4 实验步骤

1.使用 MASM5.0 实现

(1) 编辑源代码 源代码的编辑可在.txt 文档中直接编写,程序编写完成后将文件名改成 A1.asm,并保存在 E 盘目录下的 MYCODE 文件夹中,如:E:\MYCODE\A1.asm

 

(2) 编译 A1.asm 文件 DOS 下打开 MASM5.0 所在目录。方法:开始->运行输入 cmd 可进入 DOS

系统,依次输入 E: 回车,进入 E 盘根目录,然后输入 E:\>CD MYCODE 回车,可

打开 E:\MYCODE 目录。打开文件目录后输入命令:E:\MYCODE> D:\MASM5.0\MASM  A1.ASM ,之后连续 3 次回车。程序无错则在 E:\MYCODE中增加文件 A1.OBJ。如图 2-1-2 所示。

 

2-1-2  生成 A1.obj 文件

(3) 链接 A1.obj 文件 生成的 obj 文件并不是一个可执行文件,还需要经过 LINK 链接之后才能生 A1.exe 文件。在界面输入 E:\MYCODE>D:\MASM5.0\LINK A1.OBJ 之后连续 3 次回车,可生成.exe 文件。如图 2-1-3 所示。

 

2-1-3  生成 A1.exe 文件

此后可在 E:\MYCODE 目录下发现一个 A1.exe 文件。此文件是一个可执行 文件。如图 2-1-4 所示。

 

2-1-4  MYCODE 文件夹中显示 A1.exe 文件

本实验的结果就是将 ASCII 码‘a’的十六进制数值在屏幕上显示出来。从 屏幕上看显示结果可知实验完成。但是运行 a1.exe 文件的速度非常之快,我们无 法知道程序运行的过程,下面将介绍使用 DEBUG 调试来查看程序的运行步骤。

 

(4) DEBUG 调试 DEBUG 命令式操作系统的一个外部命令,不是 MASM5.0 的命令。 进入 DEBUG,可以对程序进行一步一步的跟踪执行,可以查看每条指令执 行后,CPU 寄存器的变化,内存单元的变化,可以修改寄存器内容和存储单元 内容,可以连续执行多条指令或全速执行程序等。

常用的调试命令如下: -u 反汇编 -r 显示寄存器内容 -g [=address1][address2][address3]  执行到断点行,如: -g 12 为执行到第 12

-t [=address][value] 跟踪,配合-g 使用 如:-t 12 1 为从第 12 行开始,每执 1 条指令后停下来 -e address [list] 修改地址 address 处的值为 listlist 不写时默认为 0 -d 查看数据 -q 退出返回操作系统 下面我们调试 a1.exe 文件。

输入命令 E:\MYCODE> DEBUG  A1.EXE 回车可进入调试系统,先输入命令

- u 对文件进行反汇编,如图 2-1-5 所示。

 

2-1-5  反汇编

输入命令-g 8 回车可将程序运行到地址为 0008 处的指令 MOV AH,09

止,再用-t 回车命令单步跟踪,观察 AX 寄存器的值。如图 2-1-6 所示。

 

2-1-6  单步调试观察寄存器的值

 

由地址 0013 处的程序 MOV SI002C,可知 ASCII 码’a’的数值存放在偏移地

址为 002C 的位置上,通过命令 d 可查询。输入命令-g 16 回车将程序运行到偏移

地址为 0016 处,输入命令-d 002C 回车,可查看内存中的数据,数值为 61H。图

2-1-7 的程序运行结果 61,说明程序正确。如图 2-1-7 所示。

 

2-1-7  查看内存中的数据

可输入命令-e  002C  55 回车,将偏移地址 002C 处的 61,改成 55,通过命令

-d  002C  回车 d 002C 查看更改后的结果为 55,输入命令-g 回车回车可全速运行

程序到程序结束,可见运行结果为 55,正是之前修改过的值,如图 2-1-8 所示。

 

 

2-1-8  修改偏移地址查看运行结果

通过上述的 DEBUG 命令操作要熟悉对程序的调试。

2.使用 Tdpit 集成操作软件实现

(1) 运行 Tdpit 集成操作软件,进入编辑调试集成环境。

(2) 根据程序设计使用语言不同,在“语言设置”菜单项中设置所使用的语 言。如图 2-1-9 所示。该项一经设置,会再下次启动后仍保持不变。

 

2-1-9  设置语言环境

(3) 开始新建文件进行编程。点击“文件”菜单项中的“新建”,可以新建一 个空白文档。默认名为 Td-pit1。如图 2-1-10 所示。

 

 

2-1-10  新建空白文档 (

4) 编写程序,如图 2-1-11 所示,并保存,此时软件会提示输入新的文件名, 输入文件名后点击保存。

 

2-1-11  程序编辑界面

(5) 点击 ,编译文件,若程序编译无误,然后再点击 ,连接程序。 编译连接成功会在输出信息栏显示输出信息,如图 2-1-12 所示。

 

2-1-12  编译连接输出信息

(6) 编译连接成功后可以点击 ,运行程序,查看运行结果。

(7) 可以点击 ,调试程序,进入调试界面,进行程序的调试。

 

四、心得体会:

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_41398448/article/details/84201093