diff --git a/main.tex b/main.tex index e90cdd1..80f036b 100644 --- a/main.tex +++ b/main.tex @@ -1,9 +1,9 @@ \documentclass[a4paper,twocolumn]{article} +\usepackage{booktabs} \usepackage{baskervald} \usepackage{courierten} \usepackage{cuted} -\usepackage[margin=2cm]{geometry} \usepackage{helvet} \usepackage{mathtools} \usepackage{sectsty} @@ -27,96 +27,125 @@ \section{Instructions} -\begin{tabularx}{\colwidth}{|>{\ttfamily}l|>{$}X<{$}|} - \hline - add \ S,D & D \leftarrow S + D \\ \hline - sub \ S,D & D \leftarrow D - S \\ \hline - neg \ D & D \leftarrow -D \\ \hline - inc \ D & D \leftarrow D + 1 \\ \hline - dec \ D & D \leftarrow D - 1 \\ \hline - imul S,D & D \leftarrow S \times D \\ \hline - idiv S & \mathtt{rax} \leftarrow \lfloor\mathtt{rdx}:\mathtt{rax} \div S\rfloor \\ - & \mathtt{rdx} \leftarrow (\mathtt{rdx}:\mathtt{rax})\mod{S} \\ \hline - \hline - and S,D & D \leftarrow S \mathbin{\&} D \\ \hline - or \ S,D & D \leftarrow S \mathbin{|} D \\ \hline - xor S,D & D \leftarrow S \wedge D \\ \hline - not D & D \leftarrow \mathord{\sim} D \\ \hline - sal n,D & D \leftarrow D \ll n \\ \hline - shr n,D & D \leftarrow D \gg n \hspace{1em} \textrm{(logical)} \\ \hline - sar n,D & D \leftarrow D \gg n \hspace{1em} \textrm{(arithmetic)} \\ \hline - \hline - lea S,D & D \leftarrow \mathrm{addressof}(S) \\ \hline - mov S,D & D \leftarrow S \\ \hline - \hline - cmp \ A,B & B - A \hspace{1em} \textrm{(setting cond. flags)} \\ \hline - test A,B & A \mathbin{\&} B \hspace{1em} \textrm{(setting cond. flags)} \\ \hline - \hline - jmp l & \textrm{jump unconditionally} \\ \hline - je \ l & \textrm{jump if equal} \\ \hline - jne l & \textrm{jump if not equal} \\ \hline - js \ l & \textrm{jump if negative} \\ \hline - jns l & \textrm{jump if non-negative} \\ \hline - jg \ l & \textrm{jump if greater} \\ \hline - jge l & \textrm{jump if greater or equal} \\ \hline - jl \ l & \textrm{jump if lesser} \\ \hline - jle l & \textrm{jump if lesser or equal} \\ \hline - ja \ l & \textrm{jump if above} \\ \hline - jae l & \textrm{jump if above or equal} \\ \hline - jb \ l & \textrm{jump if below} \\ \hline - jbe l & \textrm{jump if below or equal} \\ \hline - \hline - push S & \mathtt{rsp} \leftarrow \mathtt{rsp} - \mathrm{sizeof}(S) \\ - & \mathrm{at}(\mathtt{rsp}) \leftarrow S \\ \hline - pop \ D & D \leftarrow \mathrm{at}(\mathtt{rsp}) \\ - & \mathtt{rsp} \leftarrow \mathtt{rsp} + \mathrm{sizeof}(S) \\ \hline - callq l & \textrm{push instruction pointer then jump} \\ \hline - retq & \textrm{pop to instruction pointer} \\ \hline +\noindent\begin{tabularx}{\colwidth}{>{\ttfamily}l>{\ttfamily}l>{$}X<{$}} + \toprule + \multicolumn{3}{>{\sffamily\bfseries}c}{Arithmetic \& Logic} \\ + \midrule + add & S,D & D \leftarrow S + D \\ + sub & S,D & D \leftarrow D - S \\ + neg & D & D \leftarrow -D \\ + inc & D & D \leftarrow D + 1 \\ + dec & D & D \leftarrow D - 1 \\ + imul & S,D & D \leftarrow S \times D \\ + idiv & S & \mathtt{rax} \leftarrow \lfloor\mathtt{rdx}:\mathtt{rax} \div S\rfloor \\ + & & \mathtt{rdx} \leftarrow (\mathtt{rdx}:\mathtt{rax})\mod{S} \\ + and & S,D & D \leftarrow S \mathbin{\&} D \\ + or & S,D & D \leftarrow S \mathbin{|} D \\ + xor & S,D & D \leftarrow S \wedge D \\ + not & D & D \leftarrow \mathord{\sim} D \\ + sal & n,D & D \leftarrow D \ll n \\ + shr & n,D & D \leftarrow D \gg n \hspace{1em} \textrm{(logical)} \\ + sar & n,D & D \leftarrow D \gg n \hspace{1em} \textrm{(arithmetic)} \\ + \midrule + \multicolumn{3}{>{\sffamily\bfseries}c}{Data transfer} \\ + \midrule + lea & S,D & D \leftarrow \mathrm{addressof}(S) \\ + mov & S,D & D \leftarrow S \\ + \midrule + \multicolumn{3}{>{\sffamily\bfseries}c}{Conditionals \& Branches} \\ + \midrule + cmp & A,B & B - A \hspace{1em} \textrm{(setting cond. flags)} \\ + test & A,B & A \mathbin{\&} B \hspace{1em} \textrm{(setting cond. flags)} \\ + jmp & l & \textrm{jump to \texttt{l} unconditionally} \\ + je & l & \textrm{jump to \texttt{l} if equal} \\ + jne & l & \textrm{jump to \texttt{l} if not equal} \\ + js & l & \textrm{jump to \texttt{l} if negative} \\ + jns & l & \textrm{jump to \texttt{l} if non-negative} \\ + jg & l & \textrm{jump to \texttt{l} if greater} \\ + jge & l & \textrm{jump to \texttt{l} if greater or equal} \\ + jl & l & \textrm{jump to \texttt{l} if lesser} \\ + jle & l & \textrm{jump to \texttt{l} if lesser or equal} \\ + ja & l & \textrm{jump to \texttt{l} if above} \\ + jae & l & \textrm{jump to \texttt{l} if above or equal} \\ + jb & l & \textrm{jump to \texttt{l} if below} \\ + jbe & l & \textrm{jump to \texttt{l} if below or equal} \\ + \midrule + \multicolumn{3}{>{\sffamily\bfseries}c}{Stack operations} \\ + \midrule + push & S & \mathtt{rsp} \leftarrow \mathtt{rsp} - \mathrm{sizeof}(S) \\ + & & \mathrm{at}(\mathtt{rsp}) \leftarrow S \\ + pop & D & D \leftarrow \mathrm{at}(\mathtt{rsp}) \\ + & & \mathtt{rsp} \leftarrow \mathtt{rsp} + \mathrm{sizeof}(S) \\ + callq & l & \textrm{push \texttt{rip} then jump to \texttt{l}} \\ + retq & & \textrm{pop to \texttt{rip}} \\ + \bottomrule \end{tabularx} -\vspace{0.5em} - -\noindent\begin{tabularx}{\colwidth}{|c|l|c|c|X|} - \multicolumn{2}{c}{\textbf{Suffixes}} & \multicolumn{1}{c}{} & \multicolumn{2}{c}{\textbf{Condition flags}} \\ \cline{1-2} \cline{4-5} - b & 8 bits & & ZF & Zero \\ \cline{1-2} \cline{4-5} - w & 16 bits & & SF & Sign (set on negative) \\ \cline{1-2} \cline{4-5} - l & 32 bits & & CF & Carry (unsigned overflow) \\ \cline{1-2} \cline{4-5} - q & 64 bits & & OF & Overflow (signed overflow) \\ \cline{1-2} \cline{4-5} +\noindent\begin{tabularx}{\colwidth}{lX} + \toprule + \multicolumn{2}{>{\sffamily\bfseries}c}{Addressing Modes} \\ + \midrule + Immediate & \texttt{\$C} \\ + Register & \texttt{\%R} \\ + Memory & \texttt{[C\textsubscript{d}](\%R\textsubscript{b}[,\%R\textsubscript{i}[,C\textsubscript{s}])} \\ + \bottomrule \end{tabularx} -\section{Addressing Modes} +\[\textrm{Memory Address} = C_d + R_b + C_sR_i\] -\begin{tabularx}{\colwidth}{|l|X|} - \hline - Immediate & \texttt{\$C} \\ \hline - Register & \texttt{\%R} \\ \hline - Memory & \texttt{[C\textsubscript{d}](\%R\textsubscript{b}[,\%R\textsubscript{i}[,C\textsubscript{s}])} \\ \hline -\end{tabularx} - -\vspace{0.5em} - -\[\mathrm{address} = C_d + R_b + C_sR_i\] +\noindent\begin{center} + \begin{tabular}{cl} + \toprule + \multicolumn{2}{>{\sffamily\bfseries}c}{Suffixes} \\ + \midrule + b & 8 bits \\ + w & 16 bits \\ + l & 32 bits \\ + q & 64 bits \\ + \bottomrule + \end{tabular} + \hspace{1em} + \begin{tabular}{cl} + \toprule + \multicolumn{2}{>{\sffamily\bfseries}c}{Condition Flags} \\ + \midrule + ZF & Zero \\ + SF & Sign (set on negative) \\ + CF & Carry \\ + OF & Overflow \\ + \bottomrule + \end{tabular} +\end{center} \section{Registers} -\begin{tabularx}{\colwidth}{|>{\ttfamily}l|>{\ttfamily}l|>{\ttfamily}l|>{\ttfamily}l|X|} - \hline - rax & eax & ax & al & accumulator \\ \hline - rbx & ebx & bx & bl & data pointer \\ \hline - rcx & ecx & cx & cl & counter \\ \hline - rdx & edx & dx & dl & I/O pointer \\ \hline - rsi & esi & si & sil & source pointer \\ \hline - rdi & edi & di & dil & destination pointer \\ \hline - rsp & esp & sp & spl & stack pointer \\ \hline - rbp & ebp & bp & bpl & base pointer \\ \hline - r8 & r8d & r8w & r8b & general purpose \\ \hline - r9 & r9d & r9w & r9b & general purpose \\ \hline - r10 & r10d & r10w & r10b & general purpose \\ \hline - r11 & r11d & r11w & r11b & general purpose \\ \hline - r12 & r12d & r12w & r12b & general purpose \\ \hline - r13 & r13d & r13w & r13b & general purpose \\ \hline - r14 & r14d & r14w & r14b & general purpose \\ \hline - r15 & r15d & r15w & r15b & general purpose \\ \hline +\begin{tabularx}{\colwidth}{>{\ttfamily}c>{\ttfamily}c>{\ttfamily}c>{\ttfamily}cX} + \toprule + \multicolumn{5}{>{\sffamily\bfseries}c}{Standard} \\ + \midrule + rax & eax & ax & al & Accumulator \\ + rbx & ebx & bx & bl & DS data pointer \\ + rcx & ecx & cx & cl & Counter \\ + rdx & edx & dx & dl & I/O pointer \\ + rsi & esi & si & sil & Source pointer \\ + rdi & edi & di & dil & Dest. pointer \\ + \midrule + \multicolumn{5}{>{\sffamily\bfseries}c}{Stack} \\ + \midrule + rsp & esp & sp & spl & Stack pointer \\ + rbp & ebp & bp & bpl & Base pointer \\ + \midrule + \multicolumn{5}{>{\sffamily\bfseries}c}{64-bit Mode Only} \\ + \midrule + r8 & r8d & r8w & r8b & No special use \\ + r9 & r9d & r9w & r9b & \\ + r10 & r10d & r10w & r10b & \\ + r11 & r11d & r11w & r11b & \\ + r12 & r12d & r12w & r12b & \\ + r13 & r13d & r13w & r13b & \\ + r14 & r14d & r14w & r14b & \\ + r15 & r15d & r15w & r15b & \\ + \bottomrule \end{tabularx} \end{document}