设有3个单字节无符号数存放在从BUFFER开始的缓冲区中 编写一个将它们按从大到小的顺序重新
问题详情
设有3个单字节无符号数存放在从BUFFER开始的缓冲区中,编写一个将它们按从大到小的顺序重新排列的程序。
请帮忙给出正确答案和分析,谢谢!
参考答案
正确答案:设数据段只有3个要排序的数据定义如下:;程序名:PROGRAM6-2.ASM;功能:实现3个无符号数由大到小排序DATAS SEGMENTBUFFER DB 87234123DATAS ENDS有多种方法实现3个数的排序这里采用交换法先得到3个数中最大的数然后再得到剩下两个数中的较大数。为了方便先把要排序的3个数送到3个存储器中。源程序如下:CODES SEGMENTASSUME CS:CODEDS:DATASSTART:MOV AXDATASMOV DSAXMOV SIOFFSET BUFFERMOV AL[sI] ;(1)把3个数送到寄存器中MOV BL[sI+1]MOV CL[SI+2]CMP ALBL ;(2)排序JAE NEXTlXCHG AL.BLNEXTl:CMP ALCLJAE NEXT2XCHG AL.CLNEXT2:CMP BLCLJAE NEXT3XCHG BL.CLM。EXT3:MOV [sI]AL ;(3)按大到小依次存回缓冲区MOV [SI+1]BLMOV [sI+2]cLMOV AX.4C00HINT 2l HCOI)ES ENDSFND START在上述的排序段中含有3个分支。上述程序先把3个要排序的数送到3个寄存器中。当然也可以不这样做而是直接在内存中交换排序。试把下面的程序段与上述程序中的(2)、(3)步做比较。MOV SI.0FFSET BUFFERMOV AL[SI]cMP AL[sI+1]JAE NEXTlxcHG AL[sI+1]MOV [sI]ALNExTl:cMP AL[sI+2]JAE NEXT2XCHG AL[sI+2]MOV [SI]ALNEXT2:MOV AL[SI+1]cMP AL[sI+2]JAE NE:XT3XCHG AL[SI+2]MOV [SI+1]ALNEXT3:…
设数据段只有3个要排序的数据,定义如下:;程序名:PROGRAM6-2.ASM;功能:实现3个无符号数由大到小排序DATASSEGMENTBUFFERDB87,234,123DATASENDS有多种方法实现3个数的排序,这里采用交换法,先得到3个数中最大的数,然后再得到剩下两个数中的较大数。为了方便,先把要排序的3个数送到3个存储器中。源程序如下:CODESSEGMENTASSUMECS:CODE,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVSI,OFFSETBUFFERMOVAL,[sI];(1)把3个数送到寄存器中MOVBL,[sI+1]MOVCL,[SI+2]CMPAL,BL;(2)排序JAENEXTlXCHGAL.BLNEXTl:CMPAL,CLJAENEXT2XCHGAL.CLNEXT2:CMPBL,CLJAENEXT3XCHGBL.CLM。EXT3:MOV[sI],AL;(3)按大到小依次存回缓冲区MOV[SI+1],BLMOV[sI+2],cLMOVAX.4C00HINT2lHCOI)ESENDSFNDSTART在上述的排序段中,含有3个分支。上述程序先把3个要排序的数送到3个寄存器中。当然,也可以不这样做,而是直接在内存中交换排序。试把下面的程序段与上述程序中的(2)、(3)步做比较。MOVSI.0FFSETBUFFERMOVAL,[SI]cMPAL,[sI+1]JAENEXTlxcHGAL,[sI+1]MOV[sI],ALNExTl:cMPAL,[sI+2]JAENEXT2XCHGAL,[sI+2]MOV[SI],ALNEXT2:MOVAL,[SI+1]cMPAL,[sI+2]JAENE:XT3XCHGAL,[SI+2]MOV[SI+1],ALNEXT3:…