Troca de classificação de bolhas de montagem
Eu estou tentando fazer um tipo de bolha na montagem x86 (sim, tem que ser bolha, como eu não estou preocupado com otimização de velocidade em relação a diferentes tipos de tipos) e por algum motivo, meu código não irá trocar os valores necessários. Aqui está meu código
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
Na última instrução mov, onde é suposto carregar a temp de volta ao endereço, isso não acontece. O registrador EAX tem o endereço inicial da matriz que contém minha lista de valores
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
e o próximo endereço contém mais alguns números. Em decimal, os números são10 -20 5 12 30 -5 -22 55 52 0
. Essencialmente agora eu estou tentando me moverFFFFFFEC
para0000000A
e depois mova0000000A
paraFFFFFFEC
. Eu posso armazená-lo em meu registro temporário EDX, mas não posso armazenar o valor de EDX no endereço específico. Qualquer ajuda?