冒泡排序,要求数据从键盘输入
冒泡排序,要求数据从键盘输入 <P>这是老师布置得题,大家帮以下忙<BR></P> 首先把输入的数据存入一数组,然后对数组排序 嗯,算法很简单,楼主要自己动手做才会有进步的 写来看看<br>让我见识下汇编怎么写排序!<br> <P>;code by lys <BR> assume cs:codesg,ds:datasg,ss:stack</P><P>datasg segment<BR> s dw 1,3,8,5,-1,2,7,9,4,6<BR> datasg ends</P>
<P>stack segment<BR> dw 0,0,0,0,0,0<BR>stack ends</P>
<P>codesg segment<BR>start: mov ax,datasg<BR> mov ds,ax<BR> mov ax,stack<BR> mov ss,ax<BR> mov sp,12<BR> mov cx,LENGTHOF s -1</P>
<P> L1: push cx<BR> mov bx,0<BR> mov cx,LENGTHOF s -1 ;这里cx=字符个数-1 !<BR> <BR> L2: <BR> mov ax,[bx]<BR> cmp ax,[bx+2]<BR> jle C1 ;有符号数用g,l 无符号数用a,b<BR> xchg ax,[bx+2]<BR> mov [bx],ax<BR> <BR> C1: <BR> add bx,2<BR> loop L2<BR> pop cx<BR> loop L1<BR> mov ax,4c00h<BR> int 21h<BR>codesg ends<BR>end start</P>
<P>转载的哈, 你慢慢看...[em02]</P> 其实排序还是简单的<BR>主要是把输出的字符转换成数据保存起来比较麻烦 网上都有~! <P>输入的数据以空格为标记,表示一个新的数开始<BR>将AX置0,一个新的数据输入的第一个字符转换为十进制后,将AX乘以10加以转换后的十进制保存在AX中,依次保存以后的几位数,遇到空格就表示这个数结束,将AX的数据保存到内存中<BR>将全部数据保存完后,就可以利用上面的排序进行冒泡排序<BR>如果还要将排好的数据输出,还要将每个数的每位转换 为ASCII码一个个输出</P> 谢谢大家了啊,用了一下午的时间把这个问题给解决啦.嘎嘎~~~[em05] 好的 顶一个啊 (转载)一个汇编的冒泡排序程序:<br>ORG 00H 程序开始地址<br>MOV R1,#20H 将地址20保存到寄存器R1<br>MOV R2,#7 将常数7保存到寄存器R2,这里是总循环次数<br>PRE1: <br> CJNE R2,#0,PRE2 比较R2中的数,如果和0不相等,转到PRE2<br> SJMP LOOP2 如果相等,转到LOOP2,大循环结束<br>PRE2: <br> MOV R3,R2 将R2中的值赋给R3寄存器<br>START: <br> MOV A,@R1 将R1中间接寻址的值赋到累加寄存器中<br> INC R1 R1自增1<br> DEC R3 R3自减1<br> CJNE A,@R1,LOOP1 比较累加寄存器中的值和R1间接寻址的值,不相等转LOOP1<br> SJMP LOOP3 相等转LOOP3<br>LOOP1: <br> JC LOOP3 如果累加寄存器的值比R1间接寻址的值小,转LOOP3<br> XCH A,R4 如果大,交换两者的值,用R4做临时存放<br> XCH R4,@R<br> XCH R4,A<br> SJMP LOOP3 交换结束,转LOOP3<br>LOOP3: <br> CJNE R3,#0,START 比较R3和0,如果不相等,转START<br> DEC R2 如果相等,R2自减1<br> SJMP PRE1 跳转到PRE1<br>LOOP2: <br> END 程序结束<br>
[align=right][color=#000066][此贴子已经被作者于2007-7-17 8:15:56编辑过][/color][/align]
??
[tk09] 你为什么又不把你写好的代码摆上来共享一下呢?页:
[1]
