汇编语言实现冒泡排序(一).docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
;用汇编语言实现实现冒泡排序,并将排序后的数输出 DATASSEGMENT A dw 100,344,3435,43433,3438,343,134,80,8,1000,65535,54,45 N=$-A ;计算数字所占的字节数 DATASENDS CODESSEGMENT ASSUMECS:CODES,DS:DATAS START:MOV AX,DATAS MOV DS,AX MOV SI,0  ;SI遍历数字  ;前一个数的地址 MOV CX,N/ 2-1  ;设置循环次数,  M(M=N/2) 个数需要,循环  M-1次 CALL BUBBLE;调用 BUBBLE将原来的数排序 ;输出排序后的数 MOV CX,N/ 2 ;循环 M 次输出排序后的 M个数 MOV SI,0  ;SI遍历排序后的数 MOV DI,0  ;用 DI记录数字的位数 MOV BP,N+5;BP用于遍历存储的转化后的字符的位置 SHOW:PUSHCX  ;循环次数入栈 MOV DX,0  ;由于将要进行  16位除需要置高  16位为 0 MOV AX,[SI]  ;低16位为排序后的数 CALL DTOC  ;调用 DTOC将十进制数转换为字符串 CALL SHOW_STR;调用 SHOW_STR将一个数转化得到的字符串输出 ADD SI,2 ;下一个数 POP CX ;循环次数出栈栈 LOOP SHOW MOV AH,4CH INT 21H ;冒泡排序 BUBBLE PROC L1: PUSHCX  ;将循环次数入栈 LEASI,A  ;SI遍历 DATAS数据段的数字 L2: MOV AX,A[SI]  ;将前一个数存于  AX CMP AX,A[SI+2] ;比较前后两个数 JBE NEXT ;如果前一个数小于或等于后一个数则继续本轮的比较 XCHGAX,A[SI+2];否则,交换前后两个数的位置 MOV A[SI],AX NEXT:ADD SI,2  ;下一个数 LOOP L2  ;注意内层循环的次数已经确定了 POP CX  ;将循环次数出栈 LOOP L1 RET BUBBLE ENDP  ;下一轮比较 将十进制数转换为字符串并储存起来 DTOC PROC S:MOV CX,10 ;将除数 10,放入 CX中 CALL DIVDW ;调用 DIVDW程序 ADD CL,30H ;把数字转换为 ASCII码,这样就能显示了 MOV DS:[BP],CL ;把ASCII码放到内存中 INC DI ;用 DI记录循环的次数 PUSHAX ;将低 16位入栈 ADD AX,DX ;将高位与低位相加,接着判断是否已经除尽 JZ BACK  ;除尽后返回调用处 POP AX  ;将低 16位出栈 DECBP  ;逆序存放转化后的字符,便于主程序调用  SHOW_STR JMP S BACK:POPAX  ;为了得到正确的  IP值,需要出栈一次 RET DTOC ENDP ;子程序定义开始 ,功能是分离被除数的各个位的数字 ;公式: X/N=int(H/N)*65536+[rem(H/N)*65536+L]/N DIVDW PROC PUSHAX  ;低 16位入栈 MOV AX,DX  ;将高 16位写入 AX, MOV DX,0  ;将高 16位置零 DIV CX  ;将新的数除  10, MOV BX,AX  ;将商 int(H/N) 转移到 BX,默认余数  rem(H/N) 在DX POP AX  ;将低 16位出栈, DIV CX  ;将[rem(H/N)*65536+L]  除10,默认余数在  DX MOV CX,DX  ;将余数转移到  CX MOV DX,BX  ;将商 int(H/N) 转移到 dx,相当于 int(H/N)*65536 RET DIVDW ENDP  ;子程序定义结束 ;实现字符串的输出 SHOW_STR PROC S2:MOV AH,2 ;输出数字转化后的字符串 MOV DL,DS:[BP] INT 21H INC BP  ;顺序输出 DECDI  ;数字的位数减一 JZ OK  ;字符串输出完了就结束 JMP S2  ;否则继续输出 OK:MOV AH,2 MOV DL,0 INT 21H RET SHOW_STR ENDP  ;输出空格 CODESENDS ENDSTART ;实现冒泡排序,并将排序后的数输出 DATASSEGMENT dw 100,344,3435,43433,3438,343,134,80,8,1000,65535,54,45 N=$-A;计算数字所占的字节数 DATASENDS COD

您可能关注的文档

文档评论(0)

183****6506 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档