|
@@ -1055,7 +1055,7 @@ An x86 program is a sequence of instructions. The program is stored in the
|
|
|
computer's memory and the \emph{program counter} points to the address of the
|
|
|
next instruction to be executed. For most instructions, once the instruction is
|
|
|
executed, the program counter is incremented to point to the immediately
|
|
|
-following instruction in the program. Each instruction may refer to integer
|
|
|
+following instruction in memory. Each instruction may refer to integer
|
|
|
constants (called \emph{immediate values}), variables called \emph{registers},
|
|
|
and instructions may load and store values into memory. For our purposes, we
|
|
|
can think of the computer's memory as a mapping of 64-bit addresses to 64-bit
|
|
@@ -1063,14 +1063,14 @@ can think of the computer's memory as a mapping of 64-bit addresses to 64-bit
|
|
|
values\footnote{This simple story doesn't fully cover contemporary x86
|
|
|
processors, which combine multiple processing cores per silicon chip, together
|
|
|
with hardware memory caches. The result is that, at some instants in real
|
|
|
- time, different programs may hold conflicting cached values for a given memory
|
|
|
- address.}.
|
|
|
+ time, different threads of program execution may hold conflicting
|
|
|
+ cached values for a given memory address.}.
|
|
|
%
|
|
|
Figure~\ref{fig:x86-a} defines the syntax for the
|
|
|
subset of the x86 assembly language needed for this chapter.
|
|
|
%
|
|
|
(We use the AT\&T syntax expected by the GNU assembler that comes with the C
|
|
|
-compiler we use for this course: \key{gcc}.)
|
|
|
+compiler that we use in this course: \key{gcc}.)
|
|
|
%
|
|
|
Also, Appendix~\ref{sec:x86-quick-reference} includes a quick-reference of all
|
|
|
the x86 instructions used in this book and a short explanation of what they do.
|
|
@@ -1114,7 +1114,8 @@ A register is written with a \key{\%} followed by the register name,
|
|
|
such as \key{\%rax}.
|
|
|
%
|
|
|
An access to memory is specified using the syntax $n(\key{\%}r)$,
|
|
|
-which reads register $r$ and then offsets the address by $n$ bytes
|
|
|
+which obtains the address stored in register $r$ and then
|
|
|
+offsets the address by $n$ bytes
|
|
|
(8 bits). The address is then used to either load or store to memory
|
|
|
depending on whether it occurs as a source or destination argument of
|
|
|
an instruction.
|