Advertisement
bhthllj

atol

Dec 19th, 2018
1,737
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 4.04 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. ;* 2-1FunktionAtoL.S:                                               *
  9. ;* Programmrumpf fuer Assembler-Programme mit dem Keil              *
  10. ;* Entwicklungsprogramm uVision fuer ARM-Mikrocontroller            *
  11. ;*                                                                  *
  12. ;********************************************************************
  13. ;* Aufgabe-Nr.: 2.1             *                                   *
  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     Data, DATA, READWRITE
  31. Datenanfang
  32. Stack               EQU             Datenanfang
  33.  
  34. Stack_Ende          EQU             Stack + 0x400
  35.  
  36. ;********************************************************************
  37. ;* Programm-Bereich bzw. Programm-Speicher                          *
  38. ;********************************************************************
  39.  
  40.                     AREA     Programm, CODE, READONLY
  41.                     ARM
  42.  
  43. Reset_Handler  MSR      CPSR_c, #0x10           ; User Mode aktivieren
  44.  
  45. ;********************************************************************
  46. ;* Hier das eigene Programm einfuegen                               *
  47. ;********************************************************************
  48.  
  49. Start
  50.                     STMFD SP!, {R1-R5, R14}     ; Sichert die Registerbelegung für spätere wiederherstellung
  51.                    
  52.                     LDR     R0, =String         ; Adresses des Strings in R0 laden             
  53.                     MOV     R2,#0xA             ; R2 sei 10; die 10 wird benötigt um die zahl zu erweitern
  54.                     MOV     R3,#0               ; R3 sei zu Beginn 0
  55.                     MOV     R5,#0               ; Vorzeichen makierung
  56.                     LDR     SP, =Stack_Ende     ; Definiert ende unseres Stacks 1024Byte (1MByte)
  57.                     BL      pruefe_vorzeichen
  58.  
  59. pruefe_vorzeichen
  60.                     LDRB    R1,[R0]             ; Lade den Wert des ersten Bytes aus R0 in R1 OHNE Offset  
  61.                     CMP     R1, #0x2D           ; Überprüfe für negatives vorzeichen (-)
  62.                     MOVEQ   R5, #1              ; Kennzeichne negatives vorzeichen mit #1 in R5
  63.                     LDRBEQ  R1, [R0], #1        ; Falls erstes Zeichen "-", lade Wert aus R0 in R1 MIT Offset 1 Byte
  64.                     BEQ     atol                ; Falls erstes Zeichen "-" in ASCII, springe zu atol
  65.                     CMP     R1,#0x2B            ; Überprüfe für positives vorzeichen (+)
  66.                     LDRBEQ  R1, [R0], #1        ; Falls erstes Zeichen "+", lade Wert aus R0 in R1 MIT Offset 1 Byte
  67.                     BEQ     atol                ; Falls erstes Zeichen "+" in ASCII, springe zu atol
  68.                                    
  69. atol               
  70.                     LDRB    R1,[R0],#1          ; Lade n-tes Zeichen vom String in R1, inkrementiere R0 um 1 (zeige auf nächstes byte im string)
  71.                     MOV     R4,R3               ; Speicher R3 in R4
  72.                     CMP     R1,#0x00            ; R1 == 0?
  73.                     SUBNE   R1,R1,#0x30         ; Nein: dekremetiere R1 um 0x30 um die tatsächliche Hex-Zahl zu erhalten
  74.                     MLANE   R3,R4,R2,R1         ; Nein: Multipliziere das alte Ergebnis mit 10, Addiere die neue Hex-Zahl hinzu, Speichere in R3
  75.                     BNE atol       
  76.  
  77. negativer_input
  78.                     CMP     R5, #1              ; Ist in R5 aus prüefe_vorzeichen eine 1?
  79.                     MVNEQ   R4, R4              ; Mit logischem XOR Einser-Komplement bilden
  80.                     ADDEQ   R4, R4, #1          ; Daraus durch +1 Zweierkomplement machen
  81.                    
  82. ergebnis_reset
  83.                     MOV     R0,R4               ; Schreibe Endergebnis in R0
  84.                     LDMFD   SP!, {R2-R5, R14}   ; Stelle gepseicherte Register wieder her
  85.                     B       Ende
  86.  
  87.  
  88. Ende                B       Ende
  89.  
  90. String      DCB     "+33300",0x00
  91.  
  92.                     END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement