我正在使用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:
答案 0 :(得分:0)
您的代码中有一个错误的错误。您的output_data
数组有32个元素,但只有31对连续的元素。你的内部循环比较了32对元素,从偏移量0和1开始,到偏移量31和32结束。最后一次比较失败,因为偏移量32超出了output_data
数组的末尾。