
What is x64?
A 64-bit processor architecture means that instead of 32 bits to store one piece of information, such as an integer or character, there are two 64-bits to hold it. This allows for more than 4 billion possible integers and characters.
X86 was the most common CPU architecture until around 2000 when Intel introduced their x64 line of processors. The term “x64” comes from the words eXtended (meaning broader) and extended (having more bit positions).
Since then, AMD has also adopted this technology with their Ryzen CPUs. These types of processors are typically referred to as x86_64 because they run software designed for the x86 family which includes both i386 (32-bit) and x86_64 (64-bit) processors.
Intermediate Processing
There is some discussion about whether calling something like an x86 64-bit computer a true x86 processor is correct since not all modern day x86 processors use the full 64-bit width. Some only have 48-bits while others do not even have instructions that can add 2 numbers together past 16 digits!
This article will stick to using the terms x86 and x86_64 correctly to describe these processors. More advanced tutorials may refer to additional features of the cpu architectures though.

What is an instruction?
An instruction is a piece of computer code that a processor executes to perform a specific task. Most modern processors have around 1 million instructions.
You can think of each instruction as a word or statement. For example, when you say “hello” there are three separate words but they all come together to make a single expression. An instruction works in a similar way.
A few examples of commonly used instructions include add (for addition), compare (to see if one value is greater than another), move (located somewhere storage space) and branch (go back and forth depending on what else is done).
The most important part of any instruction is its operation. This sets how it will execute and what other actions should happen next.
There are many types of operations including arithmetic, logic (such as comparing numbers) and shift. Arithmetic usually adds, subtracts or multiplies two values. Logic looks at conditions and takes action according to whether the result is true or false while shifts rotate bits or bytes within a number or place them in a different position.
X86 architecture was once the dominant CPU design, so understanding this concept is very important.

Mapping memory is one of the most fundamental concepts in computer science. It has applications beyond creating programs you can use! For example, when your computer starts up it must be able to read its own instructions so that it knows what do do next. This is how it gets around not having an infinite supply of pure energy to run on!
Another way to look at it is that everything in your computer is like a map. The maps start out empty but as you add things to them they get filled in and represented by certain areas. A common example of this is food. If you have no food there are still parts of your body that know how to function without it.
By adding food to yourself, your body is informed that it should begin functioning with that fuel now. That’s why we usually say something along the lines of “I will need to eat to survive” after doing some really hard work. You see both examples in computers all the time.
When your computer starts up it needs to know where to find the software (map) it uses to operate. This is called loading the software or booting the system. After it does that, the software can access the rest of the hardware which it uses to perform tasks.
There are two main types of memories in computers- random access memory (RAM) and non-volatile storage such as flash chips. RAM is volatile in nature, which means it requires electricity to keep information stored.

x87 is an example of a register that doesn’t map to any specific part of the computer hardware. It isn’t attached to anything, really! At least not directly.
x87 stands for Extended Precision Floating Point. This term may be confusing because there are two different types of floating point you will find referred to as “x87.” One type is extended precision, while the other is just plain old floating point.
This article will focus only on the latter. That means we won’t talk about extended numbers or how they work. We will simply refer to them as regular floats (or sometimes called normalized) with no extension.
Regular floats are great when it comes to computers, but they have one major drawback: They don’t store information very well in memory. The more data you add to a float, the larger its container needs to be in order to hold all of that info.
A normal float can get quite large if you aren’t careful, which is why many CPUs include another set of registers known as general purpose registers. These registers do not have special purposes, they are used for whatever your software program requires them to be.
One such register is commonly referred to as the stack pointer. A common use for this register is storing information about what layer of a function call you are at.

Registers are storage locations that computers use to remember information. Most processors have several types of registers, some more common than others. The most basic type of register is called a general purpose register (or just register for short).
A general purpose register can be thought of as a small chunk of memory space that contains information. You get one gregory per processor chip, and you're given very limited access to these registers.
With that in mind, here's an exercise: What do you think the word register means? That's right! A register is a place where you can store information! So, your general purpose registers contain a few things: 1) Temporary values 2) Information retrieved from other parts of the computer 3) Instructions to perform math or logic operations
The second type of register is called a special purpose register (SP register for short). These registers serve a specific function determined by what software program they belong to. For example, many programs use the floating point SP register to hold numbers that require complex mathematical calculations.
Processors with more advanced features often have multiple sets of registers with different functions. Technology like this allows for better performance because you don't need to save and restore state every time something new is done. Because the processor knows how to handle previous tasks, it can focus its attention on doing so efficiently.

As we learned, x86 processors have an address bus that allows them to communicate with memory. This is how their internal computer programs find instructions and data to process and save what they are working on.
The address bus has two parts: A register part and a bit-length part. For instance, if the address bus had a length of 32 bits, this would mean it can hold up to 4 billion different addresses.
Modern computers usually use 65-bit buses (ABIs) because these give you enough space for very large amounts of memory. Most personal computers now max out at around 16TB of RAM which requires a 128-bit bus!
CPU’s sometimes have more than one set of registers in the address bus. Some CPUs even have separate busses for instruction and data addressing. These are called unified mode architectures.
So how does all of this information get transmitted? That is where the x86 architecture gets its name! The term “x86” comes from the original Intel design that was released in 1984.
The word “architecture” refers to the way that different components work together to accomplish tasks. In software, an architect creates structure and organization for things such as files and folders. An engineer designs specific systems or devices that can be adapted to fulfill a certain task.
In computer hardware, an architect oversees the creation of basic parts that people use to think about computers. For example, the data bus – how individual components talk to each other.
The data bus in most modern personal computers (PCs) is called the PCI express interface. It allows connected devices to share resources, take up minimal space, and connect easily to other devices.

Another important part of any computer program is the stack. A Stack is like an area in memory that stores information as you run programs. For example, if you were to create a very simple web browser software- Firefox or Google Chrome- then there is a place in RAM where it keeps track of all of the new websites you visit. This area is called the cache or storage for recent sites you have visited.
This way, when you open up your laptop next time and go online, your newly installed software has access to this cache so it can quickly get started!
The hard disk of your computer also uses the stack to remember things such as documents you are working on and pictures and videos you have stored away.
When you are done with a document, file, or picture, the computer removes it from the stack (saving space) and puts out a pointer to another piece of content. Technically speaking, the stack is never empty; only how much room there is left is.
That being said, even though the stack is not totally emptied every time you use a program, it does start to be less full as you add more applications to use it. So how big is the stack? It’s kind of tricky to say since different computers have their own unique ways of doing things, but typically we talk about 4KiB - 1k = kilobytes, and Ki = thousands.

In computing, registers are memory locations that contain information. Registers can be used to store numbers or other information for use in calculations or as a basis for later operations.
The term register was first coined in the early days of computation when there were no random access memories (RAMs) or hard drives to work with. Computers would have all of their working materials stored in non-volatile storage such as magnetic tapes or drums and then these registers could be used to temporarily hold data before moving it onto another area of computer hardware or transferring it to a next stage in processing.
Since those times, computers have integrated more and more RAM into their design, but they still had a separate set of registers. These additional registers allowed software to perform even faster by acting as short term caches for frequently accessed data.
You may have heard the name x86 referring to an architecture of computer processors. This is because Intel designed their processor lines to work using the x86 instruction set, which has become the standard across most modern day operating systems and applications.
However, what people don’t realize is that the x64 extension to this line isn’t actually any different from the original 32 bit version! It’s just called 64 bit due to the fact that it uses twice the number of bits in its registers as the older versions did.