如何在不使用汇编器中的循环的情况下对3个变量进行排序?

时间:2019-03-23 13:37:23

标签: assembly nasm

我想在汇编器中编写一个程序,询问用户3个变量,然后用户将数字写入寄存器(我知道如何写),但是现在我遇到了一个问题:我必须对这3个变量进行排序使用条件/无条件跳转(我不能使用循环)。因此,在我看来,该程序将非常长,因为我必须为每组编写9个比较。您有什么想法可以缩短程序编写时间吗?

1 个答案:

答案 0 :(得分:1)

基本的“三值排序”:

if(a > b) swap(a, b)
if(a > c) swap(a, c)   // a must be the smallest value now
if(b > c) swap(b, c)   // b must be the second smallest value, c must be the biggest value

在32位80x86程序集中(NASM语法):

    cmp eax,ebx
    jna .l1
    xchg eax,ebx
.l1:
    cmp eax,ecx
    jna .l2
    xchg eax,ecx
.l2:
    cmp ebx,ecx
    jna .l3
    xchg ebx,ecx
.l3:
; eax must contain smallest value, ebx the second smallest, ecx the biggest