重庆大学汇编实验报告4.docx
《重庆大学汇编实验报告4.docx》由会员分享,可在线阅读,更多相关《重庆大学汇编实验报告4.docx(21页珍藏版)》请在冰点文库上搜索。
![重庆大学汇编实验报告4.docx](https://file1.bingdoc.com/fileroot1/2023-7/4/0f7a18ee-3168-43ad-8d34-48df9f01c0b4/0f7a18ee-3168-43ad-8d34-48df9f01c0b41.gif)
重庆大学汇编实验报告4
《汇编语言程序设计》实验报告
年级、专业、班级
姓名
实验题目
实验4:
汇编程序的子程序的实验
实验时间
2013年5月7日
实验地点
DS1421
实验成绩
实验性质
□验证性设计性综合性
教师评价:
□算法/实验过程正确;□源程序/实验内容提交□程序结构/实验步骤合理;
□实验结果正确;□语法、语义正确;□报告规范;
其他:
评价教师签名:
一、实验目的
通过电话号码的维护和查询程序来联系基本的输入输出操作以及利用子程序来实现结构化的程序设计。
二、实验项目内容
1实现一个电话号码维护和查询的程序
2能够输入名字和电话号码,并能够按照名字显示电话号码
3假定已经存在有5个人的姓名和电话号码,最多可以存放10个人的电话号码,姓名长度为10个字符,电话号码也为10个字符,不足部分用空格代替。
4要求撰写必要程序模块设计图和主要的流程
3、实验过程或算法(源程序)
(如果老师要试运行下面的代码,要保证屏幕上有足够的空白)
assumecs:
code,ds:
iomemory
datasegment
s0db'NO.1','daoxian','$','123456','$'
s1db'NO.2','xiaobo','$','234567','$'
s2db'NO.3','pingcuo','$','345678','$'
s3db'NO.4','jianbi','$','456789','$'
s4db'NO.5','mingzhe','$','567890','$'
s5db'NO.6','','$','','$'
s6db'NO.7','','$','','$'
s7db'NO.8','','$','','$'
s8db'NO.9','','$','','$'
s9db'NO.10','','$','','$'
dataends
iomemorysegment
tabledws0,s1,s2,s3,s4,s5,s6,s7,s8,s9
innamedb10,0,16dup(?
)
inphonedb10,0,16dup(?
)
out0db'Whatdoyouwanttodo?
','$'
out1db'1.consult2.built3.alter4.qiut','$'
out2db'Yourinputiswrong.','$'
out3db'Enterthenameofnewlinkman:
','$'
out4db'Enterthephonenumberofnewlinkman:
','$'
out5db'Entertheidentifieryouwantoalter:
','$'
out6db'Enterthenameofthelinkman:
','$'
out7db'Enterthephonenumberofthelinkman:
','$'
out8db'Thephonebookisfull.','$'
out9db'Theidentifierisbeyondthescope.','$'
iomemoryends
codesegment
start:
movbl,5
Again:
callShowMenu
callDeal
jmpAgain
Over:
movax,4c00h
int21h
;----------------------------------------------------------
ShowMenu:
pushax
pushds
pushdx
callNextLine
movax,iomemory
movds,ax
movdx,offsetout0
movah,9
int21h
movdx,offsetout1
movah,9
int21h
popdx
popds
popax
ret
;-----------------------------------------------------------
Deal:
pushax
movah,0ch
moval,1
int21h
cmpal,'1'
jeDeal1
cmpal,'2'
jeDeal2
cmpal,'3'
jeDeal3
cmpal,'4'
jeDeal4
jmpDeal5
Deal1:
callConsult
jmpDealRet
Deal2:
callBuilt
jmpDealRet
Deal3:
callAlter
jmpDealRet
Deal4:
jmpOver
Deal5:
callWrong
jmpDealRet
DealRet:
popax
ret
;---------------------------------------------------------------
Consult:
pushax
pushbx
pushcx
pushdx
pushds
callNextLine
movax,data
movds,ax
movbh,0
movcx,bx
movbx,0
consultsub:
movdx,bx
movah,9
int21h
addbx,16
movdx,bx
movah,9
int21h
addbx,11
loopconsultsub
popds
popdx
popcx
popbx
popax
ret
;-----------------------------------------------------
NextLine:
pushax
pushdx
movah,3
int10h
incdh
movdl,0
movah,2
int10h
popdx
popax
ret
;------------------------------------------------------
Built:
pushax
pushdx
pushds
cmpbl,10
jbbuiltstart
callFull
jmpbuiltend
builtstart:
callNextLine
movax,iomemory
movds,ax
movdx,offsetout3
movah,9
int21h
callInputName
callNextLine
movax,iomemory
movds,ax
movdx,offsetout4
movah,9
int21h
callInputPhone
incbl
builtend:
popds
popdx
popax
ret
;------------------------------------------------------
Full:
pushax
pushdx
pushds
callNextLine
movax,iomemory
movds,ax
movdx,offsetout8
movah,9
int21h
popds
popdx
popax
ret
;------------------------------------------------------
Alter:
pushax
pushbx
pushcx
pushdx
pushds
pushes
pushdi
pushsi
callNextLine
movax,iomemory
movds,ax
movdx,offsetout5
movah,9
int21h
movah,0ch
moval,1
int21h
subal,30h
cmpal,bl
jnaalterstart
callBeyond
jmpalterend
alterstart:
decal
movbl,al
callNextLine
movax,iomemory
movds,ax
movdx,offsetout6
movah,9
int21h
callInputName
callNextLine
movax,iomemory
movds,ax
movdx,offsetout7
movah,9
int21h
callInputPhone
alterend:
popsi
popdi
popes
popds
popdx
popcx
popbx
popax
ret
;-------------------------------------------------------
Beyond:
pushdx
pushds
pushax
callNextLine
movax,iomemory
movds,ax
movdx,offsetout9
movah,9
int21h
popax
popds
popdx
ret
;-------------------------------------------------------
Wrong:
pushdx
pushds
pushax
callNextLine
movax,iomemory
movds,ax
movdx,offsetout5
movah,9
int21h
popax
popds
popdx
;------------------------------------------------------
InputName:
pushax
pushbx
pushcx
pushdx
pushds
pushes
pushdi
pushsi
movax,iomemory
movds,ax
movdx,offsetinname
movah,0ch
moval,0ah
int21h
subch,ch
movcl,inname+1
adddx,2
pushcx
movax,data
moves,ax
movax,iomemory
movds,ax
movsi,dx
movbh,0
movdi,bx
adddi,di
movdi,table[di]
adddi,5
cld
repmovsb
popax
movcx,10
subcx,ax
inputnamecir:
movbyteptres:
[di],''
incdi
loopinputnamecir
popsi
popdi
popes
popds
popdx
popcx
popbx
popax
ret
;-------------------------------------------------------
InputPhone:
pushax
pushbx
pushcx
pushdx
pushds
pushes
pushdi
pushsi
movax,iomemory
movds,ax
movdx,offsetinphone
movah,0ch
moval,0ah
int21h
subch,ch
movcl,inphone+1
adddx,2
pushcx
movax,data
moves,ax
movax,iomemory
movds,ax
movsi,dx
movbh,0
movdi,bx
adddi,di
movdi,table[di]
adddi,16
cld
repmovsb
popax
movcx,10
subcx,ax
inputphonecir:
movbyteptres:
[di],''
incdi
loopinputphonecir
popsi
popdi
popes
popds
popdx
popcx
popbx
popax
ret
;------------------------------------------
codeends
endstart
程序流程图:
程序的解释
4、实验结果及分析和(或)源程序调试过程
程序运行结果如上图。
刚开始程序输出菜单,然后我选择执行1号功能,程序输出所有用户资料,然后我选择2号功能新建联系人,根据提示分别输入联系人名“zhong”与“12345”,接着选择3好功能,将2号联系人的名字改为“dabo”,电话改为“987654“,再选择1号功能,可以看出,屏幕上输出原来2号联系人的资料已经改变,而且多了6号联系人,最后选择4号功能退出。
由于还不熟悉汇编语言,程序还没实现怎么滚动屏幕,使得输出语句满屏时不会出错。
通过本程序,我了解了怎么在汇编中实现输入输出,以及利用子程序来实现结构化的程序设计。
报告创建时间:
2013年5月7日