Advertisement
bhthllj

Untitled

Jan 3rd, 2019
1,844
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 4.79 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.:             *                                       *
  14. ;*                          *                                       *
  15. ;********************************************************************
  16. ;* Gruppen-Nr.:             *                                       *
  17. ;*                          *                                       *
  18. ;********************************************************************
  19. ;* Name / Matrikel-Nr.:     *                                       *
  20. ;*                          *                                       *
  21. ;*                          *                                       *
  22. ;********************************************************************
  23. ;* Abgabedatum:             *                                       *
  24. ;*                          *                                       *
  25. ;********************************************************************
  26.  
  27. ;********************************************************************
  28. ;* Daten-Bereich bzw. Daten-Speicher                                *
  29. ;********************************************************************
  30.                 AREA        Daten, DATA, READWRITE
  31. Datenanfang
  32. LtoA            EQU         Datenanfang
  33. NeuerString     EQU         0x40000100
  34.  
  35. ;********************************************************************
  36. ;* Programm-Bereich bzw. Programm-Speicher                          *
  37. ;********************************************************************
  38.                 AREA        Programm, CODE, READONLY
  39.                 ARM
  40. Reset_Handler   MSR         CPSR_c, #0x10   ; User Mode aktivieren
  41.  
  42. ;********************************************************************
  43. ;* Hier das eigene Programm einfuegen                               *
  44. ;********************************************************************
  45.  
  46. ;R0 die zu konvertierende Zahl
  47. ;R1 Adresse fuer das erste ZEichen des Strings
  48. ;R2 Magic Number 10
  49. ;R3 Testen fuer negative Zahl
  50. ;R4 Speichern, ob es sich um eine negative Zahl handelt
  51. ;R5 Abspeichern des Werts, welcher zum Rechnen verwendet wird
  52. ;R6 R5 *10 für Restberechung
  53. ;R7 Rest des Wertes
  54. ;R8 10<Dec> als Multiplikator
  55. ;R9 String length counter
  56. ;R10 Adresse mit Wert
  57. ;R11 RdLo aus umull operation
  58. ;R12 RdHi aus umull operation
  59.  
  60.  
  61.  
  62.  
  63. Initialize  
  64.                 LDR         R10, =Wert          ; Adresse mit Zahl von <Wert> als Inhalt
  65.                 LDR         R1, =NeuerString
  66.                 LDR         R0, [R10]           ; Tatsaechlicher Wert als Adresse
  67.                 LDR         R2, =0xCCCCCCCD     ; Magix Number 10
  68.                 MOV         R5, R0              ; Speicher R0 in R6, da Anfangswert in R0 stehen soll
  69.                 MOV         R10, R0             ; Speicher R0 in R10, um Rest berechnen zu koennen
  70.                 MOV         R8, #10            
  71.                 STRB        R7, [R1], #-1      
  72.                 BL          Negative_Handling
  73.                 ADD         R1, #1
  74. ;********************************************************************
  75. ;* Ende des eigenen Programms                                       *
  76. ;********************************************************************
  77. endlos          B           endlos 
  78.  
  79.  
  80.  
  81. Negative_Handling
  82.                 CMP         R5, #0                              ; Ueberpruefe ob am Anfang des Strings ein "-"-Zeichen steht
  83.                 ADDLT       R3, #1                              ; Gedankenstuetze
  84.                 MVNLT       R5, R5                              ; R3 = 0xFFFFFFFF xor R3; Skript Seite 18 ; 1er-Komplement
  85.                 ADDLT       R5, R5, #1                          ; Addieren von 1 auf R3 => 2er-Komplement ; Darstellung von negativen Zahlen
  86.                 MOVLT           R10, R5             ; Speicher R0 in R10, um Rest berechnen zu koennen
  87.  
  88.  
  89. Start_Routine
  90.                 CMP         R5, #0x00           ; Ueberpruefung ob Zahl null ist
  91.                 UMULLNE     R11, R12, R5, R2    ; umull mit Magix number 10
  92.                 MOVNE       R5, R12, LSR #3     ; Rechtsshift um3 bit um Division mit 10 zu vollbringen; Abspeichern des Werts in R5
  93.                 MULNE       R6, R5, R8          ; Multiplikation ovn R5 mit 10 um Rest zu berechnen
  94.                 SUBNE       R7, R10, R6         ; Die zuvorig /10 berechnete Zahl nehmen  und - die durch 10 gerechnete mit 10 multiplizierte zahl rechnen; Durch /10 *10 nachkommastelle
  95.                 MOVNE       R10, R5             ; Die durch 10 gerechnete Zahl nehmen und abspeichern fuer weitere rest berechnung
  96.            
  97. Calculate_Ascii_Save
  98.                 ADDNE       R7, #0x30           ; Asciizeichen erstellen
  99.                 ADDNE       R9, #0x01           ; Inkrement Counter
  100.                 STRBNE      R7, [R1], #-1
  101.                 BNE         Start_Routine
  102.  
  103. End_Routine
  104.                 CMP         R3, #1
  105.                 MOVEQ       R7, #0x2D
  106.                 ADDEQ       R9, #0x01
  107.                 STRBEQ      R7, [R1], #-1
  108.                 MOV         PC, R14
  109.                 BX          PC
  110.                
  111.  
  112.                
  113.                
  114.                
  115.                
  116.  
  117.  
  118.  
  119.  
  120. ;********************************************************************
  121. ;* Konstanten im CODE-Bereich                                       *
  122. ;********************************************************************
  123. Wert            DCD         60005
  124.  
  125. ;********************************************************************
  126. ;* Ende der Programm-Quelle                                         *
  127. ;********************************************************************
  128.                 END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement