
wordfrequency
Dependencies: LCD_DISCO_F429ZI mbed TS_DISCO_F429ZI BSP_DISCO_F429ZI
Program4_F20_Nguyen.s@1:586013f67abf, 2020-12-07 (annotated)
- Committer:
- kaneyn
- Date:
- Mon Dec 07 18:23:27 2020 +0000
- Revision:
- 1:586013f67abf
- Parent:
- 0:349c994479c8
adasd; \;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kaneyn | 1:586013f67abf | 1 | AREA asm_func, CODE, READONLY, align = 8 |
kaneyn | 1:586013f67abf | 2 | |
kaneyn | 0:349c994479c8 | 3 | // R1 int32_t CountItems(); |
kaneyn | 0:349c994479c8 | 4 | // R2 int32_t SumAllFrequencies(); |
kaneyn | 0:349c994479c8 | 5 | // R3 uint8_t * GetWordAt(int32_t i); // NOTE: returns a pointer to a string |
kaneyn | 0:349c994479c8 | 6 | // R4 int16_t GetFreqAt(int32_t i); // NOTE: return the value of the frequency count |
kaneyn | 0:349c994479c8 | 7 | // |
kaneyn | 1:586013f67abf | 8 | |
kaneyn | 1:586013f67abf | 9 | |
kaneyn | 1:586013f67abf | 10 | GLOBAL SumAllFrequencies |
kaneyn | 1:586013f67abf | 11 | ;int32_t SumAllFrequencies() |
kaneyn | 1:586013f67abf | 12 | SumAllFrequencies |
kaneyn | 1:586013f67abf | 13 | |
kaneyn | 1:586013f67abf | 14 | LDR R9,=table |
kaneyn | 1:586013f67abf | 15 | PUSH{R4} |
kaneyn | 1:586013f67abf | 16 | MOV R5, #0 |
kaneyn | 1:586013f67abf | 17 | |
kaneyn | 1:586013f67abf | 18 | LDRH R6, [R9],#8 |
kaneyn | 1:586013f67abf | 19 | ADD R5, R5, R6 |
kaneyn | 1:586013f67abf | 20 | loop2 |
kaneyn | 1:586013f67abf | 21 | LDR R6, [R9],#12 |
kaneyn | 1:586013f67abf | 22 | CMP R6, #0 |
kaneyn | 1:586013f67abf | 23 | BEQ next |
kaneyn | 1:586013f67abf | 24 | ADD R5, R5, R6 |
kaneyn | 1:586013f67abf | 25 | b loop2 |
kaneyn | 1:586013f67abf | 26 | next |
kaneyn | 1:586013f67abf | 27 | MOV R0, #66 |
kaneyn | 1:586013f67abf | 28 | |
kaneyn | 1:586013f67abf | 29 | BX LR |
kaneyn | 1:586013f67abf | 30 | |
kaneyn | 0:349c994479c8 | 31 | GLOBAL CountItems |
kaneyn | 0:349c994479c8 | 32 | ;int32_t CountItems() |
kaneyn | 1:586013f67abf | 33 | CountItems |
kaneyn | 1:586013f67abf | 34 | |
kaneyn | 1:586013f67abf | 35 | LDR R2,=table |
kaneyn | 1:586013f67abf | 36 | MOV R5, #0 |
kaneyn | 1:586013f67abf | 37 | PUSH{R4} |
kaneyn | 1:586013f67abf | 38 | |
kaneyn | 0:349c994479c8 | 39 | loop |
kaneyn | 1:586013f67abf | 40 | LDRB R7, [R2],#12 |
kaneyn | 1:586013f67abf | 41 | CMP R7, #0 |
kaneyn | 0:349c994479c8 | 42 | BEQ leave |
kaneyn | 1:586013f67abf | 43 | ADD R5, #1 |
kaneyn | 0:349c994479c8 | 44 | b loop |
kaneyn | 1:586013f67abf | 45 | |
kaneyn | 0:349c994479c8 | 46 | leave |
kaneyn | 1:586013f67abf | 47 | STRB R5, [SP,#0] |
kaneyn | 1:586013f67abf | 48 | POP{R0} |
kaneyn | 1:586013f67abf | 49 | |
kaneyn | 0:349c994479c8 | 50 | BX LR |
kaneyn | 0:349c994479c8 | 51 | |
kaneyn | 1:586013f67abf | 52 | |
kaneyn | 1:586013f67abf | 53 | |
kaneyn | 1:586013f67abf | 54 | |
kaneyn | 0:349c994479c8 | 55 | GLOBAL GetWordAt |
kaneyn | 0:349c994479c8 | 56 | ;uint8_t * GetWordAt(int32_t i) |
kaneyn | 1:586013f67abf | 57 | GetWordAt |
kaneyn | 1:586013f67abf | 58 | LDR R5, =table |
kaneyn | 1:586013f67abf | 59 | MOV R9, #12 |
kaneyn | 1:586013f67abf | 60 | ;GET WORD AT I |
kaneyn | 1:586013f67abf | 61 | ;R2 = Max; |
kaneyn | 1:586013f67abf | 62 | ;R8 store the return address of the char |
kaneyn | 1:586013f67abf | 63 | |
kaneyn | 1:586013f67abf | 64 | MOV R3, R9 |
kaneyn | 1:586013f67abf | 65 | MUL R7, R0, R3 ; i*offset |
kaneyn | 1:586013f67abf | 66 | MOV R3, #0 |
kaneyn | 1:586013f67abf | 67 | grabWord |
kaneyn | 1:586013f67abf | 68 | LDRB R4, [R5, R7] |
kaneyn | 1:586013f67abf | 69 | CMP R4, #0 ;went through the i+1 |
kaneyn | 1:586013f67abf | 70 | BEQ end ;if word done, grab frequency next |
kaneyn | 1:586013f67abf | 71 | STRB R4, [R0, R3]; Store the string to address R8 |
kaneyn | 1:586013f67abf | 72 | ADD R7, R7, #1 ; |
kaneyn | 1:586013f67abf | 73 | ADD R3, R3, #1; |
kaneyn | 1:586013f67abf | 74 | b grabWord |
kaneyn | 1:586013f67abf | 75 | end |
kaneyn | 1:586013f67abf | 76 | |
kaneyn | 1:586013f67abf | 77 | BX LR |
kaneyn | 1:586013f67abf | 78 | |
kaneyn | 0:349c994479c8 | 79 | GLOBAL GetFreqAt |
kaneyn | 0:349c994479c8 | 80 | ;int16_t GetFreqAt(int32_t i) |
kaneyn | 0:349c994479c8 | 81 | GetFreqAt |
kaneyn | 1:586013f67abf | 82 | |
kaneyn | 1:586013f67abf | 83 | MOV R9, #12 |
kaneyn | 1:586013f67abf | 84 | |
kaneyn | 1:586013f67abf | 85 | ;GET FREQ At i |
kaneyn | 1:586013f67abf | 86 | LDR R8, =table |
kaneyn | 1:586013f67abf | 87 | MOV R3, #8 ;Frequency offset |
kaneyn | 1:586013f67abf | 88 | CMP R0, #1 |
kaneyn | 1:586013f67abf | 89 | BGT greaterThan1 ;If i more than 1 switch formula |
kaneyn | 0:349c994479c8 | 90 | |
kaneyn | 1:586013f67abf | 91 | MUL R7, R0, R3 ;Otherwise, get the value at offset 8 |
kaneyn | 1:586013f67abf | 92 | LDRH R4, [R8, R7] |
kaneyn | 1:586013f67abf | 93 | MOV R0, R4 |
kaneyn | 1:586013f67abf | 94 | b exit |
kaneyn | 1:586013f67abf | 95 | greaterThan1 ;i more than 1 |
kaneyn | 1:586013f67abf | 96 | MOV R3, #8 |
kaneyn | 1:586013f67abf | 97 | SUB R6, R6, #1 ; subtract 1 from i |
kaneyn | 1:586013f67abf | 98 | MUL R5, R6, R9 ; R0 is the new offset, (i-1)*12 |
kaneyn | 1:586013f67abf | 99 | ADD R7, R3, R5 ; Add new offset with #8 so it could move the the correct place where the data at |
kaneyn | 1:586013f67abf | 100 | LDRH R4, [R8, R7] ; Get the value of freq |
kaneyn | 1:586013f67abf | 101 | MOV R10, R4 |
kaneyn | 1:586013f67abf | 102 | exit |
kaneyn | 1:586013f67abf | 103 | MOV R0, R10 |
kaneyn | 1:586013f67abf | 104 | BX LR |
kaneyn | 1:586013f67abf | 105 | |
kaneyn | 1:586013f67abf | 106 | |
kaneyn | 1:586013f67abf | 107 | |
kaneyn | 1:586013f67abf | 108 | |
kaneyn | 1:586013f67abf | 109 | |
kaneyn | 0:349c994479c8 | 110 | table DCB "pears",0 |
kaneyn | 0:349c994479c8 | 111 | ALIGN 4 |
kaneyn | 0:349c994479c8 | 112 | DCW 8 ; Freq |
kaneyn | 0:349c994479c8 | 113 | SPACE 2 |
kaneyn | 1:586013f67abf | 114 | ;----------- |
kaneyn | 0:349c994479c8 | 115 | |
kaneyn | 0:349c994479c8 | 116 | DCB "apples",0 |
kaneyn | 0:349c994479c8 | 117 | ALIGN 4 |
kaneyn | 0:349c994479c8 | 118 | DCW 16 |
kaneyn | 0:349c994479c8 | 119 | SPACE 2 |
kaneyn | 1:586013f67abf | 120 | ;------------ |
kaneyn | 0:349c994479c8 | 121 | DCB "pie",0 |
kaneyn | 0:349c994479c8 | 122 | ALIGN 4 |
kaneyn | 0:349c994479c8 | 123 | space 4 |
kaneyn | 0:349c994479c8 | 124 | DCW 30 |
kaneyn | 0:349c994479c8 | 125 | SPACE 2 |
kaneyn | 1:586013f67abf | 126 | ;-------------- |
kaneyn | 0:349c994479c8 | 127 | DCB "beans",0 |
kaneyn | 0:349c994479c8 | 128 | ALIGN 4 |
kaneyn | 0:349c994479c8 | 129 | DCW 12 |
kaneyn | 0:349c994479c8 | 130 | SPACE 2 |
kaneyn | 1:586013f67abf | 131 | ALIGN 8 |
kaneyn | 1:586013f67abf | 132 | DCB 0 |
kaneyn | 1:586013f67abf | 133 | ALIGN 8 |
kaneyn | 0:349c994479c8 | 134 | DCB 0 |
kaneyn | 0:349c994479c8 | 135 | |
kaneyn | 0:349c994479c8 | 136 | |
kaneyn | 0:349c994479c8 | 137 | END |
kaneyn | 0:349c994479c8 | 138 | |
kaneyn | 0:349c994479c8 | 139 |