summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/aas.tex143
1 files changed, 97 insertions, 46 deletions
diff --git a/docs/aas.tex b/docs/aas.tex
index 6ded09e..f688f53 100644
--- a/docs/aas.tex
+++ b/docs/aas.tex
@@ -10,6 +10,10 @@
\usepackage{titlesec}
\usepackage{varwidth}
+\newcommand{\aasmajor}{0}
+\newcommand{\aasminor}{2}
+\newcommand{\aaspatch}{0}
+
\newcommand{\documenttitle}{Using AAS}
\title{\documenttitle}
@@ -30,7 +34,11 @@
\thispagestyle{empty}
\vspace*{\fill}
- \centerline{\huge\bfseries\documenttitle}
+ \begin{center}
+ {\huge\bfseries\documenttitle}
+
+ {\large\aasmajor.\aasminor.\aaspatch}
+ \end{center}
\vspace*{\fill}
\clearpage
@@ -48,7 +56,16 @@
\clearpage
\section{About AAS}
- AAS -- \textit{Arm Assembler} -- is a cross-assembler for the ARM Instruction Set Architecture.
+ AAS -- the \textit{Advanced Arm Assembler} -- is an open-source cross-assembler for the ARM Instruction Set Architecture.
+
+ \subsection{Copyright \& License}
+ AAS is copyright © 2023 Gabriel Bjørnager Jensen.
+
+ AAS is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+
+ AAS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with AAS and/or this manual. If not, see \url{https://www.gnu.org/licenses/}.
\clearpage
\section{Setup}
@@ -66,6 +83,32 @@
\end{center}
\subsection{Installation}
+ First, make sure to meet the prerequisites for installing AAS:
+
+ \begin{itemize}
+ \item Having installed \textit{Rust} and the build system \textit{Cargo}
+ \begin{itemize}
+ \item Install either of the \texttt{rust} or \texttt{rustup} packages using pacman (Arch Linux)
+ \item Install the \texttt{lang/rust} package (FreeBSD)
+ \item View the official Rust documentation at \url{https://www.rust-lang.org/tools/install/}.
+ \end{itemize}
+ \item Having compiled the AAS executable \textbf{using the \textit{release} profile}
+ \begin{itemize}
+ \item Run \texttt{cargo build -{}-release}
+ \end{itemize}
+ \end{itemize}
+
+ Then, to install the executable, simply execute:
+
+ \begin{center}
+ \begin{varwidth}{\linewidth}
+ \ttfamily
+ install -m755 \$\{BINDIR\} "target/release/aas"
+ \end{varwidth}
+ \end{center}
+
+ Wherein \texttt{\$\{BINDIR\}} denotes the destination directory, usually \texttt{"/usr/bin"}.
+
A PKGBUILD for AAS will likely be provided in the near future at \url{https://mandelbrot.dk/pkgbuild_aas}.
\clearpage
@@ -106,45 +149,33 @@
Comments are denoted with either a \texttt{;} (semicolon) or an \texttt{@} (commercial at). These comments continue until the end of the current line. Multi-line comments are currently not supported.
- \begin{figure}[h]
- \centering
-
- \caption{Example of comments.}
- \label{fig:comments}
+ \begin{center}
\begin{varwidth}{\linewidth}
\begin{verbatim}
; This is a comment.
@ This is also a comment.
- mov r0, pc ; This line will be parsed up till the semicolon.
+ MOV r0, pc ; This line will be parsed up till the semicolon.
/*
- This is an error (for now).
+ This is an error (for now).
*/
\end{verbatim}
\end{varwidth}
- \end{figure}
-
- An identifier prepended with a \texttt{.} (full stop) denotes an assembler directive\footnote{However, if the identifier is also appended with a \texttt{:} (colon), it denotes a label instead.} (see figure \ref{fig:directives}):
+ \end{center}
- \begin{figure}[h]
- \centering
+ An identifier prepended with a \texttt{.} (full stop) denotes an assembler directive\footnote{However, if the identifier is also appended with a \texttt{:} (colon), it denotes a label instead.}:
- \caption{Example of directives.}
- \label{fig:directives}
+ \begin{center}
\begin{varwidth}{\linewidth}
\begin{verbatim}
- .byte 0x7F ; This embeds the 8-bit value 0xFF.
- .thumb ; All code after this line will be assembled as Thumb code.
+ .BYTE #0x7F ; This embeds the value 127 using eight bits.
+ .THUMB ; All code after this line will be assembled as Thumb code.
\end{verbatim}
\end{varwidth}
- \end{figure}
-
- An identifier appended with a \texttt{:} (colon) denotes a label (see figure \ref{fig:labels}).
+ \end{center}
- \begin{figure}[h]
- \centering
+ An identifier appended with a \texttt{:} (colon) denotes a label:
- \caption{Example of labels.}
- \label{fig:labels}
+ \begin{center}
\begin{varwidth}{\linewidth}
\begin{verbatim}
start: ; This is a label.
@@ -152,43 +183,63 @@
.start: ; This is a label as well.
\end{verbatim}
\end{varwidth}
- \end{figure}
+ \end{center}
\subsection{Accepted Directives}
- \subsubsection{arm}
- \textit{Usage: \texttt{.arm}}
+ \subsubsection{ARM}
+ \textit{Usage: \texttt{.ARM}}
+
+ Specifies that all following code be assembled into ARM (32-bit) opcodes. May be overriden by a new \texttt{.THUMB} directive.
+
+ Thumb-exclusive instructions are translated to their equivalent ARM opcode: For example, the following two instructions are identical:
- Specifies that all following code be assembled into ARM (32-bit) opcodes. May be overriden by a new \texttt{.thumb} directive.
+ \begin{center}
+ \begin{varwidth}{\linewidth}
+ \begin{verbatim}
+ .ARM
+ ASR r0, r1
+ MOV r0, r0, ASR r1
+ \end{verbatim}
+ \end{varwidth}
+ \end{center}
- \subsubsection{byte}
- \textit{Usage: \texttt{.byte <value>}}
+ \subsubsection{BYTE}
+ \textit{Usage: \texttt{.BYTE <value>}}
- Embeds the 8-bit value \textit{value}.
+ Embeds the 8-bit value \textit{value} into the executable.
- \subsubsection{doubleword}
- \textit{Usage: \texttt{.doubleword <value>}}
+ The range of valid values lies in $([0;2^8-1]=[0;255])$.
- Embeds the 64-bit value \textit{value}.
+ \subsubsection{DOUBLEWORD}
+ \textit{Usage: \texttt{.DOUBLEWORD <value>}}
- \subsubsection{global}
- \textit{Usage: \texttt{.global}}
+ Embeds the 64-bit value \textit{value} into the executable.
+
+ The range of valid values lies in $([0;2^{64}-1]=[0;18446744073709551615])$.
+
+ \subsubsection{GLOBAL}
+ \textit{Usage: \texttt{.GLOBAL}}
Specifies that the following label shall be externally visible.
- \subsubsection{halfowrd}
- \textit{Usage: \texttt{.halfword <value>}}
+ \subsubsection{HALFOWRD}
+ \textit{Usage: \texttt{.HALFWORD <value>}}
+
+ Embeds the 16-bit value \textit{value} into the executable.
+
+ The range of valid values lies in $([0;2^{16}-1]=[0;65535])$.
- Embeds the 16-bit value \textit{value}.
+ \subsubsection{THUMB}
+ \textit{Usage: \texttt{.THUMB}}
- \subsubsection{thumb}
- \textit{Usage: \texttt{.thumb}}
+ Specifies that all following code be assembled into Thumb (16-bit) opcodes. May be overriden by a new \texttt{.ARM} directive.
- Specifies that all following code be assembled into Thumb (16-bit) opcodes. May be overriden by a new \texttt{.arm} directive.
+ \subsubsection{WORD}
+ \textit{Usage: \texttt{.WORD <value>}}
- \subsubsection{word}
- \textit{Usage: \texttt{.word <value>}}
+ Embeds the 32-bit value \textit{value} into the executable.
- Embeds the 32-bit value \textit{value}.
+ The range of valid values lies in $([0;2^{32}-1]=[0;4294967295])$.
\subsection{Character Set}
AAS requires that all input files be encoded in UTF-8 \textbf{only}.