You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.1 KiB
65 lines
1.1 KiB
4 years ago
|
\section{Παράρτημα Α}
|
||
|
|
||
|
\subsection{Κώδικας}
|
||
|
|
||
|
\begin{lstlisting}[language=C]
|
||
|
#include <stdio.h>
|
||
|
#include <stdint.h>
|
||
|
|
||
|
static const uint8_t hashtbl[] = {
|
||
|
18, 11, 10, 21, 7, 5, 9, 22, 17, 2, 12, 3, 19, 1, 14, 16, 20, 8, 23, 4, 26, 15, 6, 24, 13, 25
|
||
|
};
|
||
|
|
||
|
__asm int generate_hash( const char *str, const uint8_t *hashtbl, int *hashptr )
|
||
|
{
|
||
|
input_str RN r0
|
||
|
hashtbl RN r1
|
||
|
hashptr RN r2
|
||
|
curr_char RN r6
|
||
|
hash_val RN r3
|
||
|
|
||
|
MOV hash_val, #0
|
||
|
hash_loop
|
||
|
LDRB curr_char, [input_str]
|
||
|
CMP curr_char, #'0'
|
||
|
BLS hash_skip
|
||
|
|
||
|
CMP curr_char, #'9'
|
||
|
SUBLS hash_val, curr_char
|
||
|
ADDLS hash_val, #48
|
||
|
BLS hash_skip
|
||
|
|
||
|
CMP curr_char, #'A' - 1
|
||
|
BLS hash_skip
|
||
|
|
||
|
CMP curr_char, #'Z'
|
||
|
BHI hash_skip
|
||
|
|
||
|
SUB r4, curr_char, #65
|
||
|
ADD r4, hashtbl, r4
|
||
|
LDRB r5, [r4]
|
||
|
ADD hash_val, r5
|
||
|
|
||
|
hash_skip
|
||
|
ADD input_str, input_str, #
|
||
|
CMP curr_char, #0
|
||
|
BNE hash_loop
|
||
|
MOVEQ r0, hash_val
|
||
|
STR hash_val, [hashptr]
|
||
|
BX lr
|
||
|
}
|
||
|
|
||
|
int main( void )
|
||
|
{
|
||
|
static const char STRING_TO_HASH[] = "FD7N8JT!EGMIQH2@3ZW0ABCRSLOYV45PK1#X6U!9";
|
||
|
int hash = 0;
|
||
|
int hash2;
|
||
|
|
||
|
hash = generate_hash(STRING_TO_HASH, hashtbl, &hash2);
|
||
|
printf("%d", hash);
|
||
|
printf("%d", hash2);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
\end{lstlisting}
|