COS 335: Computer Architecture and Assembly Language
Spring 2011

Instructor: Curtis Meadow

University of Maine Department of Computer Science

The current time is:
(View Binary Clock Source Code)
Course description, grading policy, broad outline, general class policies
Presentation Option An in-class presentation in lieu of two homework assignments.
Homework Assignments
Homework Guidelines
Assignment 1 Due Thursday Jan 27
Assignment 2 Due Tuesday Feb 8
Assignment 3 Due Tuesday Feb 15
Assignment 4 Due Thursday Feb 24
Assignment 5 Due Thursday Mar 17
Assignment 6 Due Tuesday Mar 29
Assignment 7 Due Thursday April 14
Assignment 8 Due Thursday April 21
James Brawn. Contact him by First Class email for appointments.
Lecture Notes - Architecture
Subect to revision as the semester progresses.
Ch. 2: Evolution
Ch. 3: System Function and Interconnection
Ch. 4: Cache Memory
Ch. 5: Internal Memory
Ch. 6: External Memory
Ch. 7: Input/Output
Ch. 8: Processes and Memory Management
Ch. 9: Computer Arithmetic
Ch. 10: Instruction Sets
Ch. 11: Addressing Modes
Ch. 12: Processor Structure and Function
Ch. 13: RISC Processors
   MIPS and SPARC Instruction Set References
Ch. 14: Superscalar Processors
Ch. 13: Control Unit
Lecture Notes and Handouts - Assembler
Notes 01 - Data Representation
Notes 02 - 80x86 Architecture
Notes 03 - Introduction to Assembler
Notes 04 - Bit Operations
Notes 05 - Subprograms
Notes 06 - Linking with High-Level Languages
Notes 07 - Instruction Encoding
Notes 08 - BCD
Getting Started with NASM
Using Debug
Instruction Format Reference
80x86 Instruction Set Reference
Instruction Timing

Assembler Books
Paul Carter: PC Assembly Language
Randall Hyde: Art of Assembly Language

The author's website at, offering several free versions in PDF and HTML formats is not currently functional, but the PDF is availlable from:
Planet PDF (one large PDF)
Randall Hyde, Author (zip format, one file per chapter)

Assemblers and Compilers
Visual C++ Express
Includes MASM (ml.exe). Any version of Visual Studio C++ 2005/2008/2010 should work for this course.
Netwide Assembler (NASM)
Can be used with Windows or Linux
Get Real Debugger (GRDB)

Assembler Resources and Additional Reading
   Computer Arithmetic Tragedies page of Kees Vuik
   The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) Unicode Tutorial
   UTF-8 and Unicode FAQ for Unix/Linux

Architecture Resources and Additional Reading
   A Crash Course in Modern Hardware
Video with Slides. A presentation focusing on instruction level parallelism.
   Harry Porter's Relay Computer
   J. von Neumann's 1945 paper First Draft of a Report on the EDVAC
   ACM Queue: The Long Road to 64 bits
   Intel Cache Overview
   What every programmer should know about memory, Part 1
   Memory part 2: CPU caches
   Toshiba White Paper: NAND and NOR Flash
   ACM Queue: You Don't Know Jack about Disks 
   Hard Disk Drives: The Good, the Bad and the Ugly!
   Triple Parity RAID and Beyond
   Seagate Hybrid SSD: the good and the not-so-good.
   Intel Endianness White Paper
   Intel 8255A Data Sheet