【发布时间】:2019-05-24 07:21:10
【问题描述】:
我正在尝试使用寄存器从大到小对数组进行排序,但似乎没有任何效果。 ecx 是我拥有的数字数量,esi 是我的列表的地址,它由双字组成。我使用 edx 将每个元素增加 4 个字节。我的代码没有对整个数组进行排序我知道我需要找到最大值的位置,然后将其设置为等于外部循环 edx 但我似乎无法弄清楚如何更改数组中的元素,因为我只有edx寄存器。我尝试推动该位置,然后在内循环完成时将其弹出,但这似乎不起作用。请感谢我已经解决这个问题超过 4 个小时。
push ebp
mov ebp,esp
mov ecx,[ebp+8]
mov esi,[ebp+12]
mov edx,-4
outerloop:
add edx,4
push edx
push ecx
mov ebx,[edx+esi]
innerloop:
add edx,4
mov eax,[edx+esi]
cmp ebx,eax
jl change
finish:
loop innerloop
pop ecx
pop edx
loop outerloop
jmp done
change:
mov [edx+esi],ebx
mov [edx+esi-4],eax
sub edx,4
push edx
mov edx,offset change1
call writestring
pop edx
jmp finish
done:
pop ebp
ret 8
【问题讨论】:
标签: arrays sorting assembly x86 cpu-registers