Как найти минимальное значение со знаком в массиве в сборке - PullRequest
2 голосов
/ 30 мая 2019

Я пытаюсь сделать программу сортировки выбора в сборке, но я застрял, как найти минимальное число со знаком

я новичок в сборке, я выучил только условные и безусловные переходы и подпрограммы

У меня есть задание выбора вида массива чисел со знаком. Я пишу код, он находит минимальное число, но после дальнейшего сравнения он сохраняет большее число

[org 0x0100] 
          jmp  start 

data:          dw   -1,-7,0,-4
temp:          dw 0

start:
    mov bx,0
    mov cx,4
    mov ax,[data+bx]
h1;
    cmp ax,[data+bx+2]
    jnle l1 

    add bx,2
    cmp bx,6
    jne h1




l1:
    mov dx,[data+bx+2]
    mov [temp],dx
    add bx,2
    cmp bx,6
    jne h1

    mov  ax, 0x4c00         
        int  0x21

Я ожидаю, что после завершения мой программный массив будет отсортирован в соответствии с алгоритмом сортировки выбора.

1 Ответ

2 голосов
/ 30 мая 2019

Ваш алгоритм не имеет особого смысла.Ваш текущий код будет соответствовать примерно так в C:

int min = 0;
for (int i = 0; i < 3; i++) {
    if (data[i] > data[i+1]) {
        min = data[i+1];
    }
}

Обратите внимание, что при сравнении не учитывается текущее значение min.Он заботится только о разнице между смежными элементами в массиве (и эти элементы не перемещаются в цикле).


То, что вы должны делать, выглядит примерно так:

int min = data[0];
for (int i = 1; i < 4; i++) {
    if (data[i] < min) {
        min = data[i];
    }
}

Вам должно быть достаточно просто перевести это в сборку.

...