Как отсортировать массив на основе пар в сборке 8086 - PullRequest
0 голосов
/ 21 февраля 2019

Скажем, у меня есть массив, определенный как:

array DW 1,1,3,0,3,3,4,4,-1 

Массив оканчивается на -1, как бы я мог отсортировать массив в парах в порядке убывания на основе первого числа в паре(если первое число совпадает, то оно сортируется по второму номеру) следующим образом:

4, 4;3, 3;3, 0;1, 1;

1 Ответ

0 голосов
/ 21 февраля 2019
array DW 1,1, 3,0, 3,3, 4,4, -1

Первое число в каждой паре чисел размером с слово является наиболее значимым для вашей задачи.
Каждая из этих пар может рассматриваться как меч, но на x86 (малоendian) первое слово будет наименее значимым.Это просто противоположность того, что вам нужно.Что если вы временно поменялись местами?Затем вы можете отсортировать массив как обычные слова.

  1. Поменять
  2. Сортировать эти слова как обычно.(Осторожно, терминатор по-прежнему слово )
  3. Swap.

Это может быть процедура swap (32-разрядная):

Swap:
    mov ebx, array
    jmp First
Next:
    rol dword [ebx], 16
    add ebx, 4
First:
    cmp word [ebx], -1
    jne Next
    ret

Это может быть процедура swap (16-битная):

Swap:
    mov  bx, array
    jmp  First
Next:
    xchg ax, [bx+2]
    mov  [bx], ax
    add  bx, 4
First:
    mov  ax, [bx]
    cmp  ax, -1
    jne  Next
    ret

Решение, в котором вы выполняете эти операции до и после замены в алгоритме сортировки меча было бы так же просто.

...