CS 520: Assembly Language Programming and Machine Organization

(Coordinator: Phil Hatcher)

Catalog description

Assembly language programming and machine organization: program and data representation; registers, instructions, and addressing modes; assemblers and linkers. Impact of hardware on software and software on hardware. Historical perspectives. Prereq: CS 515.


  • methodologies of software development: practice building larger programs (500+ lines), stressing top-down design, stepwise refinement, proper structure, proper documentation, structural testing and functional testing; practice concurrent programming by using POSIX threads.
  • concepts of programming languages: learn the C programming language, particularly bitwise operators, stdio, and pointer manipulation.
  • principles of computer organization: understand basic computer architecture; understand program and data representation; become familiar with assembly language and machine language; understand the impact on software of basic hardware concepts, such as the memory hierarchy; study fundamental system software, such as assemblers and linkers.


Twelve laboratories (12%), six programming assignments (60%), thirteen quizzes (13%), one midterm (5%) and one final exam (10%).


  • Basic computer architecture.
  • Integer, character and string representation.
  • IEEE floating-point representation.
  • Program representation.
  • Assemblers and linkers.
  • Intel 64 architecture.
  • Compare-and-swap instructions.
  • Garbage collection.
  • POSIX threads.
  • Implementing threads, mutexes and condition variables.
  • Event-driven execution.
  • The memory hierarchy: memory caches and virtual memory.
  • Historical machines.
  • Programming in C.


  • Randal Bryant and David O’Hallaron. Computer Systems: A Programmer’s Perspective, 2nd edition, Addison-Wesley, 2010. ISBN: 978–0136108047.