Как отсортировать 3 переменные без использования циклов в Ассемблере? - PullRequest
0 голосов
/ 23 марта 2019

Я хочу написать программу на ассемблере, которая спрашивает пользователя о 3 переменных, затем пользователь записывает числа в регистры (я знаю, как это записать), но теперь у меня возникла проблема: мне нужно отсортировать эти 3 переменныеиспользуя условные / безусловные переходы (я не могу использовать циклы).Итак, на мой взгляд, эта программа будет очень длинной, потому что мне нужно написать, вероятно, 9 сравнений для каждого набора.У вас есть идеи, как написать эту программу намного короче?

1 Ответ

1 голос
/ 23 марта 2019

Базовая "сортировка по 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
...