汇编冒泡法排序_第1页
汇编冒泡法排序_第2页
汇编冒泡法排序_第3页
汇编冒泡法排序_第4页
汇编冒泡法排序_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 汇编实验报告实验题目:从键盘输入任意5个2位有符号十进制数,采用“冒泡法”进行升序排序,输出排序后的结果,并输出排序次数。实验设计:实验要求用16位机的汇编语言完成,键盘上输入的的数据最终都会以ASCII码形式接受,输出也要求用ASCII码,因而我决定设计专门负责输入和输出的两个子程序。但是由于要求输入的是有符号的而且是长度不一定不确定的十进制数,用一个子程序直接在输入时转换成二进制会比较麻烦,因而决定可以先以字符串的形式接受来自用户的数据,这样可以以最自由的形式接受数据,不仅数据长度问题可以解决,带不带+-符号也可以识别,而且方便查错。排序的主要部分是比较简单的,学C的时候已经了解,况且数

2、据结构课又重复了一遍,因而本次实验主要需要解决的还是输入输出、以及数据的转化问题。我的程序结构比较简单,主要包含几个子程序:GET:调用10号模块接收一串字符,放进缓存dataEXDTB:解析缓存中的符号数据,转化为二进制并存入数组ansEXBTD:对从BX传过来的二进制数解析,并在屏幕上输出相应的十进制数,无运算结果程序:DATASSEGMENTDATADB21DUP($)ANSDW10DUP(0)TESDBRUNHRER,$LENDW0TMPDW0SIGDW00HSTADW00H;STAANSSTAISDIGENTDB0DH,0AH,$RNMDBREAD5DIGITALS,0AH,0DH,

3、$PRITDBPAIXU:,0AH,0DH,$FINSHDBNEWORDER:,$EORRDBINPUTERROR!,0AH,0DH,$CISHUDBEXCHANGETIME:,0DH,0AH,$CISDW0EXITDBENTERANUMBERTOEXIT,0AH,0DH,$DATASENDSSTACKSEGMENTTOPEDW300HDUP(0)STACKENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSTART:;先跳过写在开头的子程序MOVAX,DATASMOVDS,AXMOVAX,STACKMOVSS,AXMOVSP,00HJMPSART

4、;AH=09OUPUTAH=10INPUT,前面注意有两个字节没用从ds:dx+2开始才是;第一个是输入及字符数ENTEPROC;ENTEDISPLAY/NONTHESCREENPUSHAXPUSHDXMOVAX,OFFSETENTMOVDX,AXMOVAH,09HINT21HPOPDXPOPAXRETENTEENDPGETPROC;PROCGETREADATWOBITDIGITALFROMUSCERPUSHAX;DXHASADDRESSPUSHDXMOVDX,OFFSETDATAMOVAH,0AH;GETALINEOFNUMBERINT21H;CALLENTEPOPDXPOPAXRETGET

5、ENDPEXDTBPROC;PROCEXCHANGESIGNEDDIGITALTOBINARYPUSHAXPUSHBXPUSHCXPUSHDX;USEDXTOSTOREANS;ANSSTAHASRESULTXORDX,DXXORCX,CXMOVBX,OFFSETDATAINCBX;DS:DX+1ISTHENUMBEROFINPUTEDCHARMOVCL,BX;clHASLENGTHXORCH,CHINCBX;NOWBXCOMETOFIRSTCHARINPUTEDMOVAL,BXCMPAL,-;TOCHECKIFITISSIGNJNZPOST;WITHOUT-,THATWILLBEPOSTIVE

6、MOVWORDPTRSIG,0001H;SETSIG0001HIFNEGETIVEJMPSIGNEDPOST:MOVSIG,WORDPTR0000H;SETPOSTIVECMPAL,+;IFITHAS+,IGNOREITJNEPASSSIGNED:INCBXSUBCX,01HJMPSTLOP;PASSTHESIGN+-PASS:;DIRECTLYTONUMBERSCMPAL,0;IFITISNUMBERJLNOTHINGCMPAL,9JGNOTHINGMOVDL,ALSUBDL,0CMPCL,1JEPOSTYSUBCX,01HINCBXSTLOP:MAINLOOP:MOVAL,BXMOVAL,

7、BXSUBAL,0JSNOTHINGCMPAL,09HJGNOTHINGMOVDH,DLSHLDH,01HSHLDH,01HADDDL,DHSHLDL,01HADDDL,ALINCBXLOOPMAINLOOPTESTSIG,0001H;JUMPIFAL-00,;SHIFTDLTOTIMES10;SHIFT2TIMES4;DL=DL*4+DL=5*DL;DL=5*DL*2=10*DLJZPOSTY;JUMPTOAVOID-DXNEGDLPOSTY:MOVBX,OFFSETANSADDBX,STAMOVAL,DLCBWMOVBX,AXJMPDONENOTHING:;IFNOTNUMBER,RETU

8、RN0MOVDX,OFFSETEORRMOVAH,09HINT21HMOVBX,OFFSETANSADDBX,STAMOVBX,WORDPTR0001HDONE:CALLENTEPOPDXPOPCXPOPBXPOPAXRETEXDTBENDPEXBTDPROC;PROCEXCHANGEBINARYNUMBERINBXTODIGITALPUSHAXPUSHBXPUSHCXPUSHDXCALLENTE;DISPLAY/NTESTBX,8000HJZPOSTVMOVDL,-MOVAH,02HINT21HNEGBX;EXCHANGETOPOSTIVEPOSTV:MOVCX,1111HPUSHCXMOV

9、AX,BXCWDMOVBX,10MLOOP:DIVBX;DIV10PUSHDX;PUSHBXMOD10CWDADDAX,00HJNZMLOOPDSLOOP:;DISPLAYNUMPOPDXCMPDX,1111HJEFINISHADDDL,0MOVAH,02HINT21HJMPDSLOOPFINISH:;CALLENTEPOPDXPOPCXPOPBXPOPAXRETEXBTDENDPSART:MOVDX,OFFSETPRITMOVAH,09HINT21HMOVDX,OFFSETRNMMOVAH,09INT21HMOVCX,05HMOVWORDPTRSTA,0000HGETLOOP:CALLGET

10、;读入符号数CALLEXDTB;转为二进制ADDWORDPTRSTA,0002H;存入数组ansLOOPGETLOOPMOVWORDPTRCIS,00HARRAGE:;排序MOVCX,05HSUBCX,0001HMOVBX,OFFSETANSADDBX,CXADDBX,CXLOOP1:MOVTMP,CXPUSHBXLOOP2:MOVAX,WORDPTRBXSUBBX,0002HMOVDX,WORDPTRBXCMPAX,DXJNSBIGGERINCWORDPTRCISMOVWORDPTRBX,AXMOV02HBX,DXBIGGER:SUBWORDPTRTMP,0001HJNZLOOP2POPBX

11、LOOPLOOP1WRITE:;输出排好序的数MOVDX,OFFSETFINSHMOVAH,09HINT21HMOVCX,05MOVWORDPTRSTA,0000HMOVBX,OFFSETANSLOOPWR:PUSHBXADDBX,STAMOVDX,BXMOVBX,DXCALLEXBTDPOPBXADDWORDPTRSTA,0002HLOOPLOOPWRCALLENTEMOVDX,OFFSETCISHUMOVAH,09HINT21HMOVBX,CISCALLEXBTDCALLENTEMOVDX,OFFSETEXITMOVAH,09HINT21HCALLGETMOVAX,4C00HINT21HC

12、ODESENDSENDSTART问题及调试:主要问题是数据的转化,当我们用c写程序时,直接可以用%开头的格式命令进行特定类型的数据输入输出,但是用汇编时就没有那么好办了,输入的时候要识别数据,输出也要转化数据。而且如果要求做好一个程序,需要有充分的考虑。比如输入数据21,人的世界里我们可以识别多种书写方式,在程序中,不能要求每一种都能识别,但无疑,识别得多一点,程序也会好用一点,兼容性好一点。我对这程序的要求不多,他要能识别这几种格式:21、+21、021、0021;对于数据-21,这几种格式要识别:-21、-021、-0021。另外对于非法的输入要能识别并给出处理,我对这种错误的处理是,给出提示,并把错误数据设置为0标志,这样的考虑是由于如果你的数据较多,前面的都对了,突然误输了一个空数(没有数字,直接回车),这时如果程序跳出,功夫就白费了,但是忽略次数排好序后,只要再将错数插入即可。对于这些要求的实现,也是使得程序稍长的原因。另外这样要求就会使程序中加入许多跳转指令,增加一些困难,容易出错,但是人工耐心检查一下,也基本没有什么问题。此次出现的问题还有就是有些指令还不太熟

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论