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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在不使用Assembler循环的情况下对3个变量进行排序?相关的知识,希望对你有一定的参考价值。

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

答案

基本的“3值排序”:

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

以上是关于如何在不使用Assembler循环的情况下对3个变量进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用乘法的情况下对数字进行平方?

如何在不使用 R 中的表的情况下对分类值的实例求和?

如何在不改变原始数组的情况下对数组进行排序?

如何在不使用 Spark SQL 的情况下对 Spark 中的数据帧进行排序?

如何在不使用 GROUP BY 子句的情况下对行进行分组

如何在不使用任何内置高斯函数的情况下对图像进行高斯模糊?