汇编语言实现整数冒泡排序.docx
- 文档编号:23584495
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:13
- 大小:32KB
汇编语言实现整数冒泡排序.docx
《汇编语言实现整数冒泡排序.docx》由会员分享,可在线阅读,更多相关《汇编语言实现整数冒泡排序.docx(13页珍藏版)》请在冰豆网上搜索。
汇编语言实现整数冒泡排序
实验报告
专业班级:
信安1101
姓名:
雷友波
学号:
0909110703
1.实现正整数的冒泡排序,要求有输入与输出。
一、实验目的
(1)学习汇编语言循环结构语句的特点,重点掌握冒泡排序的方法。
(2)理解并掌握各种指令的功能,编写完整的汇编源程序。
(3)进一步熟悉DEBUG的调试命令,运用DEBUG进行调试汇编语言程序。
实验源程序
;LT413.ASM
.modelsmall
.stack
.data
count=10
arraydwcountdup(0)
wtempdw?
flgdb0
.code
.startup
movcx,count
movbx,offsetarray
againi:
callread
mov[bx],ax
incbx
incbx
calldpcrlfi
loopagaini
;
;
movcx,count
deccx
outlp:
movflg,0
movdx,cx
movbx,offsetarray
inlp:
movax,[bx]
cmpax,[bx+2]
jnanext
xchgax,[bx+2]
movflg,1
mov[bx],ax
next:
incbx
incbx
decdx
jnzinlp
cmpflg,0
jzfxw
loopoutlp
;
;
fxw:
movcx,count
movbx,offsetarray
againo:
movax,[bx]
movwtemp,ax
callwrite
incbx
incbx
calldpcrlfo
loopagaino
.exit0
readproc
pushbx
pushcx
pushdx
xorbx,bx
xorcx,cx
movah,1
int21h
cmpal,'+'
jzread1
cmpal,'-'
jnzread2
movcx,-1
read1:
movah,1
int21h
read2:
cmpal,'0'
jbread3
cmpal,'9'
jaread3
subal,30h
shlbx,1
movdx,bx
shlbx,1
shlbx,1
addbx,dx
;
movah,0
addbx,ax
jmpread1
read3:
cmpcx,0
jzread4
negbx
read4:
movax,bx
popdx
popcx
popbx
ret
readendp
dpcrlfiproc
pushax
pushdx
movah,2
movdl,0dh
int21h
movah,2
movdl,0ah
int21h
popdx
popax
ret
dpcrlfiendp
writeproc
pushax
pushbx
pushdx
movax,wtemp
testax,ax
jnzwrite1
movdl,'0'
movah,2
int21h
jmpwrite5
write1:
jnswrite2
movbx,ax
movdl,'-'
movah,2
int21h
movax,bx
negax
write2:
movbx,10
pushbx
write3:
cmpax,0
jzwrite4
subdx,dx
divbx
adddl,30h
pushdx
jmpwrite3
write4:
popdx
cmpdl,10
jewrite5
movah,2
int21h
jmpwrite4
write5:
popdx
popbx
popax
ret
writeendp
dpcrlfoproc
pushax
pushdx
movah,2
movdl,0dh
int21h
movah,2
movdl,0ah
int21h
popdx
popax
ret
dpcrlfoendp
end
实验结果:
2.编制一个子程序把一个16位二进制数用十六进制的形式在屏幕上显示出来,分别运用如下三种参数传递方式,并用一个主程序验证它
(1)采用AX寄存器传递这个16位的二进制数
(2)采用wordTEMP变量传递这个16为二进制数
(3)采用堆栈方法传递这个16位二进制数
实验源程序:
.modelsmall
.stack
.data
string1db'Mean1useregister:
','$'
string2db'Mean2usevariable:
','$'
string3db'Mean3usestack:
','$'
string4db0dh,0ah,'$'
mydatadw1992h
wordTEMPdw?
.code
.startup
;AX方式
movdx,offsetstring1;
movah,9;
int21h;
movax,wordptrmydata;
callchan1;
;变量方式
pushax
movdx,offsetstring4;
movah,09h;
int21h;
movdx,offsetstring2;
movah,09h;
int21h;
popax
movwordptrwordTEMP,ax;
callchan2;
;栈方式
pushax
movdx,offsetstring4;
movah,09h;
int21h;
movdx,offsetstring3;
movah,09h;
int21h;
popax
pushax;
callchan3;
popax;
.exit0
chan1proc
pushax;
pushbx;
movbl,al;
moval,ah;
callALdisp;
moval,bl;
callALdisp;
popbx;
popax;
ret
chan1endp
chan2proc;wordTEMP传递
pushax;
pushbx;
movbl,al;
moval,ah;
callALdisp;
moval,bl;
callALdisp;
popbx;
popax;
ret
chan2endp
chan3proc;栈传递
pushbp;
movbp,sp;
pushax;
pushbx;
movax,[bp+4];
movbl,al;
moval,ah;
callALdisp;
moval,bl;
callALdisp;
popbx;
popax;
popbp;
ret
chan3endp
ALdispproc
pushax
pushcx
pushdx
pushax
movdl,al
movcl,4
shrdl,cl
ordl,30h
cmpdl,39h
jbealdisp1
adddl,7
aldisp1:
movah,2
int21h
popdx
anddl,0fh
ordl,30h
cmpdl,39h
jbealdisp2
adddl,7
aldisp2:
movah,2
int21h
popdx
popcx
popax
ret
ALdispendp
end
实验结果:
心得体会:
在本次汇编语言程序设计实验中,我们学习了汇编语言的循环结构,并对冒泡排序法进行了汇编程序设计,我首先编写了对给定数据进行冒泡排序的算法设计,这有助于我熟悉冒泡排序的逻辑结构,理清设计思路。
汇编语言与C语言相似,然而,在设计过程中,我才意识到,要用汇编语言写出完整的算法程序并不是一件简单的事,一个微小的错误就可能导致整个程序无法正常运行。
在编程时,出现了各种各样的错误,如写程序时没有切换成英式标点,16进制数未加“H”符号,做字除法运算时忘记将DX清零而导致“Divide Overflow”。
这些错误都在汇编调试过程中得到改正。
在接下来的上机课程中,我们按照老师的要求对改程序进行了进一步设计——对从键盘输入的数据进行冒泡排序。
这个算法程序较为复杂,为了使程序能够更加简洁明了,我对其进行了模块化设计,将输入、输出、冒泡排序等功能分离出来,用子程序一一实现。
由于键盘输入的数据并不能简单的从位数来判定输入输出,我设定将Space作为分隔符,而结束输入时按Enter键。
为了防止无用输入和输出数据时遗漏“0”,引入了首位符号标志来进行判定。
对算法进行模块化设计使得实现各功能时无需多重循环,原数据和排序后数据的输出都可由OUTPUT子程序实现,而最大值、最小值和平均值等都可以由ONE子程序实现单个数据的输出,极大的减少了算法的重复。
在这一阶段,我也遇到了一些困难难,例如在输入完数据回车后程序显示输入错误,经过排查才发现在一2号DOS功能调用时,只写了功能号而忘记“INT 21H”,导致数据无法正常显示。
还有诸如子程序结束时没加返回指令RET,命名过程名时与关键字重复,更改过程名后忘记修改跳转指令等等。
在发现错误和改正错误的过程中增强了我对汇编语言的掌握程度,对算法设计有了更深的了解。
接下来,我还对该算法程序进行了进一步优化,包括数据对齐,出错提示和进行有符号数的排序。
为了实现数据对齐,我增加了CRLF子程序,方便实现回车换行功能。
而为了在输入不合法时,进行错误提示,我定义了出错标志。
该算法可以对-32768---32767之间的整数进行冒泡排序,为了实现这一功能,我使用了符号标志进行判定,1为负数,0为正数。
在上机实验过程中,我对各条语句的含义都有了更深的理解,编写程序和独立解决问题的能力都得到了加强。
与此同时,我也认识到自己还有诸多不足,例如程序设计不够简洁,修改算法时往往不能前后兼顾,编写程序不够审慎等等,这些都是我在今后的日子里需要进一步学习和掌握的。
[文档可能无法思考全面,请浏览后下载,另外祝您生活愉快,工作顺利,万事如意!
]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 实现 整数 冒泡 排序