This is program 4

Dependencies:   LCD_DISCO_F429ZI mbed TS_DISCO_F429ZI BSP_DISCO_F429ZI

Revision:
0:37c51fede871
Child:
1:2308340de21d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PROGRAM4_F20_Harrison.s	Sun Dec 06 05:33:28 2020 +0000
@@ -0,0 +1,111 @@
+    AREA PROGRAM4, CODE, READONLY
+    
+    GLOBAL CountItems
+    ;int32_t CountItems()
+
+CountItems ; get max num of words
+    MOV R4, #0 ; track num of words
+    ADR R1, table ; get address of beginning of table
+    LDR R2, [R1] ; get value at address of beginning of table
+    MOV R3, #12 ; use to move to next word in table
+    B getWordCount
+    
+getWordCount
+    CMP R2, #0 ; compare value in table to 0
+    BEQ leave1 
+    ADD R4, R4, #1 ; add 1 to num of words
+    LDR R2, [R1, R3] ; move R3 num of bytes in the table
+    ADD R3, R3, #12 ; add 12 bytes to R3
+    B getWordCount ; loop back
+
+leave1
+    MOV R0, R4
+    BX LR
+
+    GLOBAL SumAllFrequencies
+    ;int32_t SumAllFrequencies()
+
+SumAllFrequencies
+    MOV R4, #0 ; track frequency num
+    ADR R1, table ; get address of beginning of table
+    MOV R3, #8 ; use 8 to account for word being first in table
+    LDR R2, [R1, R3] ; get value where first frequency is stored in table
+    ADD R3, R3, #12 ; use to move to next frequency in table
+    B getFrequencyCount
+
+getFrequencyCount
+    CMP R2, #0 ; compare value in table to 0
+    BEQ leave ; break because looped through entire table
+    ADD R4, R4, R2 ; add current frequency to total frequency
+    LDR R2, [R1, R3] ; move R3 num of bytes in the table
+    ADD R3, R3, #12 ; add 24 bytes to R3
+    B getFrequencyCount ; loop back
+    
+leave
+    MOV R0, R4
+    BX LR
+
+    GLOBAL GetWordAt
+    ;uint8_t * GetWordAt(int32_t i)
+
+GetWordAt
+    MOV R1, #1
+    ADR R2, table ; get address of beginning of table
+    LDR R3, [R2] ; get value at address of beginning of table
+    MOV R4, #24 ; use to move to next word in table
+    B findWord
+    
+findWord
+    CMP R1, R0 ; compare 1 to i
+    BEQ wordFound ; break because word found
+    LDR R3, [R2, R4] ; move R4 num of bytes in table
+    ADD R4, R4, #24 ; add 24 bytes to R3
+    B wordFound
+    
+wordFound
+    MOV R0, R3
+    BX LR
+
+    GLOBAL GetFreqAt
+    ;int16_t GetFreqAt(int32_t i)
+    
+GetFreqAt
+    MOV R1, #1
+    ADR R2, table ; get address of beginning of table
+    MOV R3, #8 ; use 8 to account for word being first in table
+    LDR R4, [R2, R3] ; get value where first frequency is stored in table
+    ADD R3, R3, #12 ; use to move to next frequency in table
+    B findFrequency
+    
+findFrequency
+    CMP R1, R0 ; compare 1 to i
+    BEQ frequencyFound ; break because frequency found
+    LDR R4, [R2, R3] ; move R3 num of bytes in table
+    ADD R4, R4, #12 ; add 12 bytes to R3
+    B findFrequency
+    
+frequencyFound
+    MOV R0, R3
+    BX LR
+
+stop B stop
+
+table       DCB "pears",0
+            SPACE 2
+            DCW 8
+            SPACE 2
+            DCB "apples",0
+            SPACE 1
+            DCW 16
+            SPACE 2
+            DCB "pie",0
+            SPACE 4
+            DCW 30
+            SPACE 2
+            DCB "beans",0
+            SPACE 2
+            DCW 12
+            SPACE 2
+            DCB 0
+
+    END
\ No newline at end of file