Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;******************** (C) COPYRIGHT HAW-Hamburg ********************************
- ;* File Name : main.s
- ;* Author : Tobias Jaehnichen
- ;* Version : V1.0
- ;* Date : 21.11.2018
- ;* Description : Grundgeruest fuer die Vorbereitungsaufgabe zu Praktikum 3
- ;*
- ;*******************************************************************************
- EXTERN Init_TI_Board ; Initialize the serial line
- EXTERN ADC3_CH7_DMA_Config ; Initialize the ADC
- EXTERN initHW ; Init Timer
- EXTERN puts ; C output function
- EXTERN TFT_puts ; TFT output function
- EXTERN TFT_cls ; TFT clear function
- EXTERN TFT_gotoxy ; TFT goto x y function
- EXTERN Delay ; Delay (ms) function
- EXTERN GPIO_G_SET ; Set output-LEDs
- EXTERN GPIO_G_CLR ; Clear output-LEDs
- EXTERN GPIO_G_PIN ; Output-LEDs status
- EXTERN GPIO_E_PIN ; Button status
- EXTERN ADC3_DR ; ADC Value (ADC3_CH7_DMA_Config has to be called before)
- WORDSIZE EQU 4
- ;********************************************
- ; Data section, aligned on 4-byte boundery
- ;********************************************
- AREA MyData, DATA, align = 2
- GLOBAL Base
- GLOBAL V1
- GLOBAL V2
- GLOBAL Tab1
- Base
- V1 DCD 15
- V2 DCD 368
- Tab1 DCD 12, 45, 56, -1
- ;********************************************
- ; Code section, aligned on 8-byte boundery
- ;********************************************
- AREA |.text|, CODE, READONLY, ALIGN = 3
- ;--------------------------------------------
- ; main subroutine
- ;--------------------------------------------
- EXPORT main [CODE]
- main PROC
- ;--------------------------------------------
- ; Aufgabe 1
- ;--------------------------------------------
- ldr r0, V1 ; Laden der Variablen V1 und V2
- ldr r1, V2
- bl Binom1 ; Aufruf von Binom1
- ;--------------------------------------------
- ; Aufgabe 2
- ;--------------------------------------------
- mov r0,#12355 ; Laden der Konstanten 12355 und 12
- mov r1,#12
- bl Binom1 ; Aufruf von Binom1
- ;--------------------------------------------
- ; Aufgabe 5
- ;--------------------------------------------
- ldr r0,Tab1 ; Laden der Adresse von Tab1
- mov r1,#4 ; und der Elementanzahl 4
- bl TabAdd ; Aufruf von TabAdd
- ;--------------------------------------------
- ; Aufgabe 7
- ;--------------------------------------------
- ldr r1,=Base
- ldr r2,[r1,#V1-Base] ; Laden der Variablen V1 und V2
- ldr r3,[r1,#V2-Base]
- push{r2,r3} ; und uebergabe an den Stack
- bl Binom2 ; Aufruf von Binom2
- add sp, #2*WORDSIZE
- forever b forever ; nowhere to return if main ends
- ENDP
- ;--------------------------------------------
- ;--- Berechnet die 1. Binomische Formel
- ;--- Uebergabe der Parameter ueber Register
- ;--- in: R0 = a
- ;--- in: R1 = b
- ;--- out: R0 = (a+b) * (a+b) -> a^2 + 2ab + b^2
- ;--------------------------------------------
- Binom1 PROC
- push{lr,r2-r4} ;lr hat die Adresse wo es herkam, also muss man es hier pushen und poppen
- ;damit in einem weiteren unterprogramm wieder zurück gegangen werden kann
- mul r2,r0,r0 ;r2 ist a^2
- mul r3,r1,r1 ;r3 ist b^2
- mul r4,r0,r1 ;r4 ist a*b
- lsl r4,r4,#1 ;r4 ist a*b, Bits um 1 verschieben um mit 2 zu multiplizieren
- add r0,r2,r3 ;a^2 + b^2
- add r0,r0,r4 ;(a^2 + b^2)+(2*a*b)
- pop{lr,r2-r4}
- bx lr ;springt zurück
- ENDP
- ;--------------------------------------------
- ;--- Berechnet die Summe ueber alle Tabellenwerte
- ;--- Uebergabe der Parameter ueber Register
- ;--- in: R0 = Adr. der Tabelle
- ;--- in: R1 = Elementanzahl
- ;--- out: R0 = Summe aller Tabellenwerte
- ;--------------------------------------------
- TabAdd PROC
- push{lr,r2-r4}
- for_1
- mov r2,#0 ;r2 als counter
- mov r3,#0 ;r3 als Zwischensumme
- until_1
- cmp r2,r1 ;solange bis elementanzahl erreicht
- beq enddo_1
- do_1
- ldr r4,[r0]
- add r3,r4
- step_1
- add r2,#1
- add r0,#4 ; um Adresse auf nächstes Element zu setzen
- b until_1
- enddo_1
- mov r0,r3 ; damit endsumme in r0 ist
- pop{lr,r2-r4}
- bx lr ;springt zurück
- ENDP
- ;--------------------------------------------
- ;--- Berechnet die 1. Binomische Formel
- ;--- Uebergabe der Parameter ueber den Stack
- ;--- in: ?
- ;--- out: ?
- ;--------------------------------------------
- Binom2 PROC
- push{fp,lr}
- mov fp, sp
- push{r1-r4} ;lr hat die Adresse wo es herkam, also muss man es hier pushen und poppen
- ;damit in einem weiteren unterprogramm wieder zurück gegangen werden kann
- ldr r0, [fp, #8]
- ldr r1, [fp, #12]
- mul r2,r0,r0 ;r2 ist a^2
- mul r3,r1,r1 ;r3 ist b^2
- mul r4,r0,r1 ;r4 ist a*b
- lsl r4,r4,#1 ;r4 ist a*b, Bits um 1 verschieben um mit 2 zu multiplizieren
- add r0,r2,r3 ;a^2 + b^2
- add r0,r0,r4 ;(a^2 + b^2)+(2*a*b)
- pop{r1-r4}
- pop{fp,lr}
- bx lr ;springt zurück
- ENDP
- ALIGN
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement