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

ID:37781682

大小:46.00 KB

页数:5页

时间:2019-05-31

汇编语言实现冒泡排序(一)_第1页
汇编语言实现冒泡排序(一)_第2页
汇编语言实现冒泡排序(一)_第3页
汇编语言实现冒泡排序(一)_第4页
汇编语言实现冒泡排序(一)_第5页
资源描述:

《汇编语言实现冒泡排序(一)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、;用汇编语言实现实现冒泡排序,并将排序后的数输出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将原来的

2、数排序;输出排序后的数MOVCX,N/2;循环M次输出排序后的M个数MOVSI,0;SI遍历排序后的数MOVDI,0;用DI记录数字的位数MOVBP,N+5;BP用于遍历存储的转化后的字符的位置SHOW:PUSHCX;循环次数入栈MOVDX,0;由于将要进行16位除需要置高16位为0MOVAX,[SI];低16位为排序后的数CALLDTOC;调用DTOC将十进制数转换为字符串CALLSHOW_STR;调用SHOW_STR将一个数转化得到的字符串输出ADDSI,2;下一个数POPCX;循环次数出栈栈LOOPSHOWM

3、OVAH,4CHINT21H;冒泡排序BUBBLEPROCL1:PUSHCX;将循环次数入栈LEASI,A;SI遍历DATAS数据段的数字L2:MOVAX,A[SI];将前一个数存于AXCMPAX,A[SI+2];比较前后两个数JBENEXT;如果前一个数小于或等于后一个数则继续本轮的比较XCHGAX,A[SI+2];否则,交换前后两个数的位置MOVA[SI],AXNEXT:ADDSI,2;下一个数LOOPL2;注意内层循环的次数已经确定了POPCX;将循环次数出栈LOOPL1;下一轮比较RETBUBBLEENDP

4、;将十进制数转换为字符串并储存起来DTOCPROCS:MOVCX,10;将除数10,放入CX中CALLDIVDW;调用DIVDW程序ADDCL,30H;把数字转换为ASCII码,这样就能显示了MOVDS:[BP],CL;把ASCII码放到内存中INCDI;用DI记录循环的次数PUSHAX;将低16位入栈ADDAX,DX;将高位与低位相加,接着判断是否已经除尽JZBACK;除尽后返回调用处POPAX;将低16位出栈DECBP;逆序存放转化后的字符,便于主程序调用SHOW_STRJMPSBACK:POPAX;为了得到正

5、确的IP值,需要出栈一次RETDTOCENDP;子程序定义开始,功能是分离被除数的各个位的数字;公式:X/N=int(H/N)*65536+[rem(H/N)*65536+L]/NDIVDWPROCPUSHAX;低16位入栈MOVAX,DX;将高16位写入AX,MOVDX,0;将高16位置零DIVCX;将新的数除10,MOVBX,AX;将商int(H/N)转移到BX,默认余数rem(H/N)在DXPOPAX;将低16位出栈,DIVCX;将[rem(H/N)*65536+L]除10,默认余数在DXMOVCX,DX;将

6、余数转移到CXMOVDX,BX;将商int(H/N)转移到dx,相当于int(H/N)*65536RET;子程序定义结束DIVDWENDP;实现字符串的输出SHOW_STRPROCS2:MOVAH,2;输出数字转化后的字符串MOVDL,DS:[BP]INT21HINCBP;顺序输出DECDI;数字的位数减一JZOK;字符串输出完了就结束JMPS2;否则继续输出OK:MOVAH,2;输出空格MOVDL,0INT21HRETSHOW_STRENDPCODESENDSENDSTART;实现冒泡排序,并将排序后的数输出DA

7、TASSEGMENTAdw100,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次输

8、出排序后的M个数MOVSI,0;SI遍历排序后的数MOVDI,0;用DI记录数字的位数MOVBP,N+5;用于遍历存储的转化后的字符的位置SHOW:PUSHCX;循环次数入栈MOVDX,0;由于将要进行16位除需要置高16位为0MOVAX,[SI];低16位为排序后的数CALLDTOC;调用DTOC将十进制数转换为字符串CALLSHOW_STR;调用SHOW

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
正文描述:

《汇编语言实现冒泡排序(一)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、;用汇编语言实现实现冒泡排序,并将排序后的数输出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将原来的

2、数排序;输出排序后的数MOVCX,N/2;循环M次输出排序后的M个数MOVSI,0;SI遍历排序后的数MOVDI,0;用DI记录数字的位数MOVBP,N+5;BP用于遍历存储的转化后的字符的位置SHOW:PUSHCX;循环次数入栈MOVDX,0;由于将要进行16位除需要置高16位为0MOVAX,[SI];低16位为排序后的数CALLDTOC;调用DTOC将十进制数转换为字符串CALLSHOW_STR;调用SHOW_STR将一个数转化得到的字符串输出ADDSI,2;下一个数POPCX;循环次数出栈栈LOOPSHOWM

3、OVAH,4CHINT21H;冒泡排序BUBBLEPROCL1:PUSHCX;将循环次数入栈LEASI,A;SI遍历DATAS数据段的数字L2:MOVAX,A[SI];将前一个数存于AXCMPAX,A[SI+2];比较前后两个数JBENEXT;如果前一个数小于或等于后一个数则继续本轮的比较XCHGAX,A[SI+2];否则,交换前后两个数的位置MOVA[SI],AXNEXT:ADDSI,2;下一个数LOOPL2;注意内层循环的次数已经确定了POPCX;将循环次数出栈LOOPL1;下一轮比较RETBUBBLEENDP

4、;将十进制数转换为字符串并储存起来DTOCPROCS:MOVCX,10;将除数10,放入CX中CALLDIVDW;调用DIVDW程序ADDCL,30H;把数字转换为ASCII码,这样就能显示了MOVDS:[BP],CL;把ASCII码放到内存中INCDI;用DI记录循环的次数PUSHAX;将低16位入栈ADDAX,DX;将高位与低位相加,接着判断是否已经除尽JZBACK;除尽后返回调用处POPAX;将低16位出栈DECBP;逆序存放转化后的字符,便于主程序调用SHOW_STRJMPSBACK:POPAX;为了得到正

5、确的IP值,需要出栈一次RETDTOCENDP;子程序定义开始,功能是分离被除数的各个位的数字;公式:X/N=int(H/N)*65536+[rem(H/N)*65536+L]/NDIVDWPROCPUSHAX;低16位入栈MOVAX,DX;将高16位写入AX,MOVDX,0;将高16位置零DIVCX;将新的数除10,MOVBX,AX;将商int(H/N)转移到BX,默认余数rem(H/N)在DXPOPAX;将低16位出栈,DIVCX;将[rem(H/N)*65536+L]除10,默认余数在DXMOVCX,DX;将

6、余数转移到CXMOVDX,BX;将商int(H/N)转移到dx,相当于int(H/N)*65536RET;子程序定义结束DIVDWENDP;实现字符串的输出SHOW_STRPROCS2:MOVAH,2;输出数字转化后的字符串MOVDL,DS:[BP]INT21HINCBP;顺序输出DECDI;数字的位数减一JZOK;字符串输出完了就结束JMPS2;否则继续输出OK:MOVAH,2;输出空格MOVDL,0INT21HRETSHOW_STRENDPCODESENDSENDSTART;实现冒泡排序,并将排序后的数输出DA

7、TASSEGMENTAdw100,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次输

8、出排序后的M个数MOVSI,0;SI遍历排序后的数MOVDI,0;用DI记录数字的位数MOVBP,N+5;用于遍历存储的转化后的字符的位置SHOW:PUSHCX;循环次数入栈MOVDX,0;由于将要进行16位除需要置高16位为0MOVAX,[SI];低16位为排序后的数CALLDTOC;调用DTOC将十进制数转换为字符串CALLSHOW_STR;调用SHOW

显示全部收起
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭