说我有一个数组,定义如下:
array DW 1,1,3,0,3,3,4,4,-1
该数组以-1终止,我如何能够基于该对中的第一个数字以降序对对数组进行排序(如果第一个数字相同,则按第二个数字进行排序) :
4,4; 3、3; 3,0; 1,1;
答案 0 :(得分:1)
array DW 1,1, 3,0, 3,3, 4,4, -1
每对单词大小的数字中的第一个数字对于您的任务来说是最重要的。
这些对中的每对都可以看作是dword,但是在x86(小尾数)上,第一个单词的有效度最低。这与您所需要的相反。如果您暂时交换了该怎么办?然后,您可以将数组按普通双字排序。
这可能是 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排序算法中执行这些交换前和交换后操作 的解决方案同样容易。