Assumed Prior Knowledge

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.

Last updated