J'essaie de mettre en œuvre un tri rapide dans l'assemblage. Je ne peux pas implémenter l'instruction return lorsque la condition d'arrêt est vraie, comme je peux le faire en C# ou dans toute autre langue haute. L'aide sera appréciée!Comment écrire la condition d'arrêt dans un tri rapide dans l'assemblage
Voici mon code:
INCLUDE Irvine32.inc
Len EQU 8
.data
Numbers byte 5,6,4,7,11,2,9,1
Sorted byte Len dup(?)
Index_Pivot dword ?
Element_Pivot byte ?
Greater byte Len dup(-1)
Less byte Len dup(-1)
Temp dword ?
Temp2 dword ?
.code
Generate_Random PROC
Mov eax,ebx
CALL randomrange
ret
Generate_Random ENDP
;-----------------------------
Quick_Sort PROC
CMP ebx,1
JLE Next
CALL Generate_Random
MOV Index_Pivot,eax
ADD esi,eax
MOV Temp2,eax
MOV al,[esi]
MOV Element_Pivot,al
MOV byte ptr[esi],' '
SUB esi,Temp2
;-------------------------
MOV ecx,ebx
JMP Do_calc
Continue::
MOV Temp,edx
MOV esi,OFFSET Less
MOV ebx,Temp
CALL Quick_Sort
Next:
ret
Quick_Sort ENDP
;-------------------------------------
Do_calc:
MOV ebx,0
MOV edx,0
;MOV ecx,Len
L:
MOV al,Element_Pivot
CMP byte ptr[esi],' '
JE Next
CMP [esi],al
JG Move_Greater
MOV al,[esi]
MOV Less[edx],al
INC edx ; for less array
JMP Next
Move_Greater:
MOV al,[esi]
MOV Greater[ebx],al
INC ebx ; for greater array
Next:
INC esi
LOOP L
jmp Continue
;-----------------
main PROC
MOV esi,OFFSET Numbers
MOV ebx,Len
CALL Quick_Sort
MOV edi,OFFSET Sorted
MOV edi,OFFSET Sorted
MOV ecx,LENGTHOF Sorted
lo:
mov eax,0
mov al,[edi]
call writeint
INC edi
LOOP lo
CALL crlf
exit
main ENDP
END main
Ce serait une meilleure question si vous avez inclus au moins section de code où vous essayez de coder la condition d'arrêt. Avoir juste un lien vers pastebin n'est pas ce que nous faisons sur SO. –
Essayez de regarder itératif quicksort –
Essayez d'ajouter votre code directement à votre question. Évitez l'utilisation du lien externe, car ils peuvent être indisponibles avec le temps – HDJEMAI