Пузырьковая сортировка языка ассемблера

Мне нужно отсортировать массив, заданный ARY1, отсортировать его в функции SORT, а затем сохранить отсортированный массив в ARY1S. Я решил не включать ARY2, но он будет работать идентично. SORT должен работать как для ARY1, так и для ARY2. Я взял алгоритм пузырьковой сортировки (С++) и изо всех сил пытался преобразовать его в сборку, но столкнулся с ошибками.

Мой 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

Кроме того, если кто-то может помочь со строкой кода, которую я прокомментировал, она не работает. Подсказка синтаксической ошибки.


person GiBiT 09    schedule 25.10.2013    source источник


Ответы (2)


CMP (A1,D2),(A1,D1) //это не компиляция/неправильный синтаксис

Я предлагаю вам загрузить и использовать Справочное руководство программиста M68000.
В нем вы обнаружите, что единственно допустимой формой CMP является CMP <ea>,Dn. Другими словами, вам придется сначала переместить значение в (A1, D1) в D-регистр, а затем сравнить его с (A1, D2).

person Michael    schedule 25.10.2013
comment
Оо спасибо что справочник в два раза лучше книги - person GiBiT 09; 25.10.2013
comment
Кроме того, если я перемещаю все значения в A0, то в A1 нет ничего, кроме хранилища, поэтому мне нужно переместить A0 в A1, а затем отсортировать или отсортировать его в A0, а затем переместить в A1? - person GiBiT 09; 25.10.2013

Попробуйте это вместо этого:

  CMP.B A1,D2

  CMP.B A1,D1
person user5364798    schedule 22.09.2015