【发布时间】:2017-01-03 14:58:59
【问题描述】:
我编写了一个代码来计算给定数组中的最小值,我的想法是获取第一个元素(考虑到它是最小值)并将其与其余元素进行比较,然后交换值以防我发现较小的元素这是我的代码:
array dw 7,4,12,5,1
mov si,00h
mov ax,array[si]
mov cx,5
minimum:
inc si ;find the minimum value
mov dx,array[si]
cmp ax,dx
jb nochange
swap:
xchg ax,dx
nochange:
dec cx
cmp cx,0
JNE minimum
lastcmp: ; to compare the last item with the minimum value and swap if it's smaller
mov dx,array[si]
cmp ax,dx
jb endi
xchg ax,dx
end
但似乎我在这里遇到了问题,因为它比较了所有元素,但不是最后一个,所以它总是给我 (4) 并且给我 (1),任何帮助!
【问题讨论】:
-
该死...从不使用
array[si]从不!你不知道你在做什么。您的数组是单词数组而不是字节!汇编中没有索引数组访问! -
你的意思是最后一步“lastcmp”! ,但我把它移到 dx 寄存器以便能够比较!?
-
不,我是说
inc si -
@MargaretBloom 试图告诉你的是
array[si]使用字节偏移量。尽管它看起来像数组索引,例如在 C 中它会自动按项目大小缩放。在组装中并非如此,您必须自己手动解决。在这种情况下,这意味着每次将si增加2。 -
@jester 非常感谢它现在可以正常工作了;)