Computer Laboratory

Course pages 2012–13


Paper 1: Computer Fundamentals

Lecturer: Dr R.K. Harle

No. of lectures: 4

Suggested hours of supervisions: 1

This course is a prerequisite for Operating Systems.


The overall aim of this course is to provide a general understanding of how a computer works. This includes aspects of the underlying hardware (CPU, memory, devices), as well as how to program a computer at a low level using assembly language.


  • Computer components. Brief history. Main components: CPU, memory, peripherals (displays, graphics cards, hard drives, flash drives, simple input devices), motherboard, buses.

  • Data representation and operations. Simple model of memory. Bits and bytes. Binary, hex, octal, decimal numbers. Character and numeric arrays. Data as instructions: von-Neumann architecture, fetch-execute cycle, program counter (PC).

  • Low- and high-level computing. Pointers. The stack and heap. Box and Pointer Diagrams. Levels of abstraction: machine code, assembly, high-level languages. Compilers and interpreters. Read-eval-print loop model.

  • Platforms and multitasking. The need for operating systems. Multicore systems, time-slicing. Virtual machines. The Java bytecode/VM approach to portability. ML as a high-level language emphasising mathematical expressivity over input-output.


At the end of the course students should be able to

  • describe the fetch-execute cycle of a simple computer with reference to the control and execution units;

  • understand the different types of information which may be stored within a computer memory;

  • understand a simple assembly language program.

Recommended reading

Patterson, D. & Hennessy, J. (2009). Computer organisation and design. Morgan Kaufmann (4th ed.).
Tanenbaum, A.S. (1990). Structured computer organisation. Prentice Hall (3rd ed).