汇编语言Bubblesort

时间:2013-10-25 02:25:43

标签: sorting assembly bubble-sort 68000

我必须对ARY1给出的数组进行排序,在SORT函数中对其进行排序,然后将排序的数组存储到ARY1S中。我选择不包括ARY2,但它会工作相同。 SORT应适用于ARY1和ARY2。我采用了bubblesort算法(C ++)并尽力将其转换为汇编,但我遇到了错误。

我的D0是数组的长度

我的D1将是我

我的D2将是j

D3是临时

这是我的尝试(这不起作用),不仅仅是因为语法问题:

ARY1        DC.B 7       //array size    
            DC.B 56,-5,8,23,-9,18,4 //my array
ARY1S       DS.B 7      //storage size

SORT1       MOVEA.L #ARY1, A0  //moving values into A0               
            MOVEA.L #ARY1S, A1
            MOVE.B (A0)+, D0   //Storing size (7) into D0
            BSR SORT

SORT        CMP.B D0,D1
            BGE DONE

LOOP        CMP.B D0,D2
            BGE INC
            CMP (A1,D2),(A1,D1) //this is not compiling/wrong syntax
            BLE NOTLESS
            MOVE.B (A1,D2),D3
            MOVE.B (A1,D1),(A1,D2)
            MOVE.B D3,(A1,D1)

NOTLESS     ADDQ #1, D2
            BRA LOOP

INC         ADDQ #1, D1
            MOVE.B D1,D2
            BRA SORT

DONE        RTS

此外,如果有人可以帮助我评论的代码行不起作用。提示语法错误。

2 个答案:

答案 0 :(得分:0)

  

CMP(A1,D2),(A1,D1)//这不是编译/错误的语法

我建议您下载并使用the M68000 Programmer's Reference Manual 在其中,您会发现唯一有效的CMP形式是CMP <ea>,Dn。换句话说,您必须先将(A1, D1)处的值移至D - 注册表中,然后将其与(A1, D2)进行比较。

答案 1 :(得分:0)

请改为尝试:

  CMP.B A1,D2

  CMP.B A1,D1