Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;********************************************************************
- ;* Hochschule fuer Technik und Wirtschaft *
- ;* Fakultaet fuer Ingenieurwissenschaften *
- ;* Labor fuer Eingebettete Systeme *
- ;* Mikroprozessortechnik *
- ;********************************************************************
- ;* *
- ;* Assembler_Startup.S: *
- ;* Programmrumpf fuer Assembler-Programme mit dem Keil *
- ;* Entwicklungsprogramm uVision fuer ARM-Mikrocontroller *
- ;* *
- ;********************************************************************
- ;* Aufgabe-Nr.: 2.3 * *
- ;* * *
- ;********************************************************************
- ;* Gruppen-Nr.: 12 * *
- ;* * *
- ;********************************************************************
- ;* Name / Matrikel-Nr.: * *
- ;* Halilaj Behat 3670538 * *
- ;* Kretzschmann Samuel 3726304 * *
- ;********************************************************************
- ;* Abgabedatum: 20.12.18 * *
- ;* 10:00 - 13:15 * *
- ;********************************************************************
- ;********************************************************************
- ;* Daten-Bereich bzw. Daten-Speicher *
- ;********************************************************************
- AREA Daten, DATA, READWRITE
- Datenanfang
- ;Mystring EQU 0x40000000
- Ergebnis EQU 0x40000070
- ;"Hello WORLD _5/_:,#+-01234567891 "
- ;********************************************************************
- ;* Programm-Bereich bzw. Programm-Speicher *
- ;********************************************************************
- AREA Programm, CODE, READONLY
- ARM
- Reset_Handler MSR CPSR_c, #0x10 ; User Mode aktivieren
- ;********************************************************************
- ;* Hier das eigene Programm einfuegen *
- ;********************************************************************
- ; R0 - Adresse des ersten Zeichen des Strings
- ; R1 - Anzahl geloeschter Zeichen
- ; R2 - Anzahl Ziffern
- ; R3 - Anzahl Buchstaben
- LDR R10,=Ergebnis
- LDR R11,=Ergebnis
- LDR R0,=Mystring ; Adresse des String speichern
- StrCharDigit
- LDRB R5,[R0],#1 ; i-tes Zeichen des Strings
- MOV R6,R5 ; Schiebe i-tes zeichen in R6
- B Endzeichen ; Gehe zu Endzeichen
- Endzeichen
- MOV R7,#0x00 ; Schiebe 0 in R7
- MOV R8,R7 ; Schiebe R7 in R8
- CMP R6,R8 ; Vergleiche (i-tes zeichen) gespeichert in R8 mit "\0"
- BNE Anfang_Ziffern ; Nein: gehe zu Anfang_Ziffern
- B Ende ; Ende
- Anfang_Ziffern
- LDRB R7,Ziffer_Start ; Lade Ziffer_Start in R7 (0)
- MOV R8,R7 ; Schiebe R7 in R8
- CMP R6,R8 ; Vergleiche (i-tes zeichen) gespeichert in R6 mit Zifferstart R8
- BGE Ende_Ziffern ; gehe zu Ende_Ziffern
- B Anfang_Gross ; Gehe zu Anfang_Gross
- Ende_Ziffern
- LDRB R7,Ziffer_Ende ; Lade Ziffer Ende in R7 (9)
- MOV R8,R7 ; Schiebe R7 in R8
- CMP R6,R8 ; Vergleiche (i-tes zeichen) gespeichert in R8 mit Ziffer_Ende;
- BLE Ziffer_gefunden ; Gehe zu Ziffer_gefunden
- B Anfang_Gross ; Gehe zu Anfang_Gross
- Anfang_Gross
- LDRB R7,Gross_Start ; Lade Gross_Ende in R7(A)
- MOV R8,R7 ; Schiebe R7 in R8
- CMP R6,R8 ; Vergleiche (i-tes zeichen) gespeichert in R8 mit Gross_Start
- BGE Ende_Gross ; Gehe zu Ende_Gross
- B Steuerzeichen_gefunden ; Gehe zu Steuerzeichen_gefunden
- Ende_Gross
- LDRB R7,Gross_Ende ; Lade Gross_Ende in R7 (Z)
- MOV R8,R7 ; Schiebe R7 in R8
- CMP R6,R8 ; Vergleiche (i-tes zeichen) gespeichert in R8 mit Gross_Ende;
- BLE Buchstabe_gefunden ; Gehe zu Steuerzeichen_gefunden
- B Anfang_Klein ; Gehe zu Anfang_Klein
- Anfang_Klein
- LDRB R7,Klein_Anfang ; Lade Klein_Anfang in R7 (a)
- MOV R8,R7 ; Schiebe R7 in R8
- CMP R6,R8 ; Vergleiche (i-tes zeichen) gespeichert in R8 mit Klein_Anfang;
- BGE Ende_Klein ; Gehe zu Ende_Klein
- B Steuerzeichen_gefunden ; Gehe zu Steuerzeichen_gefunden
- Ende_Klein
- LDRB R7,Klein_Ende ; Lade Klein_Anfang in R7 (z)
- MOV R8,R7 ; Schiebe R7 in R8
- CMP R6,R8 ; Vergleiche (i-tes zeichen) gespeichert in R8 mit
- BLE Buchstabe_gefunden ; Gehe zu Buchstaben
- B Steuerzeichen_gefunden ; Gehe zu Steuerzeichen_gefunden
- Ziffer_gefunden
- ADD R2, R2, #1 ; Anzahl Ziffern erhoehen
- STRB R6,[R10],#1 ; Aktuelles Byte an Adresse speichern, danach i++
- B StrCharDigit ; Zum Anfang springen
- Buchstabe_gefunden
- ADD R3,R3,#1 ; Anzahl Buchstaben erhoehen
- STRB R6,[R10],#1 ; Aktuelles Byte an Adresse speichern, danach i++
- B StrCharDigit ; Zum Anfang springen
- Steuerzeichen_gefunden
- ADD R1,R1,#1 ; Anzahl gel. Zeichen erhoehen
- B StrCharDigit ; Zum Anfang springen
- Ende MOV R0,R11 ; Adresse des String speichern
- ;********************************************************************
- ;* Ende des eigenen Programms *
- ;********************************************************************
- endlos B endlos
- ;********************************************************************
- ;* Konstanten im CODE-Bereich *
- ;********************************************************************
- NUL DCB 0x00
- Ziffer_Start DCB 0x30
- Ziffer_Ende DCB 0x39
- Gross_Start DCB 0x41
- Gross_Ende DCB 0x5A
- Klein_Anfang DCB 0x61
- Klein_Ende DCB 0x7A
- ;SAdresse DCD 0x40000000
- Mystring DCB "Hello WORLD _5/_:,#+-01234567891 "
- ;********************************************************************
- ;* Ende der Programm-Quelle *
- ;********************************************************************
- END
- ALIGN
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement