Apostolos Fanakis
4 years ago
9 changed files with 450 additions and 0 deletions
@ -0,0 +1,284 @@ |
|||||
|
## Core latex/pdflatex auxiliary files: |
||||
|
*.aux |
||||
|
*.lof |
||||
|
*.log |
||||
|
*.lot |
||||
|
*.fls |
||||
|
*.out |
||||
|
*.toc |
||||
|
*.fmt |
||||
|
*.fot |
||||
|
*.cb |
||||
|
*.cb2 |
||||
|
.*.lb |
||||
|
|
||||
|
## Intermediate documents: |
||||
|
*.dvi |
||||
|
*.xdv |
||||
|
*-converted-to.* |
||||
|
# these rules might exclude image files for figures etc. |
||||
|
# *.ps |
||||
|
# *.eps |
||||
|
# *.pdf |
||||
|
|
||||
|
## Generated if empty string is given at "Please type another file name for output:" |
||||
|
.pdf |
||||
|
|
||||
|
## Bibliography auxiliary files (bibtex/biblatex/biber): |
||||
|
*.bbl |
||||
|
*.bcf |
||||
|
*.blg |
||||
|
*-blx.aux |
||||
|
*-blx.bib |
||||
|
*.run.xml |
||||
|
|
||||
|
## Build tool auxiliary files: |
||||
|
*.fdb_latexmk |
||||
|
*.synctex |
||||
|
*.synctex(busy) |
||||
|
*.synctex.gz |
||||
|
*.synctex.gz(busy) |
||||
|
*.pdfsync |
||||
|
|
||||
|
## Build tool directories for auxiliary files |
||||
|
# latexrun |
||||
|
latex.out/ |
||||
|
|
||||
|
## Auxiliary and intermediate files from other packages: |
||||
|
# algorithms |
||||
|
*.alg |
||||
|
*.loa |
||||
|
|
||||
|
# achemso |
||||
|
acs-*.bib |
||||
|
|
||||
|
# amsthm |
||||
|
*.thm |
||||
|
|
||||
|
# beamer |
||||
|
*.nav |
||||
|
*.pre |
||||
|
*.snm |
||||
|
*.vrb |
||||
|
|
||||
|
# changes |
||||
|
*.soc |
||||
|
|
||||
|
# comment |
||||
|
*.cut |
||||
|
|
||||
|
# cprotect |
||||
|
*.cpt |
||||
|
|
||||
|
# elsarticle (documentclass of Elsevier journals) |
||||
|
*.spl |
||||
|
|
||||
|
# endnotes |
||||
|
*.ent |
||||
|
|
||||
|
# fixme |
||||
|
*.lox |
||||
|
|
||||
|
# feynmf/feynmp |
||||
|
*.mf |
||||
|
*.mp |
||||
|
*.t[1-9] |
||||
|
*.t[1-9][0-9] |
||||
|
*.tfm |
||||
|
|
||||
|
#(r)(e)ledmac/(r)(e)ledpar |
||||
|
*.end |
||||
|
*.?end |
||||
|
*.[1-9] |
||||
|
*.[1-9][0-9] |
||||
|
*.[1-9][0-9][0-9] |
||||
|
*.[1-9]R |
||||
|
*.[1-9][0-9]R |
||||
|
*.[1-9][0-9][0-9]R |
||||
|
*.eledsec[1-9] |
||||
|
*.eledsec[1-9]R |
||||
|
*.eledsec[1-9][0-9] |
||||
|
*.eledsec[1-9][0-9]R |
||||
|
*.eledsec[1-9][0-9][0-9] |
||||
|
*.eledsec[1-9][0-9][0-9]R |
||||
|
|
||||
|
# glossaries |
||||
|
*.acn |
||||
|
*.acr |
||||
|
*.glg |
||||
|
*.glo |
||||
|
*.gls |
||||
|
*.glsdefs |
||||
|
*.lzo |
||||
|
*.lzs |
||||
|
|
||||
|
# uncomment this for glossaries-extra (will ignore makeindex's style files!) |
||||
|
# *.ist |
||||
|
|
||||
|
# gnuplottex |
||||
|
*-gnuplottex-* |
||||
|
|
||||
|
# gregoriotex |
||||
|
*.gaux |
||||
|
*.gtex |
||||
|
|
||||
|
# htlatex |
||||
|
*.4ct |
||||
|
*.4tc |
||||
|
*.idv |
||||
|
*.lg |
||||
|
*.trc |
||||
|
*.xref |
||||
|
|
||||
|
# hyperref |
||||
|
*.brf |
||||
|
|
||||
|
# knitr |
||||
|
*-concordance.tex |
||||
|
# TODO Uncomment the next line if you use knitr and want to ignore its generated tikz files |
||||
|
# *.tikz |
||||
|
*-tikzDictionary |
||||
|
|
||||
|
# listings |
||||
|
*.lol |
||||
|
|
||||
|
# luatexja-ruby |
||||
|
*.ltjruby |
||||
|
|
||||
|
# makeidx |
||||
|
*.idx |
||||
|
*.ilg |
||||
|
*.ind |
||||
|
|
||||
|
# minitoc |
||||
|
*.maf |
||||
|
*.mlf |
||||
|
*.mlt |
||||
|
*.mtc[0-9]* |
||||
|
*.slf[0-9]* |
||||
|
*.slt[0-9]* |
||||
|
*.stc[0-9]* |
||||
|
|
||||
|
# minted |
||||
|
_minted* |
||||
|
*.pyg |
||||
|
|
||||
|
# morewrites |
||||
|
*.mw |
||||
|
|
||||
|
# nomencl |
||||
|
*.nlg |
||||
|
*.nlo |
||||
|
*.nls |
||||
|
|
||||
|
# pax |
||||
|
*.pax |
||||
|
|
||||
|
# pdfpcnotes |
||||
|
*.pdfpc |
||||
|
|
||||
|
# sagetex |
||||
|
*.sagetex.sage |
||||
|
*.sagetex.py |
||||
|
*.sagetex.scmd |
||||
|
|
||||
|
# scrwfile |
||||
|
*.wrt |
||||
|
|
||||
|
# sympy |
||||
|
*.sout |
||||
|
*.sympy |
||||
|
sympy-plots-for-*.tex/ |
||||
|
|
||||
|
# pdfcomment |
||||
|
*.upa |
||||
|
*.upb |
||||
|
|
||||
|
# pythontex |
||||
|
*.pytxcode |
||||
|
pythontex-files-*/ |
||||
|
|
||||
|
# tcolorbox |
||||
|
*.listing |
||||
|
|
||||
|
# thmtools |
||||
|
*.loe |
||||
|
|
||||
|
# TikZ & PGF |
||||
|
*.dpth |
||||
|
*.md5 |
||||
|
*.auxlock |
||||
|
|
||||
|
# todonotes |
||||
|
*.tdo |
||||
|
|
||||
|
# vhistory |
||||
|
*.hst |
||||
|
*.ver |
||||
|
|
||||
|
# easy-todo |
||||
|
*.lod |
||||
|
|
||||
|
# xcolor |
||||
|
*.xcp |
||||
|
|
||||
|
# xmpincl |
||||
|
*.xmpi |
||||
|
|
||||
|
# xindy |
||||
|
*.xdy |
||||
|
|
||||
|
# xypic precompiled matrices and outlines |
||||
|
*.xyc |
||||
|
*.xyd |
||||
|
|
||||
|
# endfloat |
||||
|
*.ttt |
||||
|
*.fff |
||||
|
|
||||
|
# Latexian |
||||
|
TSWLatexianTemp* |
||||
|
|
||||
|
## Editors: |
||||
|
# WinEdt |
||||
|
*.bak |
||||
|
*.sav |
||||
|
|
||||
|
# Texpad |
||||
|
.texpadtmp |
||||
|
|
||||
|
# LyX |
||||
|
*.lyx~ |
||||
|
|
||||
|
# Kile |
||||
|
*.backup |
||||
|
|
||||
|
# gummi |
||||
|
.*.swp |
||||
|
|
||||
|
# KBibTeX |
||||
|
*~[0-9]* |
||||
|
|
||||
|
# TeXnicCenter |
||||
|
*.tps |
||||
|
|
||||
|
# auto folder when using emacs and auctex |
||||
|
./auto/* |
||||
|
*.el |
||||
|
|
||||
|
# expex forward references with \gathertags |
||||
|
*-tags.tex |
||||
|
|
||||
|
# standalone packages |
||||
|
*.sta |
||||
|
|
||||
|
# Makeindex log files |
||||
|
*.lpz |
||||
|
|
||||
|
# xwatermark package |
||||
|
*.xwm |
||||
|
|
||||
|
# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib |
||||
|
# option is specified. Footnotes are the stored in a file with suffix Notes.bib. |
||||
|
# Uncomment the next line to have this generated file ignored. |
||||
|
#*Notes.bib |
@ -0,0 +1,5 @@ |
|||||
|
\section{Εισαγωγή} |
||||
|
|
||||
|
Το παρόν έγγραφο είναι η αναφορά του πρώτου εργαστηρίου στο μάθημα Μικροεπεξεργαστές και Περιφερειακά. Στο πρώτο εργαστήριο μας ζητήθηκε να υλοποιήσουμε κώδικα που θα υπολογίζει την τιμή κατακερματισμού (hash) μίας αλφαριθμητικής ακολουθίας. Η βασική ρουτίνα main υλοποιήθηκε στη γλώσσα C και περιλαμβάνει την αρχικοποίηση του αλφαριθμητικού, την κλήση της συνάρτησης κατακερματισμού και την τύπωση της τιμής στην κονσόλα. Η συνάρτηση κατακερματισμού υλοποιήθηκε σε ARM Assembly, δέχεται ως ορίσματα το αλφαριθμητικό προς κατακερματισμό και τη διεύθυνση ενός lookup table με τις τιμές κατακερματισμού κάθε γράμματος που μας δόθηκαν στην εκφώνηση της άσκησης. |
||||
|
|
||||
|
Ο κώδικας είναι διαθέσιμος στο παράρτημα καθώς και στο Gitlab repository \href{https://gitlab.com/apostolof-ece-auth-gr/microprocessors-and-peripherals-2021}{εδώ}. |
@ -0,0 +1,24 @@ |
|||||
|
\section{Υλοποίηση} |
||||
|
|
||||
|
Στα πλαίσια του εργαστηρίου υλοποιήθηκε συνάρτησης σε ARM Assembly με την παρακάτω υπογραφή: |
||||
|
|
||||
|
\colorbox{codebackground}{ |
||||
|
\footnotesize\texttt{int generate\_hash( const char *str, const uint8\_t *hashtbl, int *hashptr )} |
||||
|
} |
||||
|
|
||||
|
Αρχικά, δόθηκαν ονόματα στους καταχωρητές οι οποίοι χρησιμοποιήθηκαν μέσα στη συνάρτηση ώστε αυτή να είναι πιο εύχρηστοι. Τονίζεται εδώ ότι ο καταχωρητής R0 είναι ο δείκτης (pointer) προς το αλφαριθμητικό (πρώτο όρισμα της συνάρτησης), ο καταχωρητής R1 είναι ο δείκτης προς το lookup table (δεύτερο όρισμα της συνάρτησης), ενώ ο καταχωρητής R3 είναι ο δείκτης προς τον ακέραιο αριθμό στον οποίο θα αποθηκευτεί το αποτέλεσμα της συνάρτησης (τρίτο όρισμα της συνάρτησης). |
||||
|
|
||||
|
Για την αποθήκευση και εύρεση των τιμών κατακερματισμού κάθε γράμματος δημιουργήθηκε ένα lookup table που αποθηκεύει στη μνήμη πίνακα με τις τιμές των γραμμάτων σειριακά. Έτσι, για την εύρεση της κατάλληλης τιμής αρκεί ο pointer που δείχνει στον πίνακα να μετακινηθεί τόσες θέσεις όσες η απόσταση του εκάστοτε γράμματος από τον χαρακτήρα A στο ASCII table. |
||||
|
|
||||
|
Έπειτα υλοποιήθηκε ένα τμήμα κώδικα με ετικέτα (label) hash\_loop. Ο κώδικας αυτός φορτώνει στη μνήμη το επόμενο γράμμα και μετά από μία σειρά ελέγχων αποφασίζει τη σωστή διαχείριση: |
||||
|
|
||||
|
\begin{itemize} |
||||
|
|
||||
|
\item Αν ο χαρακτήρας είναι μικρότερος από τον χαρακτήρα ``0'' στο ASCII table ή είναι ίσος με αυτόν, τότε το πρόγραμμα προσπερνάει αυτόν τον χαρακτήρα και πηγαίνει στο label hash\_skip |
||||
|
\item Αν ο χαρακτήρας είναι μικρότερος ή ίσος με το ``9'' στο ASCII table (δηλαδή ο χαρακτήρας είναι 1-9) τότε η τιμή του αφαιρείται από το hash\_val και έπειτα προστίθεται 48 διότι τα αριθμητικά ψηφία στο ASCII table ξεκινούν από το 48 |
||||
|
\item Αν ο χαρακτήρας είναι μικρότερος από τον χαρακτήρα ``A'', τότε το πρόγραμμα προσπερνάει τον χαρακτήρα και πηγαίνει στο label hash\_skip |
||||
|
\item Αν ο χαρακτήρας είναι μεγαλύτερος από τον χαρακτήρα ``Z'', τότε το πρόγραμμα προσπερνάει τον χαρακτήρα και πηγαίνει στο label hash\_skip |
||||
|
\item Σε κάθε άλλη περίπτωση (δηλαδή ο χαρακτήρας είναι A-Z), αφαιρούμε την τιμή 65 (η τιμή του ``A'' στο ASCII table) από τον χαρακτήρα ώστε να πάρουμε τη θέση του χαρακτήρα στο lookup table, έπειτα προσθέτουμε στη θέση τη διεύθυνση του lookup table, φορτώνουμε την τιμή της θέσης που έχει υπολογιστεί και την προσθέτουμε στο hash\_val |
||||
|
\end{itemize} |
||||
|
|
||||
|
Το τελευταίο τμήμα κώδικα που υλοποιήσαμε είναι αυτό με label hash\_skip. Σε αυτόν τον κώδικα αυξάνουμε την τιμή του pointer του αλφαριθμητικού κατά ένα. Μετά ελέγχουμε αν ο τελευταίος χαρακτήρας που διαβάστηκε είναι ίσος με τον χαρακτήρα NUL (τερματισμός string της C, ``/0'') και αν η ισότητα ισχύει, άρα έχουμε φτάσει στο τέλος του αλφαριθμητικού επομένως μεταφέρουμε το hash\_val στον καταχωρητή r0 ο οποίος είναι ο καταχωρητής που επιστρέφει και επιστρέφουμε από τη συνάρτηση. Ενώ, σε περίπτωση που η ισότητα δεν ισχύει κάνουμε branch εκ νέου στο label hash\_loop. |
@ -0,0 +1,3 @@ |
|||||
|
\section{Προβλήματα που αντιμετωπίστηκαν} |
||||
|
|
||||
|
Αρχικά έγινε προσπάθεια δημιουργίας του lookup table μέσα στο κομμάτι κώδικα της Assembly. Μετά από διάφορες δοκιμές και προσεγγίσεις, η προσπάθεια αυτή απέτυχε. Ως λύση στη δήλωση και αρχικοποίηση του lookup table, έγινε ορισμός του ως στατική (static), global σταθερά (const) της C και η διεύθυνση του πίνακα δόθηκε ως παράμετρος στη συνάρτηση. |
@ -0,0 +1,3 @@ |
|||||
|
\section{Δοκιμές (testing)} |
||||
|
|
||||
|
Για τον έλεγχο της υλοποίησης έγινε δοκιμή του κώδικα καλώντας τη συνάρτηση κατακερματισμού και χρησιμοποιώντας την κονσόλα ως έξοδο του αποτελέσματος. Η υλοποίηση δοκιμάστηκε με το αλφαριθμητικό που περιλαμβάνει όλους τους χαρακτήρες (σε τυχαία σειρά) του ASCII table (εκτός του χαρακτήρα NUL που χρησιμοποιείται για τον τερματισμό). Αποδεικνύεται μαθηματικά ότι αυτός ο έλεγχος είναι επαρκής. |
@ -0,0 +1,64 @@ |
|||||
|
\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} |
@ -0,0 +1 @@ |
|||||
|
\maketitle |
Binary file not shown.
@ -0,0 +1,66 @@ |
|||||
|
\documentclass[11pt]{article} |
||||
|
\usepackage{geometry} |
||||
|
\geometry{a4paper, top=2.5cm, bottom=2.5cm, left=2.2cm, right=2.2cm} |
||||
|
\usepackage{fontspec} |
||||
|
\usepackage[nonumeralsign]{xgreek} |
||||
|
\usepackage{hyperref} |
||||
|
\usepackage{authblk} |
||||
|
\usepackage{xcolor} |
||||
|
\usepackage{listings} |
||||
|
|
||||
|
% Fonts |
||||
|
% \setmainfont{Linux Libertine O} |
||||
|
\setmainfont{GFS Didot} |
||||
|
|
||||
|
% Code styling |
||||
|
\definecolor{codebackground}{RGB}{240, 240, 240} |
||||
|
|
||||
|
\lstdefinestyle{codestyle}{ |
||||
|
backgroundcolor=\color{codebackground}, |
||||
|
basicstyle=\ttfamily\footnotesize, |
||||
|
breakatwhitespace=false, |
||||
|
breaklines=true, |
||||
|
captionpos=b, |
||||
|
keepspaces=true, |
||||
|
numbers=left, |
||||
|
numbersep=5pt, |
||||
|
showspaces=false, |
||||
|
showstringspaces=false, |
||||
|
showtabs=false, |
||||
|
tabsize=2 |
||||
|
} |
||||
|
|
||||
|
\lstset{style=codestyle} |
||||
|
|
||||
|
% Other styles |
||||
|
\setlength{\parskip}{0.22cm} |
||||
|
|
||||
|
\hypersetup{colorlinks=true, linkcolor=black, urlcolor=blue, citecolor=blue} |
||||
|
\urlstyle{same} |
||||
|
|
||||
|
% Cover |
||||
|
\renewcommand*{\Authand}{ και } |
||||
|
|
||||
|
\title{Μικροεπεξεργαστές και Περιφερειακά \\ |
||||
|
\vspace{0.5cm} |
||||
|
\large Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών ΑΠΘ \\ |
||||
|
8\textsuperscript{ο} εξάμηνο} |
||||
|
|
||||
|
\author[1]{Πιπινιάς Ιωάννης} |
||||
|
\author[2]{Φανάκης Απόστολος} |
||||
|
|
||||
|
\affil[1]{\textit{7965, \href{mailto:pipinias@ece.auth.gr}{pipinias@ece.auth.gr}}} |
||||
|
\affil[2]{\textit{8261, \href{mailto:apostolof@ece.auth.gr}{apostolof@ece.auth.gr}}} |
||||
|
|
||||
|
\date{\today} |
||||
|
|
||||
|
\begin{document} |
||||
|
|
||||
|
\input{front_page.tex} |
||||
|
\input{1.0.introduction.tex} |
||||
|
\input{2.0.implementation.tex} |
||||
|
\input{3.0.issues-faced.tex} |
||||
|
\input{4.0.testing.tex} |
||||
|
\input{5.0.appendix.tex} |
||||
|
|
||||
|
\end{document} |
Loading…
Reference in new issue