ZKX's LAB

汇编语言冒泡排序原理 关于汇编语言冒泡排序问题

2021-04-26知识5

如何使用汇编语言实现冒泡排序 最低0.27元开通文库会员,查看完整内容>;原发布者:TEAGLEAOYOU用汇编语言实现实现冒泡排序,并将排序后的数输出DATASSEGMENTAdw100,344,3435,43433,3438,343,134,80,8,1000,65535,54,45N=$-A;计算数字所占的字节数DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVSI,0;SI遍历数字;前一个数的地址MOVCX,N/2-1;设置循环次数,M(M=N/2)个数需要,循环M-1次CALLBUBBLE;调用BUBBLE将原来的数排序;输出排序后的数MOVCX,N/2;循环M次输出排序后的M个数MOVSI,0;SI遍历排序后的数MOVDI,0;用DI记录数字的位数MOVBP,N+5;BP用于遍历存储的转化后的字符的位置SHOW:PUSHCX;循环次数入栈MOVDX,0;由于将要进行16位除需e799bee5baa6e59b9ee7ad9431333433623762要置高16位为0MOVAX,[SI];低16位为排序后的数CALLDTOC;调用DTOC将十进制数转换为字符串CALLSHOW_STR;调用SHOW_STR将一个数转化得到的字符串输出ADDSI,2;下一个数POPCX;循环次数出栈栈LOOPSHOWMOVAH,4CHINT21H;冒泡排序BUBBLEPROCL1:PUSHCX;将循环次数入栈LEASI,A;SI遍历DATAS数据段的数字L2:MOVAX,A[SI];将前一个数存于AXCMPAX,A[SI+2];比较前后两个数JBENEXT

本人汇编小菜鸟,求大神汇编语言中,我写的冒泡排序程序为什么不能排序十位数以上的数? “di=?不知道,[di]传送到 bl、dl的是什么?bx的高位“bh=?也不知道!程序看着有点乱。给你一个子程序,你研究下:单个字符串内部的排序(冒泡排序)-其实也适用于字节数据排序sort proc near串长度置入cx,串(或数组)首地址置入 sipush axpush cxpush dxpush sipush dipushfpush cxpop dxdec dxsortl1:mov cx,dxmov di,sisortl2:mov al,[di+1]cmp al,[di]ja@sortnext;从大到小还是从小到大,改这句即可,或 jb/jg/jlxchg al,[di]mov[di+1],alsortnext:inc diloop@sortl2dec dxjnz@sortl1popfpop dipop sipop dxpop cxpop axretsort endp别看有那么多压栈、弹栈操作,关键的代码很少!这个代码是最优的。把它研究透。

汇编语言,冒泡排序问题 data segment;定义数据段org 2000arr db 5,2,1,0,2,3,8,6,5,9count equ$-arrdata endscode segment;定义代码段assume cs:code,ds:datastart:初始化待排序列lea si,arrmov dx,countFoaming:不足两个元素,已有序sub dx,1jle endfoamingxor bx,bxmov cx,dxFoaminglop:开始一趟排序mov ax,[si][bx]cmp ax,1[si][bx]jle next逆序则交换swap:push axmov ax,1[si][bx]mov[si][bx],axpop axmov 1[si][bx],axnext:继续本趟排序inc bxloop Foaminglop开始下趟排序jmp Foamingendfoaming:结束排序mov ax,4c00hint 21hcode ends;结束程序

#汇编语言冒泡排序原理

随机阅读

qrcode
访问手机版