This is program 4

Dependencies:   LCD_DISCO_F429ZI mbed TS_DISCO_F429ZI BSP_DISCO_F429ZI

Committer:
mcharrison17
Date:
Mon Dec 07 18:45:28 2020 +0000
Revision:
3:2ec663c724ea
Parent:
2:a38c09fad0fe
Child:
4:febba9dd921b
Updated code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcharrison17 0:37c51fede871 1 AREA PROGRAM4, CODE, READONLY
mcharrison17 0:37c51fede871 2
mcharrison17 0:37c51fede871 3 GLOBAL CountItems
mcharrison17 0:37c51fede871 4 ;int32_t CountItems()
mcharrison17 2:a38c09fad0fe 5
mcharrison17 0:37c51fede871 6 CountItems ; get max num of words
mcharrison17 3:2ec663c724ea 7 MOV R0, #0 ; track num of words
mcharrison17 3:2ec663c724ea 8 LDR R1,= table ; get address of beginning of table
mcharrison17 3:2ec663c724ea 9 MOV R3, #14 ; use to move to next word in table
mcharrison17 3:2ec663c724ea 10 LDR R2, [R1, R3] ; move R3 num of bytes in the table
mcharrison17 0:37c51fede871 11 B getWordCount
mcharrison17 0:37c51fede871 12
mcharrison17 0:37c51fede871 13 getWordCount
mcharrison17 0:37c51fede871 14 CMP R2, #0 ; compare value in table to 0
mcharrison17 0:37c51fede871 15 BEQ leave1
mcharrison17 3:2ec663c724ea 16 ADD R0, R0, #1 ; add 1 to num of words
mcharrison17 1:2308340de21d 17 LDR R2, [R1, R3] ; move R3 num of bytes in the table
mcharrison17 3:2ec663c724ea 18 ADD R3, R3, #14 ; add 14 bytes to R3
mcharrison17 0:37c51fede871 19 B getWordCount ; loop back
mcharrison17 0:37c51fede871 20
mcharrison17 3:2ec663c724ea 21 leave1
mcharrison17 0:37c51fede871 22 BX LR
mcharrison17 0:37c51fede871 23
mcharrison17 0:37c51fede871 24 GLOBAL SumAllFrequencies
mcharrison17 0:37c51fede871 25 ;int32_t SumAllFrequencies()
mcharrison17 0:37c51fede871 26
mcharrison17 0:37c51fede871 27 SumAllFrequencies
mcharrison17 3:2ec663c724ea 28 MOV R0, #0 ; track frequency num
mcharrison17 3:2ec663c724ea 29 LDR R1,= table ; get address of beginning of table
mcharrison17 3:2ec663c724ea 30 MOV R3, #12 ; use 12 to account for word being first in table
mcharrison17 3:2ec663c724ea 31 LDRH R2, [R1, R3] ; get value where first frequency is stored in table
mcharrison17 3:2ec663c724ea 32 ADD R3, R3, #14
mcharrison17 0:37c51fede871 33 B getFrequencyCount
mcharrison17 0:37c51fede871 34
mcharrison17 0:37c51fede871 35 getFrequencyCount
mcharrison17 0:37c51fede871 36 CMP R2, #0 ; compare value in table to 0
mcharrison17 0:37c51fede871 37 BEQ leave ; break because looped through entire table
mcharrison17 3:2ec663c724ea 38 ADD R0, R0, R2 ; add current frequency to total frequency
mcharrison17 3:2ec663c724ea 39 LDRH R2, [R1, R3] ; move R3 num of bytes in the table
mcharrison17 3:2ec663c724ea 40 ADD R3, R3, #14 ; add 14 bytes to R3
mcharrison17 0:37c51fede871 41 B getFrequencyCount ; loop back
mcharrison17 0:37c51fede871 42
mcharrison17 0:37c51fede871 43 leave
mcharrison17 0:37c51fede871 44 BX LR
mcharrison17 0:37c51fede871 45
mcharrison17 0:37c51fede871 46 GLOBAL GetWordAt
mcharrison17 0:37c51fede871 47 ;uint8_t * GetWordAt(int32_t i)
mcharrison17 0:37c51fede871 48
mcharrison17 0:37c51fede871 49 GetWordAt
mcharrison17 0:37c51fede871 50 MOV R1, #1
mcharrison17 0:37c51fede871 51 ADR R2, table ; get address of beginning of table
mcharrison17 0:37c51fede871 52 LDR R3, [R2] ; get value at address of beginning of table
mcharrison17 3:2ec663c724ea 53 MOV R4, #14 ; use to move to next word in table
mcharrison17 0:37c51fede871 54 B findWord
mcharrison17 0:37c51fede871 55
mcharrison17 0:37c51fede871 56 findWord
mcharrison17 0:37c51fede871 57 CMP R1, R0 ; compare 1 to i
mcharrison17 0:37c51fede871 58 BEQ wordFound ; break because word found
mcharrison17 0:37c51fede871 59 LDR R3, [R2, R4] ; move R4 num of bytes in table
mcharrison17 3:2ec663c724ea 60 ADD R4, R4, #14 ; add 14 bytes to R3
mcharrison17 2:a38c09fad0fe 61 ADD R1, R1, #1
mcharrison17 2:a38c09fad0fe 62 B findWord
mcharrison17 0:37c51fede871 63
mcharrison17 0:37c51fede871 64 wordFound
mcharrison17 0:37c51fede871 65 MOV R0, R3
mcharrison17 0:37c51fede871 66 BX LR
mcharrison17 0:37c51fede871 67
mcharrison17 0:37c51fede871 68 GLOBAL GetFreqAt
mcharrison17 0:37c51fede871 69 ;int16_t GetFreqAt(int32_t i)
mcharrison17 0:37c51fede871 70
mcharrison17 0:37c51fede871 71 GetFreqAt
mcharrison17 0:37c51fede871 72 MOV R1, #1
mcharrison17 0:37c51fede871 73 ADR R2, table ; get address of beginning of table
mcharrison17 0:37c51fede871 74 MOV R3, #8 ; use 8 to account for word being first in table
mcharrison17 2:a38c09fad0fe 75 LDRH R4, [R2, R3] ; get value where first frequency is stored in table
mcharrison17 0:37c51fede871 76 ADD R3, R3, #12 ; use to move to next frequency in table
mcharrison17 0:37c51fede871 77 B findFrequency
mcharrison17 0:37c51fede871 78
mcharrison17 0:37c51fede871 79 findFrequency
mcharrison17 2:a38c09fad0fe 80 CMP R1, R0 ; compare R1 to i
mcharrison17 0:37c51fede871 81 BEQ frequencyFound ; break because frequency found
mcharrison17 2:a38c09fad0fe 82 LDRH R4, [R2, R3] ; move R3 num of bytes in table
mcharrison17 2:a38c09fad0fe 83 ADD R3, R3, #12 ; add 12 bytes to R3
mcharrison17 2:a38c09fad0fe 84 ADD R1, R1, #1
mcharrison17 0:37c51fede871 85 B findFrequency
mcharrison17 0:37c51fede871 86
mcharrison17 0:37c51fede871 87 frequencyFound
mcharrison17 2:a38c09fad0fe 88 MOV R0, R4
mcharrison17 0:37c51fede871 89 BX LR
mcharrison17 0:37c51fede871 90
mcharrison17 3:2ec663c724ea 91 ALIGN
mcharrison17 2:a38c09fad0fe 92 table DCB "pie",0
mcharrison17 3:2ec663c724ea 93 SPACE 8
mcharrison17 2:a38c09fad0fe 94 DCW 34
mcharrison17 3:2ec663c724ea 95
mcharrison17 2:a38c09fad0fe 96 DCB "cake",0
mcharrison17 3:2ec663c724ea 97 SPACE 7
mcharrison17 2:a38c09fad0fe 98 DCW 29
mcharrison17 3:2ec663c724ea 99
mcharrison17 2:a38c09fad0fe 100 DCB "souffle",0
mcharrison17 3:2ec663c724ea 101 SPACE 4
mcharrison17 2:a38c09fad0fe 102 DCW 22
mcharrison17 3:2ec663c724ea 103
mcharrison17 2:a38c09fad0fe 104 DCB "cookie",0
mcharrison17 3:2ec663c724ea 105 SPACE 5
mcharrison17 2:a38c09fad0fe 106 DCW 15
mcharrison17 3:2ec663c724ea 107
mcharrison17 0:37c51fede871 108 DCB 0
mcharrison17 0:37c51fede871 109
mcharrison17 0:37c51fede871 110 END