我正在尝试在16b dos程序集中实现bubblesort(我正在使用NASM)。我的程序成功生成了1024个随机16b数字表,现在我必须按降序对它们进行排序,我决定使用bubblesort,但我交换它们的方式并不像我认为的那样工作。以下是交换两个数字的代码:
mov ax, [table+di]
cmp ax, [table+di+1]
jae dont_swap
mov bx, [table+di+1]
mov [table+di+1], ax
mov [table+di], bx
应该只交换一个数字' di'指着表中的下一个。我很难解释这个效果所以只看一下程序给出的输出:
-first few randomly generated numbers: 61923, 48369, 17084, 52802, 49358
-after sorting: 28482, 17007, 16962, 16962, 16962...
它只是重复最后一个数字。排序后的值甚至不在原始表中。 我确信问题不在我提出的代码之外,因为如果我删除它,重新编译程序就会完美地重复生成的表。
EDIT 非常感谢所有贡献的人。问题是没有相应地根据变量的大小缩放偏移量。当我迭代字节时,表存储字变量。
答案 0 :(得分:0)
由于您正在比较和交换字词,因此需要相应地缩放偏移量。下一个元素将是当前元素之后的2个字节,即[table+di+2]
。
您尚未向我们展示您如何计算/更新di
,因此请不要忘记每个元素也需要移动2个字节。