diff --git a/026_llvm.md b/026_llvm.md index 7d09ea1..40c53b9 100644 --- a/026_llvm.md +++ b/026_llvm.md @@ -41,14 +41,14 @@ was first developed for the Intel 8086 CPU family. The base types which hardware operates over are integers and floating point types. Let us just consider the integral types for now, these come in four major varieties: - +![](img/bits.png) On the Intel architecture numbers are represented *little endian* meaning lower significant bytes are stored in lower memory addresses. The whole memory representation for a value is partitioned into *high bits* and *low bits*. For example the hexadecimal number ``0xc0ffee`` as a DWORD is stored in memory as: - +![](img/coffee.png) In Haskell unboxed integral machine types are provided by the ``Data.Word`` [module](https://hackage.haskell.org/package/base-4.8.1.0/docs/Data-Word.html). @@ -109,7 +109,7 @@ Each of these registers can be addressed as a smaller register containing a subset of the lower bits. The 32-bit register of ``rax`` is ``eax``. These are shown in the table below. - +![](img/registers.png) These smaller registers are given specific names with modified prefixes. @@ -614,7 +614,7 @@ prefix opcode data assembly meaning Ok, let's look at the full structure of an instruction. It consists of several parts. - +![](img/opcode.png)