【发布时间】:2012-07-14 22:13:54
【问题描述】:
我正在尝试在 x86 程序集中进行冒泡排序(是的,它必须是冒泡排序,因为我不关心针对不同类型排序的速度优化)并且由于某种原因,我的代码不会交换必要的价值观。这是我的代码
mov eax, list ;store list in eax
mov edx,[eax+4*edi-4] ;temp = var1
cmp edx,[eax+edi*4] ;compare
JLE SECOND_LOOP ;jump if var1 < var2
mov [eax+4*edi-4],[eax+edi*4] ;var1 = var2
mov [eax+edi*4], edx ;var2 = temp
jmp SECOND_LOOP
在应该将 temp 加载回地址的最后一条 mov 指令中,它..没有。 EAX 寄存器具有包含我的值列表的数组的起始地址
0x*starting address* 0a 00 00 00 ec ff ff ff 05 00 00 00 0c 00 00 00 1e 00 00 00 fb ff ff ff ea
0x*address after * ff ff ff 37 00 00 00 34 00 00 00 00 00 00 00
并且下一个地址包含更多的数字。在十进制中,数字是10 -20 5 12 30 -5 -22 55 52 0。基本上现在我正在尝试将FFFFFFEC 移动到0000000A,然后将0000000A 移动到FFFFFFEC。我可以将它存储到我的临时寄存器 EDX 中,但不能将 EDX 的值存储到特定地址中。有什么帮助吗?
【问题讨论】:
-
嗯,是的,它没有。但是我只是将数据放入另一个寄存器并使用了 mov 指令。
-
相关:stackoverflow.com/questions/17802947/… 有一个相当干净的 MASM 32 位交换实现,用于 32 位整数的冒泡排序。
标签: assembly x86 bubble-sort