wordfrequency

Dependencies:   LCD_DISCO_F429ZI mbed TS_DISCO_F429ZI BSP_DISCO_F429ZI

Committer:
kaneyn
Date:
Mon Dec 07 18:23:27 2020 +0000
Revision:
1:586013f67abf
Parent:
0:349c994479c8
adasd; \;

Who changed what in which revision?

UserRevisionLine numberNew 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