汇编语言程序设计.docx

上传人:b****5 文档编号:28101868 上传时间:2023-07-08 格式:DOCX 页数:13 大小:125.86KB
下载 相关 举报
汇编语言程序设计.docx_第1页
第1页 / 共13页
汇编语言程序设计.docx_第2页
第2页 / 共13页
汇编语言程序设计.docx_第3页
第3页 / 共13页
汇编语言程序设计.docx_第4页
第4页 / 共13页
汇编语言程序设计.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

汇编语言程序设计.docx

《汇编语言程序设计.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计.docx(13页珍藏版)》请在冰豆网上搜索。

汇编语言程序设计.docx

汇编语言程序设计

汇编语言程序设计

实验报告

实验名称

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

班级

学号

姓名

日期

2017年10月26号

成绩

评阅人

软件学院

一、实验目的与意义

理解并熟练掌握汇编语言程序设计过程中的编辑、汇编、链接和调试等各个步骤,提高对汇编课程内容的理解和汇编语言的掌握,通过上机练习加深对课程内容的理解和掌握。

通过汇编语言编制的程序上机调试、运行检验程序设计是否正确。

熟悉和掌握编辑、汇编、连接和调试四个实用程序的使用方法,掌握调试程序中的几个常用命令的使用方法。

熟悉其基本的指令操作,debug调试操作命令以及分支结构、顺序结构和循环结构的程序设计。

二、实验环境

操作系统:

MicrosoftWindows8

集成环境:

MasmforWindows

上机地点:

信息楼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,之后继续进行单步执行,知道程序的结束,此时程序执行完毕,执行结果如下:

之后,执行D0B3E:

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得到的运行结果为

 

实验三:

原始数据:

78H56H23H输出‘+’

E命令修改数据为:

-21H-13H-18H输出‘-’

E命令修改数据为:

-10H00H23H输出‘’

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

实验一:

DSEGSEGMENT;数据段开始

DATA1DB13H,26H;原始数据

DATA2DW0;保存结果单元

DSEGENDS;数据段结束

SSEGSEGMENTSTACK;堆栈段开始

SKTOPDB20DUP(0)

SSEGENDS;堆栈段结束

CSEGSEGMENT;代码段开始

ASSUMECS:

CSEG,DS:

DSEG

ASSUMESS:

SSEG

START:

MOVAX,DSEG;初始化数据端地址

MOVDS,AX

MOVAX,SSEG;初始化堆栈段地址

MOVSS,AX

MOVSP,LENGTHSKTOP;设置堆栈指针

MOVAL,DATA1;取第一个数据

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

MOVBYTEPTRDATA2,AL;保存结果

MOVAH,4CH

INT21H;返回DOS

CSEGENDS;代码段结束

ENDSTART;源程序结束

实验二

DSEGSEGMENT

DATA1DB30H,30H,30H,31H,30H,34H,30H,39H,31H,36H,32H,35H,33H,36H,34H,39H,36H,34H,38H,31H

DSEGENDS

SSEGSEGMENTSTACK

SKTOPDB00H

SSEGENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DSEG

ASSUMESS:

SSEG

START:

MOVAX,DSEG

MOVDS,AX

MOVAX,SSEG

MOVSS,AX

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

INT21H

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

MOVBL,02H;BL赋值为02H

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

MOVBP,AX;AX的值赋给BP

MOVDL,DS:

[BP];将十位数赋给DL

MOVAH,02H;输出十位数

INT21H;

MOVDL,DS:

[BP+1];将个位数赋给DL

MOVAH,02H;输出个位数

INT21H

MOVAH,4CH

INT21H

CSEGENDS

ENDSTART

 

实验三

DSEGSEGMENT

DATA1DB01H,-02H,03H

DSEGENDS

SSEGSEGMENTSTACK

SKTOPDB00H

SSEGENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DSEG

ASSUMESS:

SSEG

START:

MOVAX,DSEG

MOVDS,AX

MOVAX,SSEG

MOVSS,AX

XORBP,BP

MOVAH,DS:

[BP]

MOVAL,DS:

[BP+01H]

MOVBH,DS:

[BP+02H];三个数分别置于AHALBH中

CMPAH,AL;比较AHAL大小

JLMOVE1;若AH小于AL,跳跃到MOVE1

MOVBL,AH

MOVAH,AL

MOVAL,BL;AH与AL交换

MOVE1:

CMPAL,BH;比较AL与BH大小

JLMOVE2;若AL<=BH,跳跃到MOVE2

MOVBL,AL

MOVAL,BH

MOVBH,BL;AL与BH交换

MOVE2:

MOVBL,00H;BH赋值为0

CMPAH,BL;比较AH与0的大小

JLMOVE3;若AH<=0,跳跃到MOVE3

MOVDL,'+';若AH>0,则输出‘+’

MOVAH,02H

INT21H;

JMPMOVE5

MOVE3:

CMPBH,BL

JLMOVE4

MOVDL,''

MOVAH,02H

INT21H

JMPMOVE5

MOVE4:

MOVDL,'-'

MOVAH,02H

INT21H

MOVE5:

MOVAH,4CH

INT21H

CSEGENDS

ENDSTART

七、思考题(必需回答)写明如下问题

1.按照操作顺序写出上机操作的步骤;

(1)在编辑器中输入汇编语言程序,点击编译,查看有无语法类型的错误

(2)用link.exe链接

(3)链接完毕,用cmd/c运行程序,查看运行结果

(4)输入不同的数据多次运行并记录

(5)用debug命令在debug下运行

2.上机操作的步骤与顺序可以调整吗?

为什么?

不可以调整;因为如果调整了的话将无法正常进行上机操作

3.写出用DEBUG中的E命令修改内存单元内容的两种方法;

(1)EAddress;

(2)EAddress[list];

4.写出用DEBUG中的A命令修改指令的方法及应注意的问题;

命令的格式为:

AAddress

当执行A命令时,DEBUG等待用户输入指令序列。

输入每条指令后回车,再直接按回车键结束A命令。

DEBUG将输入指令序机的机器码存入指定地址开始的内存单元中。

需要注意的是A命令修改指令过程中默认输入的数值都为16进制,如果需要输入十进制数需要在数值后面加D或d

5.总结DEBUG中E、D、U命令的功能;

E命令用来设置指定内存单元的值

D命令用来显示内存单元的值

U命令用来将二进制代码反汇编为汇编语言的符号指令

6.总结DEBUG中P、G、T命令的功能;

继续命令P命令执行循环、重复的字符串指令、软件中断或子例程;

程序运行命令G命令用来执行指定范围地址的指令

跟踪命令T命令用来执行指定地址的指令

7.写出数据定义伪指令DB、DW和DD存储整数的格式;

DB:

在内存中用一个字节存储一个整数,由低地址至高地址依次存储;

DW:

在内存中用两个字节存储一个整数,高地址存高位,低地址存地位,由低地址至高地址依次存储;

DD:

在内存中用四个字节存储一个整数,高地址存高位,低地址存地位,由低地址至高地址依次存储。

8.同一个正数分别用DB、DW和DD定义,存储格式有何变化?

所占用的内存大小有变化,DB占用一个字节,DW占用两个字节,值在低地址,高地址用0填充,DD占用四个字节,值在低地址,高地址用0填充

9.同一个负数分别用DB、DW和DD定义,存储格式有何变化?

所占用的内存大小有变化,DB为一个字节,DW为两个字节,DD为三个字节,高地址存高位,低地址存地位,高位补F。

10.自定义标号分别用DW和DD定义,存储格式有何变化?

DW、DD分别两个一组、四个一组储存

11.DB、DW和DD在定义数据串时有何不同?

DB定义时每个值占用一个字节,DW定义时每个值占用两个字节,DD定义时每个值占用四个字节

12.说明十六进制数转换为ASCII码的方法;

将16进制数除以16,商与余数分别加上0的ASCII码,分别输出。

13.字符串(例如“Microsoft”)使用什么数据定义伪指令?

为什么?

用DB定义数据项为ASCII常数时,DB伪指令中可用引号括起任意多个(不超过一个逻辑行)字符

14.顺序结构的程序能有多个出口吗?

为什么?

不能。

一个顺序程序的出口是唯一确定的。

八、结束语

通过本实验加深了对汇编语言设计课程内容的理解和掌握,包括顺序结构与分支结构程序设计方法,以及编辑、汇编、连接和调试四个过程。

认识到学习汇编语言时一定要有缜密清晰的逻辑思维,要在不断的调试中清除错误最终完成程序。

九、参考文献

汇编语言程序设计及实验指导书

实验成绩

考查内容

分数

得分

做好实验内容的预习,写出预习报告

10

了解实验题目的调试方法

10

按实验要求预先设计好程序

10

认真记录实验数据并分析实验结果

10

实验后按要求书写实验报告,记录实验用数据及运行结果

30

创新能力强,在实验中设计的程序有一定的通用性,算法优化

20

实验过程中,具有严谨的学习态度,认真、踏实、一丝不苟的科学作风

10

成绩

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1