如何在程序集中的数组中查找最小符号值

时间:2019-05-30 11:21:59

标签: assembly x86-16

我试图在汇编中制作选择排序程序,但我坚持如何找到最小签名数

我是汇编语言的初学者,我学会了有条件和无条件的跳转和子例程

我分配了一组带符号的数字,我编写了代码,找到了最小的数字,但经过进一步比较,它存储了更大的数字

[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 个答案:

答案 0 :(得分:2)

您的算法没有多大意义。您当前的代码将与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];
    }
}

您应该足够简单地将其转换为程序集。