Advertisement
bhthllj

Untitled

Jan 3rd, 2019
1,754
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 6.35 KB | None | 0 0
  1. ;********************************************************************
  2. ;* Hochschule fuer Technik und Wirtschaft                           *
  3. ;* Fakultaet fuer Ingenieurwissenschaften                           *
  4. ;* Labor fuer Eingebettete Systeme                                  *
  5. ;* Mikroprozessortechnik                                            *
  6. ;********************************************************************
  7. ;*                                                                  *
  8. ;* Assembler_Startup.S:                                             *
  9. ;* Programmrumpf fuer Assembler-Programme mit dem Keil              *
  10. ;* Entwicklungsprogramm uVision fuer ARM-Mikrocontroller            *
  11. ;*                                                                  *
  12. ;********************************************************************
  13. ;* Aufgabe-Nr.: 2.3             *                                   *
  14. ;*                              *                                   *
  15. ;********************************************************************
  16. ;* Gruppen-Nr.: 12              *                                   *
  17. ;*                              *                                   *
  18. ;********************************************************************
  19. ;* Name / Matrikel-Nr.:         *                                   *
  20. ;* Halilaj Behat 3670538        *                                   *
  21. ;* Kretzschmann Samuel 3726304  *                                   *
  22. ;********************************************************************
  23. ;* Abgabedatum: 20.12.18        *                                   *
  24. ;* 10:00 - 13:15                *                                   *
  25. ;********************************************************************
  26.  
  27. ;********************************************************************
  28. ;* Daten-Bereich bzw. Daten-Speicher                                *
  29. ;********************************************************************
  30.                 AREA        Daten, DATA, READWRITE
  31. Datenanfang
  32. ;Mystring       EQU         0x40000000
  33. Ergebnis        EQU         0x40000070
  34.  
  35. ;"Hello WORLD _5/_:,#+-01234567891 "
  36.  
  37. ;********************************************************************
  38. ;* Programm-Bereich bzw. Programm-Speicher                          *
  39. ;********************************************************************
  40.                 AREA        Programm, CODE, READONLY
  41.                 ARM
  42. Reset_Handler   MSR         CPSR_c, #0x10   ; User Mode aktivieren
  43.  
  44. ;********************************************************************
  45. ;* Hier das eigene Programm einfuegen                               *
  46. ;********************************************************************
  47.  
  48. ; R0 - Adresse des ersten Zeichen des Strings
  49. ; R1 - Anzahl geloeschter Zeichen
  50. ; R2 - Anzahl Ziffern
  51. ; R3 - Anzahl Buchstaben
  52.  
  53.  
  54.                 LDR         R10,=Ergebnis
  55.                 LDR         R11,=Ergebnis
  56.                 LDR         R0,=Mystring                ; Adresse des String speichern
  57.  
  58.  
  59. StrCharDigit
  60.                 LDRB        R5,[R0],#1                  ; i-tes Zeichen des Strings
  61.                 MOV         R6,R5                       ; Schiebe i-tes zeichen in R6
  62.                 B           Endzeichen                  ; Gehe zu Endzeichen
  63.  
  64. Endzeichen
  65.                 MOV         R7,#0x00                    ; Schiebe 0 in R7
  66.                 MOV         R8,R7                       ; Schiebe R7 in R8
  67.                 CMP         R6,R8                       ; Vergleiche (i-tes zeichen) gespeichert in R8 mit "\0"
  68.                 BNE         Anfang_Ziffern              ; Nein: gehe zu Anfang_Ziffern
  69.                 B           Ende                        ; Ende
  70.  
  71. Anfang_Ziffern
  72.                
  73.                 LDRB        R7,Ziffer_Start                ; Lade Ziffer_Start in R7 (0)
  74.                 MOV         R8,R7                        ; Schiebe R7 in R8
  75.                 CMP         R6,R8                        ; Vergleiche (i-tes zeichen) gespeichert in R6 mit Zifferstart R8
  76.                 BGE         Ende_Ziffern                ; gehe zu Ende_Ziffern
  77.                 B           Anfang_Gross                ; Gehe zu Anfang_Gross
  78.  
  79.  
  80. Ende_Ziffern
  81.                 LDRB        R7,Ziffer_Ende              ; Lade Ziffer Ende in R7 (9)
  82.                 MOV         R8,R7                       ; Schiebe R7 in R8
  83.                 CMP         R6,R8                       ; Vergleiche (i-tes zeichen) gespeichert in R8 mit Ziffer_Ende;
  84.                 BLE         Ziffer_gefunden             ; Gehe zu Ziffer_gefunden
  85.                 B           Anfang_Gross                ; Gehe zu Anfang_Gross
  86.  
  87. Anfang_Gross
  88.                 LDRB        R7,Gross_Start              ; Lade Gross_Ende in R7(A)
  89.                 MOV         R8,R7                       ; Schiebe R7 in R8
  90.                 CMP         R6,R8                       ; Vergleiche (i-tes zeichen) gespeichert in R8 mit Gross_Start
  91.                 BGE         Ende_Gross                  ; Gehe zu Ende_Gross
  92.                 B           Steuerzeichen_gefunden      ; Gehe zu Steuerzeichen_gefunden
  93.  
  94. Ende_Gross
  95.                 LDRB        R7,Gross_Ende               ; Lade Gross_Ende in R7 (Z)
  96.                 MOV         R8,R7                       ; Schiebe R7 in R8
  97.                 CMP         R6,R8                       ; Vergleiche (i-tes zeichen) gespeichert in R8 mit Gross_Ende;
  98.                 BLE         Buchstabe_gefunden          ; Gehe zu Steuerzeichen_gefunden
  99.                 B           Anfang_Klein                ; Gehe zu Anfang_Klein
  100.  
  101. Anfang_Klein
  102.                 LDRB        R7,Klein_Anfang             ; Lade Klein_Anfang in R7 (a)
  103.                 MOV         R8,R7                       ; Schiebe R7 in R8
  104.                 CMP         R6,R8                       ; Vergleiche (i-tes zeichen) gespeichert in R8 mit Klein_Anfang;
  105.                 BGE         Ende_Klein                  ; Gehe zu Ende_Klein
  106.                 B           Steuerzeichen_gefunden      ; Gehe zu Steuerzeichen_gefunden
  107.  
  108.  
  109. Ende_Klein
  110.                 LDRB        R7,Klein_Ende               ; Lade Klein_Anfang in R7 (z)  
  111.                 MOV         R8,R7                       ; Schiebe R7 in R8
  112.                 CMP         R6,R8                       ; Vergleiche (i-tes zeichen) gespeichert in R8 mit
  113.                 BLE         Buchstabe_gefunden          ; Gehe zu Buchstaben
  114.                 B           Steuerzeichen_gefunden      ; Gehe zu Steuerzeichen_gefunden
  115.  
  116.  
  117. Ziffer_gefunden
  118.                 ADD         R2, R2, #1                  ; Anzahl Ziffern erhoehen
  119.                 STRB        R6,[R10],#1                 ; Aktuelles Byte an Adresse speichern, danach i++
  120.                 B           StrCharDigit                ; Zum Anfang springen
  121.  
  122. Buchstabe_gefunden
  123.                 ADD         R3,R3,#1                    ; Anzahl Buchstaben erhoehen
  124.                 STRB        R6,[R10],#1                 ; Aktuelles Byte an Adresse speichern, danach i++
  125.                 B           StrCharDigit                ; Zum Anfang springen
  126.  
  127. Steuerzeichen_gefunden
  128.                 ADD         R1,R1,#1                    ; Anzahl gel. Zeichen erhoehen
  129.                 B           StrCharDigit                ; Zum Anfang springen
  130.  
  131. Ende            MOV         R0,R11                      ; Adresse des String speichern
  132.  
  133.  
  134. ;********************************************************************
  135. ;* Ende des eigenen Programms                                       *
  136. ;********************************************************************
  137. endlos          B           endlos
  138.  
  139. ;********************************************************************
  140. ;* Konstanten im CODE-Bereich                                       *
  141. ;********************************************************************
  142. NUL             DCB         0x00
  143. Ziffer_Start    DCB         0x30
  144. Ziffer_Ende     DCB         0x39
  145. Gross_Start     DCB         0x41
  146. Gross_Ende      DCB         0x5A
  147. Klein_Anfang    DCB         0x61
  148. Klein_Ende      DCB         0x7A
  149. ;SAdresse       DCD         0x40000000
  150.  
  151. Mystring        DCB         "Hello WORLD _5/_:,#+-01234567891 "
  152.  
  153.  
  154. ;********************************************************************
  155. ;* Ende der Programm-Quelle                                         *
  156. ;********************************************************************
  157.                 END
  158.                 ALIGN
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement