我试图在汇编中制作选择排序程序,但我坚持如何找到最小签名数
我是汇编语言的初学者,我学会了有条件和无条件的跳转和子例程
我分配了一组带符号的数字,我编写了代码,找到了最小的数字,但经过进一步比较,它存储了更大的数字
[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
我希望程序数组终止后,将根据选择排序算法进行排序。
答案 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];
}
}
您应该足够简单地将其转换为程序集。