Assumed Prior Knowledge
This course is by no means an introductory course in computer programming. There is a certain level of base knowledge required to successfully traverse the following parts of the Manual.
If you have no experience with programming or do not feel somewhat comfortable in at least one higher-level programming language (like C++ or Python) it may be helpful to follow an introductory course on computer programming before continuing here. There are many great online resources for that.
We assume that you have followed and understood the lectures and that you have studied the accompanying book and lecture notes in the necessary detail. In particular, we assume that you:
know and understand what opcodes, instructions, subroutines, stacks, registers, and program counters are
have a general idea of what occurs during the compilation, assembly, and linking stages of an executable program
know the difference between bits, nibbles, and bytes
can convert numbers between different number representation systems (specifically binary, decimal, and hexadecimal)
understand the concept of endianness
These topics have all been treated as part of the lectures, tutorials, and accompanying book chapters.
In this Lab course, you will learn how to program in the x86-64 Assembly language. You should know that "the x86-64 architecture" (also known as "AMD64" or simply "x64") is the generic name for the architecture of CPUs found in a large variety of personal computers. We assume that you have studied the x86-64 architecture as part of the course material. You should know that x86-64 has a number of 64-bit general-purpose registers which you can use freely when writing programs. You should know that the x86-64 has a 64-bit stack pointer register (rsp
) which contains the memory address of the top of the current program stack and a base pointer register (rbp
), which is used during subroutine execution.
Finally, you should know what the main concept of the Von Neumann architecture is, i.e., you should know that a computer is roughly comprised of three subsystems: a CPU, a random access main memory, and an I/O subsystem which is in turn comprised of I/O devices such as mice, keyboards, sound cards, hard disks, etc. You should know that the CPU is capable of executing instructions that reside in the main memory and that instructions are simply binary codes of varying lengths.
The Reference Documentation may serve as a refresher for many of the above-mentioned topics.
Even if you already feel comfortable with the topics (Great, you are part of a fairly small group of students!) it is still recommended to read through the reference documentation. There are many flavors of writing Assembly code and you may want to get accustomed to the style that is expected in the assignments.
Last updated