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