CS 520: Assembly Language Programming and Machine Organization
(Coordinator: Phil Hatcher)
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.