编程论坛's Archiver

mengfanzhen1 发表于 2007-7-3 21:58

冒泡排序,要求数据从键盘输入

冒泡排序,要求数据从键盘输入

mengfanzhen1 发表于 2007-7-3 21:59

<P>这是老师布置得题,大家帮以下忙<BR></P>

菜鸟上路 发表于 2007-7-4 09:10

首先把输入的数据存入一数组,然后对数组排序

herbert_1987 发表于 2007-7-4 17:34

嗯,算法很简单,楼主要自己动手做才会有进步的

aipb2007 发表于 2007-7-4 17:35

写来看看<br>让我见识下汇编怎么写排序!<br>

herbert_1987 发表于 2007-7-4 17:57

<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>

魔城侠客 发表于 2007-7-4 21:07

其实排序还是简单的<BR>主要是把输出的字符转换成数据保存起来比较麻烦

jyll86 发表于 2007-7-4 21:12

网上都有~!

魔城侠客 发表于 2007-7-4 21:22

<P>输入的数据以空格为标记,表示一个新的数开始<BR>将AX置0,一个新的数据输入的第一个字符转换为十进制后,将AX乘以10加以转换后的十进制保存在AX中,依次保存以后的几位数,遇到空格就表示这个数结束,将AX的数据保存到内存中<BR>将全部数据保存完后,就可以利用上面的排序进行冒泡排序<BR>如果还要将排好的数据输出,还要将每个数的每位转换 为ASCII码一个个输出</P>

mengfanzhen1 发表于 2007-7-4 22:21

谢谢大家了啊,用了一下午的时间把这个问题给解决啦.嘎嘎~~~[em05]

zboy 发表于 2007-7-7 23:23

好的 顶一个啊

zhulei1978 发表于 2007-7-14 10:44

(转载)一个汇编的冒泡排序程序:<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]

deeing 发表于 2008-4-28 22:41

??

[tk09] 你为什么又不把你写好的代码摆上来共享一下呢?

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.