华北电力大学汇编实验报告.docx
- 文档编号:4038669
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:15
- 大小:222.74KB
华北电力大学汇编实验报告.docx
《华北电力大学汇编实验报告.docx》由会员分享,可在线阅读,更多相关《华北电力大学汇编实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
华北电力大学汇编实验报告
华北电力大学汇编实验报告
华北电力大学
实验报告
|
|
实验名称汇编语言程序设计实验
课程名称IBM-PC汇编语言程序设计
|
|
专业班级:
计科1103学生姓名:
李庆贺
学号:
201109010307成绩:
指导教师:
王保义实验日期:
1月
movah,02h
movdl,0dh
int21h
movah,02h
movdl,0ah
int21h;输出换行
popdx;将栈顶元素推出
decbl
cmpbl,0;比较确定是否已经输出15行元素
jnee;若还未完成输出,则跳转至e,继续进行下一行元素的输出
jeexit;否则退出程序
exit:
movax,4c00h
int21h
mainendp
prognamends
end;start
实验二查找匹配字符串
一、实验要求
程序接受用户键入的一个关键字以及一个句子,如果句子中不包含关键字则显示“Nomatch!
”;如果句子中包含关键字则显示“match!
”,且把该字在句子中的位置用十六进制数显示出来。
要求程序的执行过程如下:
Enterkeyword:
abc
Entersentence:
wearestudyingabc
Matchatlocation:
11Hofthesentence
Entersentence:
xyz
Nomatch!
Entersentence:
二、设计说明
程序由三部分组成:
(1)输入关键字和一个句子,分别存入相应的缓冲区中。
(2)在句子中查找关键字
(3)输出信息。
用功能调用09h分‘找到’和‘未找到两种情况分别显示不同的信息。
在“找到”时,显示关键字在字符串中位置。
三、使用说明
根据提示输入关键字和句子,按回车键结束输入。
程序将显示字符串中是否含有关键字,有则提示‘match’并显示关键字位置,无则提示‘nomatch’。
四、实验程序
datareasegment
;输入数据段
keyadrlabelbyte
keymaxdb20
keyactdb?
keystringdb20dup(?
);定义能放入50个字符缓存空间的大小,带输入数据长度未知
senadrlabelbyte
senmaxdb50
senactdb?
secstringdb50dup(?
)
messkeydb'Enterkeyword:
','$'
messsendb0dh,0ah,'EnterSentence:
','$'
nomatchdb0dh,0ah,'Nomatch.','$'
matchdb0dh,0ah,'Matchatlocation:
','$'
restdb'Hofthesentence.','$'
datareaends
;设置dos显示端内容
prognamsegment
mainprocfar
assumecs:
prognam,ds:
datarea,es:
datarea
start:
pushds
xorax,ax;ax寄存器清0
pushax
movax,datarea
movds,ax
moves,ax
leadx,messkey
movah,09h
int21h;显示messkey字符内容
leadx,keyadr
movah,0ah
int21h;是实现DOS调用中的0a号功能,就是在屏幕上显示keyadr字符串
leadx,messsen
movah,09h
int21h
leadx,senadr
movah,0ah
int21h
moval,senact
subal,keyact
jlnmatch;长度比较,句子长度短,没有找到跳到nmatch子语句
callsearch
jmpshorte0;无条件跳转
;以上均为DOS上让其显示这些内容
nmatch:
leadx,nomatch
movah,09h
int21h
e0:
ret
mainendp;结束
searchprocnear
xorcx,cx;cxqingling
movdx,offsetsenadr;句子地址到dx
adddl,senact;句子changdu
incdl;置长度加1得到句子最后一位
movcl,keyact;关键字长度到cl
cld;清除方向标志
leadi,secstring
r0:
leasi,keystring
repzcmpsb;如果si和di所指向的两个字节相等,则继续比较。
所以如果相等的话,就停止循环。
但是这时候si和di已经自动加1了,如果要找不相等的那两个数,就要把si和di减1。
moval,byteptr[si-1]
cmpal,byteptr[di-1];把那两个不相等的字节放到ptr数组中去
jnznext;为0?
,跳到next子语句
subsi,offsetkeystring;获得操作数keystring的偏移地址
movax,si
cmpal,keyact;将关键字与secstring长度比较
jeshowp
next:
movcl,keyact
cmpdi,dx
jnzr0
shown:
leadx,nomatch
movah,09h
int21h;在屏幕上显示nomatch字符串
jmpshorte1
showp:
leadx,match
movah,09h
int21h;在屏幕上显示match字符串
decdi;句子与关键字匹配最后一位的下一位,所以要见1位
movbx,di;
xorax,ax
moval,keyact
subbx,ax;句子长度减去关键字长度
movax,offsetsenadr
subbx,ax
callbinihex
leadx,rest
movah,09h
int21h
e1:
ret
searchendp
binihexprocnear
movch,4
r1:
movcl,4;左移4位
rolbx,cl
movdl,bl
anddl,0fh
adddl,30h
cmpdl,39h
jledisp
adddl,07h
disp:
movah,02h
int21h
decch
jnzr1
ret
binihexendp
prognamends
endmain
五、程序框图
实验三分类统计字符个数
一、实验要求
程序接受用户键入一行字符(字符个数不超过80个,该字符串用回车符结束),并按字母、数字、其它字符分类计数,然后将结果存入以letter、digit和other为名的存储单元中。
二、设计说明
(1)程序可采用01H功能调用把键入字符先分类计数再存入缓冲区中。
(2)程序进入debug运行并查看计数结果。
三、实验程序
DATASEGMENT
PARSDB80;准备接收80个字符.
NNNDB?
;用于存放实际输入的个数.
IIIDB80DUP(?
);80字节的空间.
D_NDB?
C_NDB?
O_NDB?
MESG1DB13,10,'InputSTR:
$';用于提示.
MES_CDB13,10,'CharNis:
$';用于提示.
MES_DDB13,10,'DigitNis:
$';用于提示.
MES_ODB13,10,'OtherNis:
$';用于提示.
MES_TDB13,10,'AllNis:
$';用于提示.
DATAENDS
;---------------------------------------------------
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVD_N,0
MOVC_N,0
MOVO_N,0
MOVDX,OFFSETMESG1
MOVAH,9;9号功能调用,显示提示.
INT21H
MOVDX,OFFSETPARS
MOVAH,10;10号功能调用,接收键盘输入.
INT21H
;---------------------------------------------------
MOVCL,NNN;收到字符的个数.
MOVCH,0
CMPCX,0
JNZDO_IT
JMPEXIT
DO_IT:
LEASI,III;收到字符的起始地址.
;----------------------------下面开始循环统计.
AGAIN:
MOVAL,[SI]
D_num:
CMPAL,':
';-':
'
JNCN_C_B;>'9'
CMPAL,'0'
JCN_C_B;<'0'
INCD_N;数字个数加一.
JMPNEXT
N_C_B:
CMPAL,'[';-'['
JNCN_C;>'Z'
CMPAL,'A'
JCN_C;<'A'
INCC_N;大写,加一.
JMPNEXT
N_C:
CMPAL,'{';-'{'
JNCOTHER;>'z'
CMPAL,'a'
JCOTHER;<'a'
INCC_N;小写,加一.
JMPNEXT
OTHER:
INCO_N;其它.
NEXT:
INCSI
LOOPAGAIN
;----------------------------统计结束
MOVDX,OFFSETMES_D
MOVAH,9;9号功能调用,显示提示.
INT21H
MOVAL,D_N
CALLDISP_AL
MOVDX,OFFSETMES_C
MOVAH,9;9号功能调用,显示提示.
INT21H
MOVAL,C_N
CALLDISP_AL
MOVDX,OFFSETMES_O
MOVAH,9;9号功能调用,显示提示.
INT21H
MOVAL,O_N
CALLDISP_AL
MOVDX,OFFSETMES_T
MOVAH,9;9号功能调用,显示提示.
INT21H
MOVAL,NNN
CALLDISP_AL
;----------------------------显示结束.
EXIT:
MOVAH,4CH
INT21H
;============================
DISP_AL:
;以3位十进制数形式显示AL中的内容.
MOVAH,0
MOVBL,100
DIVBL
ADDAL,30H
MOVDL,AL
MOVBH,AH
MOVAH,2
INT21H
MOVAH,0
MOVAL,BH
MOVBL,10
DIVBL
ADDAL,30H
MOVDL,AL
MOVBH,AH
MOVAH,2
INT21H
ADDBH,30H
MOVDL,BH
MOVAL,AH
MOVAH,2
INT21H
RET
;============================
CODEENDS
ENDSTART
四、使用说明
程序进入后提示输入字符,可以输入任意字符,输入完成后键入回车键表示完成,则会在下一行输出实验结果。
五、程序框图
实验心得体会:
这次汇编实验历时一周,但我用了3天时间完成了3个编程实验:
用表格形式显示字符、查找匹配字符串、分类统计字符个数,由于期间要考试所以就没有做第四个。
用表格形式显示字符和查找匹配字符串是使用了循环程序设计思想。
显示字符实验较为简单,只需要一些基础知识即可完成。
而查找字符串较耗费时间,这个实验主要难点就在从句子中查找关键字。
查找关键字是使用的串比较指令。
这个指令只能进行比较,查找就需要移动指针,将整个句子都与关键字比较一遍,才能确定是否找到了关键字。
分类统计字符个数与查找电话号码较难,花费了我最多的时间。
分类统计字符个数是应用了分支程序设计,而查找电话号码是应用了子程序设计。
分类统计字符个数是将输入的字符与多个条件进行比较,找到符合条件的程序段就执行,否则就跳到下一个。
实验过程中遇到了很多问题,有许多问题是我自己无法解决的,只能通过向其他同学学习,向老师询问一些不懂的地方,才能将实验完成。
这次实验培养了我的实践能力,使我将书本中的理论知识转变成了现实的程序,为今后的学习和使用打下了结实的基础。
通过实验使我进一步巩固所学汇编课程内容并掌握汇编程序在程序设计中的应用方法,并对汇编程序设计及应用有整体的认识。
在此还要真诚的感谢老师的帮助,否则我也不会顺利完成该实验。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华北电力 大学 汇编 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)