汇编语言用“冒泡法”排序

时间: 发布人:vswoyk

汇编语言用“冒泡法”排序

已解决问题

谷歌vswoyk用户在提交了关于“武汉大学汇编语言用“冒泡法”排序”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-13T02:10:47。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,你无异于雪中送炭,让我感激涕零 !

希望以下的回答,能够帮助你。

第1个回答

用户名:WS来自LY54755612331215问答2  

楼主写了那么多,而且格些兰行武式还有差别,不知道具体是几个
下面用10个举例

DATA**GMENT
加陆加液DATDB20,-10,80,-5,-70,-9,125,-15,0,40
COUNTDB10,10
DATAENDS
;
CODE**GMENT
ASSUME看方牛山足CS:CODE,未DS:DATA,ES:DATA
START:MOVAX,DATA
千溶MOVDS,AX
MOVES,AX
MOVBL,1
LP1:CMPBL,0
JELP4
XORBL,BL
MOVCL,CO村药UNT
DECCL

pushcx
LEADI,DAT
LP2:MOVAL,[DI]
CMP团夫香安纸唱分哥伟普AL,[DI+1]
JLELP3
XCh**G[DI+1],AL
MO岩地五财庆末财想抱激V[DI],AL
MOVBL,1
LP3:INCDI
LOOPLP2
popcx
movcount,cl
JMPLP1

LP4:MOVCL,10
LEAD征山景边I,DAT
SC:MOVAX,0
MOVBh**,2
MOVAL,[DI];取数
CMPAL,0;如果是正数则跳
JGENEXT
NEGAL期妒门校祖后晶;如果是负数先将al中的负数取补转成对应的正数
pushax
MOVAh**,02h**;同时显示负晶空海济挥构留江经数的标记'-'
M三杆海附酒化川OVDL,'-';注意这个时候ax的值会因为21h中断的调用而改变:)所以先要保存起来
INT21h**;就是说int21h中断将会有一个返回值
popax;以前我也出现过一样的问题,后来调试的时候才发现原来某些中断之后ax会改变
NEXT:XORAh**,Ah**
DIVCOUNT+1;除似快如者染关胶以10取十位
MOVDh**,Ah**;ah是余数al是商
ADDAL,30h**
MO再井心投劳线协VDL,AL
MOVAh**,02h**
INT21h**;显示十位上的南条原甲初类将行当景数值(如果只是两位数的话)
MOVAL,Dh**
XORAh**,Ah**
;DIV既按位进脱调COUNT+1;这为什便背到治蛋观随么还要除以10?如果说是处理3位数的话,应该把商除10而不是把余数除10
ADDAX,3030h**
MOVDL,A标合守个余犯湖L;所以最好在显示时判断是否是大于100或者小于100再根据判断结果来处理DIV
;MOVBL,Ah**;Ah**才是所要的,故不应该再打印AL(商)值了,总之这里在处理位数的显示时有点问题

;在这里,如果是2位数可以正确显示如果是3位则不能,所以最后的125显成了<5
OUTP:MOVAh**,2
INT21h**
DECBh**
JZXT
MOVDL,BL;显示个位数
JMPOUTP
XT:DECCL
JZDONE
INCDI
JMPSC
DONE:MOVAh**,4Ch**
INT21h**
CODEENDS
ENDSTART