diff --git a/Writerside/images_architecture/a6-4-1.png b/Writerside/images_architecture/a6-4-1.png new file mode 100644 index 0000000..f388488 Binary files /dev/null and b/Writerside/images_architecture/a6-4-1.png differ diff --git a/Writerside/topics/Computer-Architecture.topic b/Writerside/topics/Computer-Architecture.topic index c001026..c2e501d 100644 --- a/Writerside/topics/Computer-Architecture.topic +++ b/Writerside/topics/Computer-Architecture.topic @@ -2546,7 +2546,7 @@ Conversion"/> -
Normal (R) => pointer dereferencing in C
@@ -2557,9 +2557,208 @@ Conversion"/>Displacement D(R) => accessing data at a fixed offset from a base address
+movq 8(%rbp), %rdx
equals:
movl (%rbx,%rdi,4), %eax
Calculate the address: %rbx + (4 * %rdi) (e.g., base address + 4 * 5 = base address + + 20).
+Access the 32-bit value at that calculated address.
+Move the retrieved value into the %eax register.
+leaq src, dst
It can also be used for arithmetic expressions.
+Format | +Computation | +
addq src, dest |
+ dest = dest + src | +
subq src, dest |
+ dest = dest - src | +
imulq src, dest |
+ dest = dest * src | +
salq src, dest |
+ dest = dest << src | +
sarq src, dest (Arithmetic Shift) |
+ dest = dest >> src | +
shrq src, dest (Logical Shift) |
+ dest = dest >> src | +
xorq src, dest |
+ dest = dest ^ src | +
andq src, dest |
+ dest = dest & src | +
orq src, dest |
+ dest = dest | src | +
Watch out for the argument order!
+Intel docs use "op dest, src"!
+Format | +Computation | +
incq dest |
+ dest = dest + 1 | +
decq src, dest |
+ dest = dest - 1 | +
negq src, dest |
+ dest = - dest | +
notq dest |
+ dest = ~ dest | +
sarq src, dest (Arithmetic Shift) |
+ dest = dest >> src | +
shrq src, dest (Logical Shift) |
+ dest = dest >> src | +
xorq src, dest |
+ dest = dest ^ src | +
andq src, dest |
+ dest = dest & src | +
orq src, dest |
+ dest = dest | src | +
Compile with the following code (debugging-friendly):
+Use the following command to generate the assembly code:
+Use the following command to disassembly the machine code:
+