.data # zu sortierende List einkommentieren # list: .long 10,9,8,7,6,5,4,3,2,1 list: .long 16,5,18,12,11,66,62,1,9,33 # Länge der Liste: length: .long 10 intout: .string "Sortierte Liste: %d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n" .text .globl main main: movl length, %ecx # %ecx = n subl $1, %ecx # n - 1 movl $0, %edi # %edi mit 0 initialisieren ############################################################################## .schleife_aussen: pushl %ecx # Speicher den Wert von %ecx auf Stack ######################################################### .schleife_innen: movl list(,%edi, 4), %eax # %eax = j inc %edi # %edi um 1 erhöhen movl list(,%edi, 4), %ebx # %ebx = j+1 dec %edi # %edi wieder auf 0 setzen cmp %eax, %ebx # vergleiche nun j und j+1 und springe zu den passenden Labels jb .true jmp .false .true: # Registertausch: xchgl %eax, %ebx movl %eax, list(,%edi, 4) # zurück ins Datenfeld schreiben inc %edi movl %ebx, list(,%edi, 4) # zurück ins Datenfeld schreiben dec %edi .false: # Weiter im Code inc %edi # %edi um 1 erhöhen, um nun das nächste Paar im Array zu vergleichen loop .schleife_innen ########################################################## popl %ecx # ursprünglichen Wert von %ecx vom Stack holen xor %edi, %edi # %edi wieder auf 0 setzen loop .schleife_aussen ################################################################################## #### Ausgabe #### movl length, %esi # Kopiere Arraygröße nach %esi(= k) .printElement: cmpl $0 , %esi # Vergleiche %esi = 0 ? je .callPrintf # Wenn ja ,springe zu callPrintf dec %esi # Veringere %esi um 1 movl list(,%esi,4) , %ecx # Kopiere a[k] nach %ecx pushl %ecx # pushl auf Stack jmp .printElement .callPrintf: pushl $intout call printf # Exit movl $1, %eax int $0x80