汇编语言程序设计实验报告Word下载.docx
- 文档编号:16758842
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:27
- 大小:82.40KB
汇编语言程序设计实验报告Word下载.docx
《汇编语言程序设计实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计实验报告Word下载.docx(27页珍藏版)》请在冰豆网上搜索。
cld
movcx,25
repzcmpsb
jzmatch
leadx,mess2
jmpshortdisp
match:
leadx,mess1
disp:
movah,09
int21h
ret
mainendp
prognamends
endstart
2.对源文件汇编产生目标文件obj
D:
\masm文件名。
Asm
3.用连接程序link产生执行文件exe
\link文件名。
Obj
4.执行程序
\文件名
5.使用debug程序调试程序的方法。
d>
debug文件名.exe
_
1.用G命令运行程序
2.用U命令显示程序
3.学会设置断点。
4.学会查看数据段的内容情况D
5.用E命令修改数据区的字符串。
6.用A命令把数据区的内容恢复原状
7.T命令逐条跟踪程序的执行
8.学会使用F命令、R命令、Q命令等等
五、实验总结
第一次进行汇编实验,主要是学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法,只有多上机练习,才能更好的掌握汇编语言程序设计的思想。
实验二循环程序设计1
循环结构是控制重复执行某一程序段的基本程序结构.在汇编语言程序设计中,循环程序的地位也是极为重要,从本质上来看,循环程序结构是分支程序结构的一种手特殊形式,也是使用条件转移指令来控制执行循环的.
一.实验目的:
学会用循环结构进行程序编程。
二.实验题目:
设计一个按表格形式显示ASC||码为10H—100H的所有字符的程序。
三.实验要求:
按15行*16列的表格形式显示ASC||码为10H----100H的所有字符,即以行为主的顺序及ASC||码递增的次序依次显示对应的字符。
每16个字符为一行,每行中的相邻两个字符之间用空白符(ASC||为0)隔开。
(1)显示每个字符可使用功能号为02的显示输出功能调用,使用方法如下:
movah,02h
movdl,0AH
int21h
本题中可把dl初始化为10H,然后不断使其加1(用INC指令)以取得下一个字符的ASC||码。
(2)显示空白符时,用其ASC||码0置入dl寄存器,每行结束时,用显示回车(ASC||为0dh)和换行符(ASC||为oah)来结束本行并开始下一行。
(3)由于逐个显示相继的ASC||字符时,需要保存并不断修改dl寄存器的内容,而显示空白、回车、换行符时也需要使用dl寄存器,为此可使用堆栈来保存相继的ASC||字符。
具体用法是:
在显示空白或回车,换行符前用指令
pushdx把dl的内容保存到堆栈中去。
在显示空白或回车,换行符后用指令
popdx恢复dl寄存器的原始内容。
五、实验代码
stacksegment
db100dup(?
)
stackends
codesegment
assumecs:
code,ss:
stack
start:
movdl,10h
movcl,0fh
loopc:
movah,02h
moval,dl
incdl
pushdx
movdl,0h
moval,dl
int21h
popdx
loopnzloopc
movdl,0dh
movdl,0ah
popdx
cmpdl,0h
jneloopc
movah,4ch
codeends
六、实验结果
七、实验总结
本次试验学会用循环结构进行程序编程,学好循环程序是很重要的,在程序设计中,它的地位是极其重要的。
实验三循环程序设计2
学会用循环程序设计进行程序编程。
设计查找匹配字符串SEARCH的程序。
三.问题要求:
程序接收用户键入的一个关键字以及一个句子。
如果句子中不包含关键字则显示’nomatch’;
如果句子中包含关键字则显示‘match’,且把该字在句子中的位置用十六进制数显示出来,要求程序的执行过程如下:
enterkeyword:
abc
entersentence:
wearestudyingabc
matchatlocation:
11Hofthesentence
entersentence:
xyz,ok?
nomatch
entersentence:
^c
四.方法说明:
程序可由三部分组成:
(1)输入关键字和一个句子,分别存入相应的缓冲区中,可用功能调用0AH。
(2)在句子中查找关键字。
1.关键字和一个句子中相应字段的比较可使用串比较指令,为此必须定义附加段,但附加段和数据段可以定义为同一段,以便于串指令的使用,这样,相应的寄存器内容也有了确定的含义,如下:
SI寄存器为关键字的指针
DI寄存器为句子中正相比较的字段的指针
CX寄存器存放关键字的字母个数(长度)
2.整个句子和关键字的比较过程可以用一个循环结构来完成。
循环次数为:
(句子长度--关键字长度)+1在计算循环次数时,如遇到句子长度小于关键字长度的情况则应转向显示“nomatch”,循环中还需要用到BX寄存器,它用来保存句子中当前正在比较字段的首地址。
(3)输出信息:
用功能调用09h分“找到”或“找不到”两种情况分别显示不同的信息。
在“找到”时,还要求显示出匹配字符串在句子中的位置,在“找到”时BX寄存器的内容为匹配字符串的首地址,将此值减到句子的首地址,再将差值加1即是所要的匹配字符串在句子中的位置,可将位置转换为十六进制数从屏幕上显示出来。
ssegsegmentstack
dw256dup(?
)
ssegends
datasegment
msg1db'
Enterkeyword:
'
24h
msg2db'
EnterSentence:
crdb13,10,24h
keyworddb250,?
250dup(?
Sentencedb250,?
matchdb'
Matchatlocation:
match1db'
ofthesentence'
13,10,24h
nomatchdb'
Nomatch'
dataends
codesegment
code,ds:
data,ss:
sseg
disp_hexprocnear
pushax
pushcx
movcl,4
roral,cl
andal,0fh
addal,30h
cmpal,39h
jnad1
addal,7
d1:
movdl,al
movah,2
popax
jnad2
d2:
movdl,'
h'
popcx
disp_hexendp
begin:
movax,data
movds,ax
moves,ax
movdx,offsetmsg1
movah,9
movdx,offsetkeyword
movah,0ah
cmpkeyword+1,0
jequit
movdx,offsetcr
b1:
movdx,offsetmsg2
movdx,offsetSentence
movdl,Sentence+1
cmpdl,0
movdh,keyword+1
movdi,offsetSentence+2
b2:
cmpdh,dl
ja_nomatch
movsi,offsetkeyword+2
movcl,dh
movch,0
cld
pushdi
repecmpsb
popdi
je_match
incdi
decdl
jmpb2
_match:
movax,di
subax,offsetSentence+2
incax
movdx,offsetmatch
calldisp_hex
movdx,offsetmatch1
jmpb1
_nomatch:
movdx,offsetnomatch
quit:
endbegin
本次试验主要考察了串比较指令的用法,同时将串指令和REPE联合起来用,使得指令变得简单。
实验中还用到了一些数据结构,开始时需要定义空间以及缓冲区。
另外程序需要运用有两层循环,内循环由CX记录关键字长度控制循环计数,外循环是由ax记录外循环次数控制外循环计数。
通过本次实验,使我更加熟悉了课堂上知识,还培养了我将理论知识运用到实际编程中去的能力。
实验四分支程序设计
学会用分支程序设计进行程序编程。
设计一个程序能分类统计字符个数
程序接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符结束),并按字母、数字及其它字符分类计数,然后将结果存入以letter、digit和other为名的存储单元中。
四.方法说明:
程序可采用0AH功能调用把键入字符直接送到缓冲区中,然后再逐个取出分类计数,也可采用01H功能调用在接收字符后先分类计数然后再存入缓冲区中。
程序需进入debug运行并查看计数结果。
五.实验代码
DATASSEGMENT
STRING1DB'
InputYourString:
$'
;
输入提示信息
STRING2DB'
Digit:
;
各类字符提示信息
STRING3DB'
Letter:
STRING5DB'
Others:
DIGITDB0;
数字
CHARSDB0;
字母
OTHERSDB0;
其他
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
LEADX,STRING1;
显示输入提示信息
MOVAH,9
INT21H
MOVCX,100;
设置循环次数足够大
L1:
MOVAH,1;
中断调用,单字符输入
CMPAL,0DH;
若输入回车符则结束
JZOVER2
CMPAL,30H
JBOTHER;
若<
30H(0),OTHERS++
CMPAL,39H;
若>
39H(9),跳转进一步比较
JAHIGHER1
JMPDIGITAL;
DIGIT++
HIGHER1:
CMPAL,41H;
if<
41H(A),OTHERS++
JBOTHER
CMPAL,5AH;
if>
5AH(Z),跳转继续比较
JAHIGHER2
JMPCHAR;
ALPHAU++
HIGHER2:
CMPAL,61H;
61H(a),OTHERS++
CMPAL,7AH;
7AH(z),OTHERS++
JAOTHER
ALPHAL++
JMPOVER;
比较结束
OTHER:
INCOTHERS;
OTHERS++
JMPOVER
DIGITAL:
INCDIGIT;
CHAR:
INCCHARS;
JMPOVER
OVER:
NOP
LOOPL1;
循环,输入下一字符
OVER2:
CALLENDLINE;
回车换行
LEADX,STRING2;
输出提示信息
XORAX,AX
MOVAL,DIGIT;
将统计的数字送AX,为输出做准备
CALLDISPLAY;
调用输出两位数字的子程序
下同
LEADX,STRING3
MOVAL,CHARS
CALLDISPLAY
CALLENDLINE
LEADX,STRING5
MOVAL,OTHERS
MOVAH,4CH
ENDLINEPROCNEAR;
控制输出格式,输出回车换行子程序
MOVAH,2
MOVDL,0AH
MOVDL,0DH
RET
ENDLINEENDP
DISPLAYPROCNEAR;
输出两位数字的子程序
MOVBL,10;
10送BL
DIVBL;
AX/BL,AL=商,AH=余数
PUSHAX;
保存AX中的信息
MOVDL,AL
ADDDL,30H
INT21H;
输出十位数
POPAX;
出栈送AX
MOVDL,AH
输出个位数
DISPLAYENDP
CODESENDS
ENDSTART
六.实验总结
本次实验要求我们学会用分支程序设计进行程序编程,其中运用到许多跳转和比较指令,只要细心一点,理清思路就能很容易的将本程序编写出来。
实验五子程序设计
学会用子程序设计进行程序编程。
设计一个能查找电话号码phone的程序。
三.实验要求:
i.要求程序建立一个可存放50项的电话号码表,每项包括人名(20个字符)及电话号码(8个字符)两部分;
ii.程序可接收输入人名及相应的电话号码,并把它们加入电话号码表中;
iii.凡有新的输入后,程序应按人名对电话号码表重新排序;
iv.程序可接收需要查找电话号码的人名,并从电话号码表中查出其电话号码,再在屏幕上以如下格式显示出来。
nametel
********
四.实验提示:
程序采用子程序结构,主程序的主要部分如下:
.显示提示符‘inputname:
’;
.调用子程序input_name接收人名;
.调用子程序stor_name把人名存入电话号码表tel_tab中;
.显示提示符‘inputatelephonenumber:
.调用子程序inphone接收电话号码,并把它存入电话号码表tel_tab中;
.如输入已结束则调用name_sort子程序对电话号码表按人名排序;
.显示提示符‘DOyouwantatelephonenumber?
(y/n)’;
.回答N则退出程序;
.回答Y则再显示提示符‘name?
.调用子程序input_name接收人名;
.调用子程序name_search在电话号码表中查找所要的电话号码;
.调用子程序printline按要求格式显示人名及电话号码;
.重复查号提示符直至用户不再要求查号为止。
datasegment
tel_tabdb50dup(28dup('
'
));
tel_tab电话本空间
tab_lendw0;
已存联系人数目
endaddrdw0;
最后一个联系人的地址+28
tnamedb21,?
20dup('
),?
;
姓名缓冲区
tphonedb9,?
8dup('
;
号码缓冲区
tempdb28dup(?
);
一个联系人的临时空间
inamedb13,10,'
Inputname:
13,10,'
$'
iphonedb13,10,'
Inputatelephonenumber:
go_ondb13,10,'
Continueinsert?
<
Y/N>
提示是否继续插入联系人
snamedb13,10,'
Name?
name_edb13,10,13,10,'
Thenamehasbeeninthetable!
Pleaseinputagain!
text2db13,10,'
NameTel.'
text3db13,10,'
Thenameisnotinthetelephonetable!
text4db13,10,13,10,'
Doyouwantatelephonenumber?
dataends
codesegment
****************************************************************************
主程序
-------------------------------------------------------------------------------------
mainprocfar
assumecs:
code,ds:
data,es:
data
pushds;
保存旧数据用于返回
subax,ax
pushax
movax,data;
数据段、附加段初始化
movds,ax
moves,ax
inname:
leadx,iname;
提示输入姓名
movah,09h
int21h
callinput_name;
调用读入姓名子程序
callname_search;
调用查找子程序,
cmpbx,-1;
如表中不存在该联系人
jestor;
则跳转到stor
callcrlf;
回车换行
leadx,name_e;
否则提示该联系人已在表中,提示重新输入
jmpinname
stor:
callstor_name;
调用姓名转存子程序,把姓名移动到表中
leadx,iphone;
提示输入电话号码
callinphone;
调用读入号码子程序
callname_sort;
排序
callcrlf
leadx,go_on;
提示是否继续插入
choice1:
mov
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 实验 报告