summaryrefslogtreecommitdiff
path: root/docs/aas.tex
blob: 6ded09e676035f838a08946c344d00a7e0733ce1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
\documentclass[a4paper]{article}

\usepackage[english]{babel}
\usepackage{fancyhdr}
\usepackage[T1]{fontenc}
\usepackage[margin=2cm]{geometry}
\usepackage[hidelinks, pdfusetitle]{hyperref}
\usepackage{lastpage}
\usepackage{parskip}
\usepackage{titlesec}
\usepackage{varwidth}

\newcommand{\documenttitle}{Using AAS}

\title{\documenttitle}
\author{Gabriel Bjørnager Jensen}
\date{2023-12-31}

\pagestyle{fancy}
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
\fancyhead[c]{\bfseries \documenttitle}
\fancyfoot[c]{Page $\thepage\over\pageref{LastPage}$}

\titleformat{\section}{\huge\bfseries}{\thesection}{1ex}{}{}
\titleformat{\subsection}{\large\bfseries}{\thesubsection}{1ex}{}{}

\begin{document}
	\pagenumbering{gobble}
	\thispagestyle{empty}

	\vspace*{\fill}
	\centerline{\huge\bfseries\documenttitle}
	\vspace*{\fill}

	\clearpage
	\pagenumbering{arabic}
	\begin{center}
		Copyright © 2023 Gabriel Bjørnager Jensen.

		This manual is licensed under a Creative Commons Attribution-ShareAlike-4.0 International license.

		See more at \url{https://creativecommons.org/licenses/by-sa/4.0/}.
	\end{center}

	\clearpage
	\tableofcontents

	\clearpage
	\section{About AAS}
		AAS -- \textit{Arm Assembler} -- is a cross-assembler for the ARM Instruction Set Architecture.

	\clearpage
	\section{Setup}
		\subsection{Download}
			AAS may be downloaded in source form from one of the following official mirrors:

			\begin{center}
				\begin{varwidth}{\linewidth}
					\url{https://mandelbrot.dk/aas}

					\url{https://gitlab.com/bjoernager/aas.git}

					\url{https://github.com/bjoernager/aas.git}
				\end{varwidth}
			\end{center}

		\subsection{Installation}
			A PKGBUILD for AAS will likely be provided in the near future at \url{https://mandelbrot.dk/pkgbuild_aas}.

	\clearpage
	\section{Usage}
		Invoke the assembler using the \texttt{aas} command:

		\begin{center}
			\ttfamily
			aas \textit{[options]} <input>
		\end{center}

		Wherein \textit{options} may be any combination of the following parameters:

		\begin{itemize}
			\item -f\quad{} Sets the target executable format
			\item -h\quad{} Prints help
			\item -m\quad{} Sets the target CPU
			\item -v\quad{} Prints the version number
		\end{itemize}

		\subsection{Supported Target CPUs}
			Only the following identifier is supported when provided to the \texttt{-m} parameter:

			\begin{itemize}
				\item arm7tdmi
			\end{itemize}

		\subsection{Supported Target Executable Formats}
			Only the following identifier is supported when provided to the \texttt{-f} parameter:

			\begin{itemize}
				\item elf
			\end{itemize}

	\clearpage
	\section{Syntax}
		The AAS syntax is designed to be largely compatible with the GAS syntax as well as that of the official armasm assembler.

		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{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.
					/*
					    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}):

		\begin{figure}[h]
			\centering

			\caption{Example of directives.}
			\label{fig:directives}
			\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.
				\end{verbatim}
			\end{varwidth}
		\end{figure}

		An identifier appended with a \texttt{:} (colon) denotes a label (see figure \ref{fig:labels}).

		\begin{figure}[h]
			\centering

			\caption{Example of labels.}
			\label{fig:labels}
			\begin{varwidth}{\linewidth}
				\begin{verbatim}
					start:  ; This is a label.
					_start: ; This is also a label.
					.start: ; This is a label as well.
				\end{verbatim}
			\end{varwidth}
		\end{figure}

		\subsection{Accepted Directives}
			\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.

			\subsubsection{byte}
				\textit{Usage: \texttt{.byte <value>}}

				Embeds the 8-bit value \textit{value}.

			\subsubsection{doubleword}
				\textit{Usage: \texttt{.doubleword <value>}}

				Embeds the 64-bit value \textit{value}.

			\subsubsection{global}
				\textit{Usage: \texttt{.global}}

				Specifies that the following label shall be externally visible.

			\subsubsection{halfowrd}
				\textit{Usage: \texttt{.halfword <value>}}

				Embeds the 16-bit value \textit{value}.

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

			\subsubsection{word}
				\textit{Usage: \texttt{.word <value>}}

				Embeds the 32-bit value \textit{value}.

		\subsection{Character Set}
			AAS requires that all input files be encoded in UTF-8 \textbf{only}.

			Outside of strings and comments, only a small subset of ASCII characters are allowed (see figure \ref{fig:characters}). The presence of any character outside of this subset will yield in an error.

			\begin{figure}[h]
				\centering

				\caption{ASCII-subset of which character are valid outside strings and comments.}
				\label{fig:characters}
				\begin{tabular}{|c|c c c c c c c c c c c c c c c c|}
					\hline
					{} & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & A & B & C & D & E & F \\
					\hline
					0 & \textit{NUL} & {} & {} & {} & {} & {} & {} & {} & {} & \textit{HT} & \textit{LF} & {} & {} & {} & {} & {} \\
					1 & {} & {} & {} & {} & {} & {} & {} & {} & {} & {} & {} & {} & {} & {} & {} & {} \\
					2 & \textit{SP} & ! & " & \# & {} & {} & {} & {} & {} & {} & * & {} & , & {} & . & {} \\
					3 & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & : & ; & < & {} & > & {} \\
					4 & @ & A & B & C & D & E & F & G & H & I & J & K & L & M & N & O \\
					5 & P & Q & R & S & T & U & V & W & X & Y & Z & [ & {} & ] & {} & \_ \\
					6 & {} & a & b & c & d & e & f & g & h & i & j & k & l & m & n & o \\
					7 & p & q & r & s & t & u & v & w & x & y & z & {} & {} & {} & {} & {} \\
					\hline
				\end{tabular}
			\end{figure}

\end{document}