Semester assignments for the course "Microprocessors and Peripherals" of THMMY in AUTH university.
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

\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}