Advertisement
Guest User

Untitled

a guest
Jun 12th, 2017
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 2.60 KB | None | 0 0
  1. @ Name:     Matrikelnummer:
  2. @ Name:     Matrikelnummer:
  3. @ Datum:
  4.     .file "aufgabe3.S"
  5.     .text       @ legt eine Textsection fuer PrgrammCode + Konstanten an
  6.     .align 2    @ sorgt dafuer, dass nachfolgende Anweisungen auf einer durch 4 teilbaren Adresse liegen   
  7.             @ unteren 2 Bit sind 0
  8.     .global main    @ nimmt das Symbol main in die globale Sysmboltabelle auf
  9.     .type main,function
  10. main:
  11.     stmfd sp!, {r4, r5, lr} @ Ruecksprungadresse und Register sichern
  12. kopieren:
  13. @ hier Ihr Programm zum Kopieren einer Byte-Tabelle (je 8Bit) in eine Word-Tabelle (je 32Bit) einfuegen
  14.     LDR r1, =Liste1 @ r1 zeigt auf Liste1
  15.     LDR r2, =Liste2 @ r2 zeigt auf Liste2
  16.     LDRB r3, [r1] @anzahl der elemente holen
  17.  
  18. LDRSB r0, [r1] @ lade ersten Wert
  19.     @konvertieren in 32-bit durch LDRSB
  20.    
  21.     STR r0,[r2] @ speichere ihn in Liste2
  22.     ADD r1, #1 @ Lesezeiger verschieben
  23.     ADD r2, #4 @ Schreibzeiger verschieben
  24.     SUBS r3, #1 @runterzaehlen und flags updaten
  25. schleife:
  26.  
  27.     LDRSB r0, [r1] @ lade zweiten Wert
  28.    
  29.     STR r0,[r2] @ speichere ihn in Liste2
  30.     ADD r1, #1 @ Lesezeiger verschieben
  31.     ADD r2, #4 @ Schreibzeiger verschieben
  32.     SUBS r3, #1 @runterzaehlen und flags updaten
  33.     bne schleife
  34.  
  35.  
  36.  bubblesort:
  37.     LDR r3, =Liste2 @ listenpointer holen
  38.     LDR r4, [r3] @erstes element holen aka groeße
  39.     SUB r4, #2
  40.     ADD r3, #4 @listenpointer weiterschieben
  41.    
  42.     outerloop:
  43.     LDR r3, =Liste2
  44.     @ADD r3, #1 @ an anfang der liste springen
  45.     mov r5, r4 @aktuelle anzahl der unsortieren elemente fuer innere schleife holen
  46.    
  47.     innerloop:
  48.     ADD r3, #4
  49.     LDR r1, [r3]
  50.     LDR r2, [r3, #4]
  51.    
  52.       check:
  53.     cmp r2, r1 @ r1-r2 und ergebnis verwerfen
  54.     bmi swap @falls negativ flag, tauschen
  55.       afterCheck:
  56.     STR r1, [r3]
  57.     STR r2, [r3, #4]
  58.     subs r5, #1 @ inneren schleifenzaeahler
  59.     bne innerloop @falls noch nicht 0 nochmal
  60.    
  61.     subs r4, #1 @aueßere schleife runterzaehlen
  62.     bne outerloop
  63.     bal fertig
  64.    
  65.       swap:
  66.         mov r0, r1 @ dreieckstausch
  67.         mov r1, r2
  68.         mov r2, r0
  69.       bal afterCheck
  70.  fertig:
  71.     ldmfd sp!, {r4, r5, pc} @ Ruecksprungadresse und Register
  72.  
  73. TAB2: .word Liste2 @ Beispiel um an Adressen aus anderen Segmenten zu kommen
  74.  
  75. .Lfe1:
  76.     .size main,.Lfe1-main
  77.  
  78. @ .data-Section fuer initialisierte Daten
  79.     .data
  80. @ Erster Wert der Tabelle steht fuer die Anzahl (max. 64) der Werte der Tabelle
  81. Liste1: .byte (Liste1Ende-Liste1), -9, 8, -7, 6, -5, 4, -3, 2, -1, 0, 127, 128
  82. Liste1Ende:
  83.  
  84. @ .comm-Section fuer nicht initialisierte Daten
  85.     .comm Liste2, ((Liste1Ende-Liste1)*4)   @ Speicherbereich mit der Groesse*4 von Liste1 reservieren
  86.  
  87. @ End of File
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement