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.: * *
- ;* * *
- ;********************************************************************
- ;* Gruppen-Nr.: * *
- ;* * *
- ;********************************************************************
- ;* Name / Matrikel-Nr.: * *
- ;* * *
- ;* * *
- ;********************************************************************
- ;* Abgabedatum: * *
- ;* * *
- ;********************************************************************
- ;********************************************************************
- ;* Daten-Bereich bzw. Daten-Speicher *
- ;********************************************************************
- AREA Daten, DATA, READWRITE
- Datenanfang
- LtoA EQU Datenanfang
- NeuerString EQU 0x40000100
- ;********************************************************************
- ;* 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 die zu konvertierende Zahl
- ;R1 Adresse fuer das erste ZEichen des Strings
- ;R2 Magic Number 10
- ;R3 Testen fuer negative Zahl
- ;R4 Speichern, ob es sich um eine negative Zahl handelt
- ;R5 Abspeichern des Werts, welcher zum Rechnen verwendet wird
- ;R6 R5 *10 für Restberechung
- ;R7 Rest des Wertes
- ;R8 10<Dec> als Multiplikator
- ;R9 String length counter
- ;R10 Adresse mit Wert
- ;R11 RdLo aus umull operation
- ;R12 RdHi aus umull operation
- Initialize
- LDR R10, =Wert ; Adresse mit Zahl von <Wert> als Inhalt
- LDR R1, =NeuerString
- LDR R0, [R10] ; Tatsaechlicher Wert als Adresse
- LDR R2, =0xCCCCCCCD ; Magix Number 10
- MOV R5, R0 ; Speicher R0 in R6, da Anfangswert in R0 stehen soll
- MOV R10, R0 ; Speicher R0 in R10, um Rest berechnen zu koennen
- MOV R8, #10
- STRB R7, [R1], #-1
- BL Negative_Handling
- ADD R1, #1
- ;********************************************************************
- ;* Ende des eigenen Programms *
- ;********************************************************************
- endlos B endlos
- Negative_Handling
- CMP R5, #0 ; Ueberpruefe ob am Anfang des Strings ein "-"-Zeichen steht
- ADDLT R3, #1 ; Gedankenstuetze
- MVNLT R5, R5 ; R3 = 0xFFFFFFFF xor R3; Skript Seite 18 ; 1er-Komplement
- ADDLT R5, R5, #1 ; Addieren von 1 auf R3 => 2er-Komplement ; Darstellung von negativen Zahlen
- MOVLT R10, R5 ; Speicher R0 in R10, um Rest berechnen zu koennen
- Start_Routine
- CMP R5, #0x00 ; Ueberpruefung ob Zahl null ist
- UMULLNE R11, R12, R5, R2 ; umull mit Magix number 10
- MOVNE R5, R12, LSR #3 ; Rechtsshift um3 bit um Division mit 10 zu vollbringen; Abspeichern des Werts in R5
- MULNE R6, R5, R8 ; Multiplikation ovn R5 mit 10 um Rest zu berechnen
- SUBNE R7, R10, R6 ; Die zuvorig /10 berechnete Zahl nehmen und - die durch 10 gerechnete mit 10 multiplizierte zahl rechnen; Durch /10 *10 nachkommastelle
- MOVNE R10, R5 ; Die durch 10 gerechnete Zahl nehmen und abspeichern fuer weitere rest berechnung
- Calculate_Ascii_Save
- ADDNE R7, #0x30 ; Asciizeichen erstellen
- ADDNE R9, #0x01 ; Inkrement Counter
- STRBNE R7, [R1], #-1
- BNE Start_Routine
- End_Routine
- CMP R3, #1
- MOVEQ R7, #0x2D
- ADDEQ R9, #0x01
- STRBEQ R7, [R1], #-1
- MOV PC, R14
- BX PC
- ;********************************************************************
- ;* Konstanten im CODE-Bereich *
- ;********************************************************************
- Wert DCD 60005
- ;********************************************************************
- ;* Ende der Programm-Quelle *
- ;********************************************************************
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement