Sorting 8051气泡排序问题

Sorting 8051气泡排序问题,sorting,assembly,8051,Sorting,Assembly,8051,我试图在汇编程序8051上编写气泡排序。到目前为止,我已经做到了这一点,它按升序排序,但它也在移动元素,当它结束时,在第一个位置留下一个空格 一步一步地查看执行过程,我注意到SUBB没有改变C的值,这使得指令JC SKIP变得无用 DEFSEG INICIO1,ABSOLUTE SEG INICIO1 JMP INICIO ORG 100H INICIO: MOV R1,#05H EXT: M

我试图在汇编程序8051上编写气泡排序。到目前为止,我已经做到了这一点,它按升序排序,但它也在移动元素,当它结束时,在第一个位置留下一个空格

一步一步地查看执行过程,我注意到SUBB没有改变C的值,这使得指令JC SKIP变得无用

 DEFSEG     INICIO1,ABSOLUTE
            SEG INICIO1
            JMP INICIO

            ORG 100H
    INICIO: MOV R1,#05H  
    EXT: MOV A,R1
            MOV R2,A
            MOV R0,#30H
            MOV A,@R0
    IN: INC R0
            MOV B,@R0
            CLR C
            SUBB A,B 
            JC SKIP
            MOV B,@R0
            DEC R0
            MOV A,@R0
            MOV @R0,B
            INC R0
            MOV @R0,A
    SKIP: DJNZ R2,IN                
            DJNZ R1,EXT
    STOP: SJMP STOP
            JMP FIN
    FIN:
            END
至少,您需要一个等于@R0的值,但是在跳转到SKIP之后,它就不是了

尝试:

注意,初始计数5比要排序的项目数少一个。

SUBB应更改C标志,请再次查看。
 mov r1, #30h

 mov @r1, #33h
 inc r1
 mov @r1, #44h
 inc r1
 mov @r1, #66h
 inc r1
 mov @r1, #22h
 inc r1
 mov @r1, #11h
 inc r1
 mov @r1, #55h

 mov r3, #5
outer:
 mov a, r3
 mov r2, a
 mov r1, #30h
 mov a, @r1
inner:
 inc r1
 clr c
 subb a, @r1
 mov a, @r1
 jc continue
 dec r1
 xch a, @r1
 inc r1
 mov @r1, a
continue:
 djnz r2, inner
 djnz r3, outer