This is program 4
Dependencies: LCD_DISCO_F429ZI mbed TS_DISCO_F429ZI BSP_DISCO_F429ZI
Diff: PROGRAM4_F20_Harrison.s
- 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