顺序结构程序设计实验报告.docx
- 文档编号:8669936
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:10
- 大小:679KB
顺序结构程序设计实验报告.docx
《顺序结构程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《顺序结构程序设计实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
顺序结构程序设计实验报告
《汇编语言程序设计》实验报告
实验名顺序结构程序设计实验室实验楼实验日期2014-05-05
一、实验目的及要求
1.熟悉命令格式,功能,加强对指令系统的理解
2.编写简单顺序结构程序
3.单步跟踪调试,观察寄存器的变化和指令执行的结果
二、实验环境
硬件环境:
一台微型计算机
软件环境:
windowsxp,debug环境,masm
三、实验内容(至少写3个程序)
题目一:
求x+y+z的和,并把结果送给给w,其中x,y,z,w是数据段的标记符,用来存放三个数据
1.设计:
首先,在数据段中,定义x,y,z分别存5,6,7三个值,同时申请一个字单元,用标号w来表示,用来存放表达式的结果;在代码段中,首先初始化,然后将x中所存放的值传送给计算器A,再将计算器A中的内容和y中的内容相加,结果存放在计算器A中,再将计算器A中的内容和z中的内容相加,结果同样存放在计算器A中,最后将计算器A中的内容传送到w中。
2.源程序清单
datasegment
Xdw5
Ydw6
Zdw7
Wdw?
dataends;定义数据段,分别给X,Y,Z赋初值,并为W开辟存储空间
codesegment;代码段
mainprocfar
assumecs:
code,ds:
data
start:
pushds
xorax,ax
pushax
movax,data;初始化
movds,ax
movax,X
addax,Y;X和Y的和存入累加器A
addax,Z
movW,ax;X,Y,Z之和存入W中
ret
mainendp
codeends;代码段结束
endstart
3.调试过程:
(1).用masm程序产生mwn1.obj文件,编译没有错误,如下图:
(2).用link程序产生mwn1.exe文件,连接没有错误,如下图:
(3).进入debug调试,用u命令反汇编,查看代码段,数据段所在的内存单元;
(4).由(3)可知,数据段在144A段,如下图,用d命令查看数据段的值,依次为5,6,7,接着下一个字的内容为0:
(5).用t命令单步执行,前三次为初始化,具体的如下图:
(6)用t命令执行,如下图,将[0000]单元中的内容05h传给ax,ax中的内容为0005,将[0002]单元中的内容和ax相加,并把结果存放在ax中,ax中的内容为000b=(5+6)
(7)用t命令执行,如下图,将[0004]单元中的内容0bh和ax相加,并把结果存放在W中,W中的内容为0012=(0b+7)
题目二:
1.设计:
首先,在数据段中,定义字符串存放在变量s1中,同时申请一个字单元,用标号s2来表示,用来存放计数次数;在代码段中,首先初始化,然后,根据cld与rep的组合递减,将字符一个一个根据地址的指示按顺序输出。
2.源程序清单
datasegment
s1db'Thisisaprogram!
$'
countequ$-s1;变量count代替$-s1
s2dbcountdup(?
)
dataends;定义数据段,变量s1为字符串'Thisisaprogram!
$',
;变量s2是重复计数次数
codesegment;代码段
assumecs:
code,ds:
data,es:
data
start:
movax,data
movgt
moves,ax;初始化
movsi,offsets1;将变量s1的偏移地址放入寄存器si中
movdi,offsets2;将变量s2的偏移地址放入寄存器di中
movcx,count;将计数次数存入寄存器cx中
Cld
repmovsb;在字符串的比较,di或si是可以自动增减,即si,di向前移动
movdx,offsets2
movah,9
int21h
movax,4c00h
int21h;输出结果
codeends
endstart
3.调试过程:
(1).用masm程序产生mwn2.obj文件,编译没有错误,如下图:
(2).用link程序产生mwn1.exe文件,连接没有错误,如下图:
(3).进入debug调试,用u命令反汇编,查看代码段,数据段所在的内存单元;
(4).由(3)可知,数据段在144A段,如下图,用d命令查看数据段的值,依次为Thisisaprogram!
$,接着下一个字的内容为0:
(5)用t命令单步执行,前三次为初始化,具体的如下图:
(6)用t命令执行,如下图,将偏移地址存入si,di;
(7)用t命令执行,如下图,命令执行count次数;
(8)执行结果,如下图:
题目三:
查表法,实现一位16进制数转换为ASCII码显示
1.设计:
首先,在数据段中,定义0~9的ASCII码、A~F的ASCII码,并设定一个待转换的数;在代码段中,首先初始化,然后指定寄存器BX存放ASCII码转换表,根据待转换的数,查找ASCII码表,根据偏移地址确定转换结果。
2.源程序清单
datasegment
ASCIIdb30h,31h,32h,33h,34h,35h
db36h,37h,38h,39h;0~9的ASCII码
db41h,42h,43h,44h,45h,46h;A~F的ASCII码
Hexdb0bh;任意设定一个待转换的一位16进制数
dataends;数据段定义
codesegment;代码段
mainprocfar
assumecs:
code,ds:
data
start:
pushds
xorax,ax
pushax
movax,data
movds,ax;初始化
movbx,offsetASCII;BX指向ASCII码表
moval,hex;AL取得一位16进制数,正是ASCII码表中位移
andal,0fh;只有低4位是有效的,高4位清0
xlat;换码:
AL←DS:
[BX+AL]
movdl,al;入口参数:
DL←AL
movah,2;02号DOS功能调用
int21h;显示一个ASCII码字符
ret
mainendp
codeends
endstart
3.调试过程:
(1)用masm程序产生mwn3.obj文件,编译没有错误,如下图:
(2)用link程序产生mwn3.exe文件,没有错误,如下图:
(3)进入debug调试,用u命令反汇编,查看代码段,数据段所在的内存单元;
(4).由(3)可知,数据段在144A段,如下图,用d命令查看数据段的值,依次为5,6,7,接着下一个字的内容为0:
(5).用t命令单步执行,前三次为初始化,具体的如下图:
(6)用t命令执行,如下图,将BX指向ASCII码表;
(7)用t命令执行,如下图,AL取得一位16进制数,即ASCII码表中位移;
(8)用t命令执行,如下图,高4位清0,只有低4位有效;
(9)用t命令执行,如下图,换码过程;
(10)用t命令执行,输出结果B,如下图:
四、总结
(1)了解了编制汇编语言程序的步骤:
分析题意,确定算法;根据算法画出程序框图;根据框图编写程序;上机调试程序。
(2)理解了调试过程的反复性,发生错误时,一步步往回验证,直到找到错误,修改后,继续重新执行。
(3)通过单步执行命令t跟踪调试,提高了对寄存器根据指令变化的理解;同时对debug命令格式、功能有了基础的了解。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 顺序 结构 程序设计 实验 报告