Advertisement
Guest User

Untitled

a guest
Dec 11th, 2018
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 4.76 KB | None | 0 0
  1. ;******************** (C) COPYRIGHT HAW-Hamburg ********************************
  2. ;* File Name          : main.s
  3. ;* Author             : Tobias Jaehnichen  
  4. ;* Version            : V1.0
  5. ;* Date               : 21.11.2018
  6. ;* Description        : Grundgeruest fuer die Vorbereitungsaufgabe zu Praktikum 3
  7. ;*         
  8. ;*******************************************************************************
  9.  
  10.     EXTERN  Init_TI_Board       ; Initialize the serial line
  11.     EXTERN  ADC3_CH7_DMA_Config ; Initialize the ADC
  12.     EXTERN  initHW              ; Init Timer
  13.     EXTERN  puts                ; C output function
  14.     EXTERN  TFT_puts            ; TFT output function
  15.     EXTERN  TFT_cls             ; TFT clear function
  16.     EXTERN  TFT_gotoxy          ; TFT goto x y function  
  17.     EXTERN  Delay               ; Delay (ms) function
  18.     EXTERN  GPIO_G_SET          ; Set output-LEDs
  19.     EXTERN  GPIO_G_CLR          ; Clear output-LEDs
  20.     EXTERN  GPIO_G_PIN          ; Output-LEDs status
  21.     EXTERN  GPIO_E_PIN          ; Button status
  22.     EXTERN  ADC3_DR             ; ADC Value (ADC3_CH7_DMA_Config has to be called before)
  23.        
  24. WORDSIZE EQU 4
  25.  
  26. ;********************************************
  27. ; Data section, aligned on 4-byte boundery
  28. ;********************************************
  29.    
  30.     AREA MyData, DATA, align = 2
  31.    
  32.     GLOBAL Base
  33.     GLOBAL V1
  34.     GLOBAL V2
  35.     GLOBAL Tab1
  36.    
  37. Base
  38. V1      DCD 15
  39. V2      DCD 368
  40. Tab1    DCD 12, 45, 56, -1
  41.  
  42.  
  43.  
  44. ;********************************************
  45. ; Code section, aligned on 8-byte boundery
  46. ;********************************************
  47.  
  48.     AREA |.text|, CODE, READONLY, ALIGN = 3
  49.  
  50. ;--------------------------------------------
  51. ; main subroutine
  52. ;--------------------------------------------
  53.     EXPORT main [CODE]
  54.    
  55. main    PROC
  56.        
  57. ;--------------------------------------------
  58. ; Aufgabe 1
  59. ;--------------------------------------------
  60.         ldr r0, V1      ; Laden der Variablen V1 und V2
  61.         ldr r1, V2
  62.         bl Binom1   ; Aufruf von Binom1
  63.  
  64.  
  65. ;--------------------------------------------
  66. ; Aufgabe 2
  67. ;--------------------------------------------
  68.         mov r0,#12355           ; Laden der Konstanten 12355 und 12
  69.         mov r1,#12
  70.         bl Binom1   ; Aufruf von Binom1
  71.        
  72. ;--------------------------------------------
  73. ; Aufgabe 5
  74. ;--------------------------------------------
  75.         ldr r0,Tab1         ; Laden der Adresse von Tab1
  76.         mov r1,#4           ; und der Elementanzahl 4
  77.         bl TabAdd   ; Aufruf von TabAdd
  78.        
  79. ;--------------------------------------------
  80. ; Aufgabe 7
  81. ;--------------------------------------------
  82.         ldr r1,=Base   
  83.         ldr r2,[r1,#V1-Base] ; Laden der Variablen V1 und V2
  84.         ldr r3,[r1,#V2-Base]
  85.         push{r2,r3}          ; und uebergabe an den Stack
  86.        
  87.         bl Binom2   ; Aufruf von Binom2
  88.         add sp, #2*WORDSIZE
  89.        
  90. forever b   forever     ; nowhere to return if main ends   
  91.         ENDP
  92.            
  93.  
  94. ;--------------------------------------------
  95. ;--- Berechnet die 1. Binomische Formel
  96. ;--- Uebergabe der Parameter ueber Register
  97. ;--- in: R0 = a
  98. ;--- in: R1 = b
  99. ;--- out: R0 = (a+b) * (a+b) -> a^2 + 2ab + b^2
  100. ;--------------------------------------------
  101. Binom1  PROC
  102.     push{lr,r2-r4} ;lr hat die Adresse wo es herkam, also muss man es hier pushen und poppen
  103.     ;damit in einem weiteren unterprogramm wieder zurück gegangen werden kann
  104.         mul r2,r0,r0 ;r2 ist a^2
  105.         mul r3,r1,r1 ;r3 ist b^2
  106.         mul r4,r0,r1 ;r4 ist a*b
  107.         lsl r4,r4,#1 ;r4 ist a*b, Bits um 1 verschieben um mit 2 zu multiplizieren
  108.         add r0,r2,r3 ;a^2 + b^2
  109.         add r0,r0,r4 ;(a^2 + b^2)+(2*a*b)
  110.     pop{lr,r2-r4}
  111.     bx lr   ;springt zurück
  112.         ENDP
  113.  
  114. ;--------------------------------------------
  115. ;--- Berechnet die Summe ueber alle Tabellenwerte
  116. ;--- Uebergabe der Parameter ueber Register
  117. ;--- in: R0 = Adr. der Tabelle
  118. ;--- in: R1 = Elementanzahl
  119. ;--- out: R0 = Summe aller Tabellenwerte
  120. ;--------------------------------------------
  121. TabAdd  PROC
  122.     push{lr,r2-r4}
  123. for_1
  124.     mov r2,#0 ;r2 als counter
  125.     mov r3,#0 ;r3 als Zwischensumme
  126. until_1
  127.     cmp r2,r1 ;solange bis elementanzahl erreicht
  128.     beq enddo_1
  129. do_1
  130.     ldr r4,[r0]
  131.     add r3,r4
  132. step_1
  133.     add r2,#1
  134.     add r0,#4 ; um Adresse auf nächstes Element zu setzen
  135.     b until_1
  136. enddo_1
  137.     mov r0,r3 ; damit endsumme in r0 ist
  138.     pop{lr,r2-r4}
  139.     bx lr   ;springt zurück
  140.         ENDP
  141.  
  142. ;--------------------------------------------
  143. ;--- Berechnet die 1. Binomische Formel
  144. ;--- Uebergabe der Parameter ueber den Stack
  145. ;--- in:  ?
  146. ;--- out: ?
  147. ;--------------------------------------------
  148. Binom2  PROC
  149.         push{fp,lr}
  150.         mov fp, sp
  151.         push{r1-r4} ;lr hat die Adresse wo es herkam, also muss man es hier pushen und poppen
  152.     ;damit in einem weiteren unterprogramm wieder zurück gegangen werden kann
  153.    
  154.         ldr r0, [fp, #8]
  155.         ldr r1, [fp, #12]
  156.    
  157.         mul r2,r0,r0 ;r2 ist a^2
  158.         mul r3,r1,r1 ;r3 ist b^2
  159.         mul r4,r0,r1 ;r4 ist a*b
  160.         lsl r4,r4,#1 ;r4 ist a*b, Bits um 1 verschieben um mit 2 zu multiplizieren
  161.         add r0,r2,r3 ;a^2 + b^2
  162.         add r0,r0,r4 ;(a^2 + b^2)+(2*a*b)
  163.     pop{r1-r4}
  164.     pop{fp,lr}
  165.     bx lr   ;springt zurück
  166.         ENDP
  167.    
  168.         ALIGN
  169.        
  170.         END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement