This is program 4

Dependencies:   LCD_DISCO_F429ZI mbed TS_DISCO_F429ZI BSP_DISCO_F429ZI

PROGRAM4_F20_Harrison.s

Committer:
mcharrison17
Date:
2020-12-06
Revision:
0:37c51fede871
Child:
1:2308340de21d

File content as of revision 0:37c51fede871:

    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