如何在8086汇编中基于对对数组进行排序

时间:2019-02-21 10:09:22

标签: arrays sorting assembly x86-16

说我有一个数组,定义如下:

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

该数组以-1终止,我如何能够基于该对中的第一个数字以降序对对数组进行排序(如果第一个数字相同,则按第二个数字进行排序) :

  

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

1 个答案:

答案 0 :(得分:1)

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

每对单词大小的数字中的第一个数字对于您的任务来说是最重要的。
这些对中的每对都可以看作是dword,但是在x86(小尾数)上,第一个单词的有效度最低。这与您所需要的相反。如果您暂时交换了该怎么办?然后,您可以将数组按普通双字排序。

  1. 交换
  2. 通常将这些单词排序。 (请注意,终止符仍然是单词
  3. 交换。

这可能是 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

在dword排序算法中执行这些交换前和交换后操作 的解决方案同样容易。