汇编语言程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编语言程序设计

实验报告

实验名称上机过程及顺序结构与分支结构程序设计实验班级

学号

姓名

日期2017年10月26号

成绩

评阅人

软件学院

一、实验目的与意义

理解并熟练掌握汇编语言程序设计过程中的编辑、汇编、链接和调试等各个步骤,提高对汇编课程内容的理解和汇编语言的掌握,通过上机练习加深对课程内容的理解和掌握。通过汇编语言编制的程序上机调试、运行检验程序设计是否正确。熟悉和掌握编辑、汇编、连接和调试四个实用程序的使用方法,掌握调试程序中的几个常用命令的使用方法。熟悉其基本的指令操作,debug调试操作命令以及分支结构、顺序结构和循环结构的程序设计。

二、实验环境

操作系统:Microsoft Windows8

集成环境:Masm for Windows

上机地点:信息楼B405教室

三、实验的预习内容

预习的主要内容:

1. 使用DEBUG命令的方法;

2. 熟悉掌握从理论上定义数据的类型(即DB,DW,DD,);

3. 分支结构和顺序结构的步骤以及相关的指令;

4. 常用的标志位状态及相应的作用;

实验思路:

在对题目进行分析后,分析出解题方法,并做出与实验思路相对应的程序框图。依照程序框图的内容输入相对应的代码,最终在调试代码后,发现并解决一系列的汇编语言错误。进一步优化算法。实验之前必须了解十进制、十六进制和ASCII码之间的转换。预习查表法相关命令,掌握顺序程序的结构,从键盘输入数据的命令及显示到屏幕上的命令。

实验一:

题目1:将程序编辑、汇编、连接并通过集成环境中的debug调试,观察运行结果;用E命令修改指定地址的数据,再用G命令执行程序查看变化,用A

命令将加法指令修改成减法指令,再将其编译运行,查看寄存器值变化的异同。

题目2:分别用DB、DW和DD数据段9H,0FAH,41H,27H,编译链接之后生成exe文件,再用debug的r命令找到数据段地址,用d命令指定数据段地址,观察汇编后在机器内部对应的存储情况。

实验二:

先设置数据段地址和堆栈段地址;设置堆栈段指针;读取一个字符然后存储在AL中;用BX来存储AL中字符对应的数值;将BX中的值作为偏移地址;并在数据段中查找对应字符串;最终输出结果结束程序。

实验三:

先初始化数据段地址与堆栈段地址;设置堆栈段指针;然后将数据段中的data1放入AL中;读取数据段中的data2并判断data2是否大于0;然后读取数

据段中的data3并判断data3是否大于0;最终通过不同数据情况判断应当输出空字符、字符“-”或字符“+”。

四、实验的步骤与调试方法

实验一:

按照要求编写代码,然后编译、连接、运行。使用E命令修改数据,G命令查看,D命令查看数据变化;使用A命令修改加法为减法,G命令查看,再用D 命令查看数据变化。

实验二:

编写代码运行后从键盘输入0-9其中一个数字,检验结果是否正确,多次运行并检测。

实验三:

编写代码运行后,检验结果正确性,Debug使用E命令修改数据,检验结果正确性。

遇到的问题及调试办法:

分支结构出错,判断之后指向错误导致结果错误。Debug使用P单步执行。

五、实验数据与实验结果

实验一:

程序一:执行的结果如下:

从中可以看出初始的值为13和26,之后继续进行单步执行,知道程序的结束,此时程序执行完毕,执行结果如下:

之后,执行D 0B3E:0002观察结果,得知此时的和为39,结果如下图:

之后,使用E命令,在E后加入数据地址,之后输入要修改的数据,将13改为3,将26改为5,并且使用了D命令观察数据是否更改,经验证数据已经进行了更改,结果如下图:

之后,使用G命令来继续执行程序,结果如下图:

之后使用D命令来显示结果得知结果为8,结果正确:

使用A命令来更改ADD为SUB,首先使用U命令来进行反汇编,找到ADD所在的地址,使用A命令,在A后面加上ADD的地址进行修改,如下图:

之后进行单步执行得到结果如下得到减法的结果为ED:

程序二:

经过debug的D命令显示,得到如下结果

经过和之前实验预先的猜测一致,这样进一步加深了我对汇编语言数据的存储的理解。

实验二:

输入3,5得到的运行结果为

实验三:

原始数据:78H 56H 23H 输出‘+’

E命令修改数据为:-21H -13H -18H 输出‘-’ E命令修改数据为:-10H 00H 23H 输出‘’

六、实验用程序清单(要有注释)

实验一:

DSEG SEGMENT ;数据段开始

DATA1 DB 13H,26H ;原始数据

DATA2 DW 0 ;保存结果单元

DSEG ENDS ;数据段结束

SSEG SEGMENT STACK ;堆栈段开始

SKTOP DB 20 DUP(0)

SSEG ENDS ;堆栈段结束

CSEG SEGMENT ;代码段开始

ASSUME CS:CSEG,DS:DSEG

ASSUME SS:SSEG

START: MOV AX,DSEG ;初始化数据端地址

MOV DS,AX

MOV AX,SSEG ;初始化堆栈段地址

MOV SS,AX

MOV SP,LENGTH SKTOP ;设置堆栈指针

MOV AL,DATA1 ;取第一个数据

ADD AL,DATA1+1 ;与第二个数据相加

MOV BYTE PTR DATA2,AL ;保存结果

MOV AH,4CH

INT 21H ;返回DOS

CSEG ENDS ;代码段结束

END START ;源程序结束

实验二

DSEG SEGMENT

DATA1 DB

30H,30H,30H,31H,30H,34H,30H,39H,31H,36H,32H,35H,33H,36H,34H,39H,3 6H,34H,38H,31H

DSEG ENDS

SSEG SEGMENT STACK

SKTOP DB 00H

SSEG ENDS

CSEG SEGMENT

ASSUME CS:CSEG,DS:DSEG

ASSUME SS:SSEG

START: MOV AX,DSEG

MOV DS,AX

MOV AX,SSEG

MOV SS,AX

MOV AH,01H ;从键盘录入一个数,将其ascall码存于AL

INT 21H

SUB AL,30H ;将acsall码减去30H获得该数大小存于AL

MOV BL,02H ;BL赋值为02H

MUL BL ;AL乘以02H结果存在AX,表示该数平方的

MOV BP,AX ;AX的值赋给BP

MOV DL,DS:[BP] ;将十位数赋给DL

MOV AH,02H ;输出十位数

INT 21H ;

MOV DL,DS:[BP+1] ;将个位数赋给DL

MOV AH,02H ;输出个位数

INT 21H

MOV AH,4CH

INT 21H

CSEG ENDS

END START

相关文档
最新文档