HCS12 / 9s12 cpu中的冒泡排序错误地没有内存

时间:2014-07-18 17:13:49

标签: assembly

我正在使用CodeWorrior为9S12 cpu编写冒泡排序。

我已经编写了下面的代码并且正确地交换了所有字节,但是当我运行代码时它给了我没有内存错误[521:1]我必须一次又一次按F5直到结束。

MY_EXTENDED_RAM: SECTION
; Insert here your data definition. For demonstration, temp_byte is used.
;temp_byte:  DS.B   1

flag:  DS.B   1
output_data: DS.B 32
output_data_end:

; code section
MyCode:     SECTION
; this assembly routine is called by the C/C++ application
asm_main:



            ldx #input_data
            ldy #output_data
back:       ldaa 0,x
            staa 0,y
            inx
            iny
            cpx #input_data_end
            bne back
next_pass:  ldaa #$0
            staa flag
            ldx  #output_data    ;Load the X register with the start of the output_data buffer using its label 
next:       ldaa 0,x
            cmpa 1,x 
            blt  notnow
            ldab 1,x
            stab 0,x
            staa 1,x
            ldaa #$1
            staa flag
notnow:     inx
            cpx #output_data_end 
            bne next
            tst flag
            bne next_pass

            swi                   

input_data:  dc.b $15, $C7, $18, $15, $A0, $21, $23, $D5, $27, $0A, $C5, $C8, $A2, $CC, $AB, $A2
             dc.b $A5, $A8, $D2, $13, $17, $B3, $C4, $14, $AA, $AD, $15, $AE, $A2, $A5, $C1, $C2 

input_data_end:

1 个答案:

答案 0 :(得分:0)

您的代码中有一个错误的错误。您的output_data数组有32个元素,但只有31对连续的元素。你的内部循环比较了32对元素,从偏移量0和1开始,到偏移量31和32结束。最后一次比较失败,因为偏移量32超出了output_data数组的末尾。