Jim Plusquellic
Assistant Professor, Department of
CSEE,
UMBC
CMPE 310: Systems Design and Programming
Course Syllabus
Course Syllabus (PDF)
Introduction (mod:2/1)
Introduction (PDF)(mod:2/1)
80x86 Architecture Basics (mod:2/2)
80x86 Architecture Basics (PDF)(mod:2/2)
OS Essentials (mod:2/2)
OS Essentials (PDF)(mod:2/2)
80x86 Microprocessor Register Architecture (mod:2/2)
80x86 Microprocessor Register Architecture (PDF)(mod:2/2)
Protected Mode Memory Addressing (mod:2/2)
Protected Mode Memory Addressing (PDF)(mod:2/2)
Paging (mod:2/2)
Paging (PDF)(mod:2/2)
Advanced Topics (mod:2/2)
Advanced Topics (PDF)(mod:2/2)
8086 Chip Set (mod:2/20)
8086 Chip Set (PDF)(mod:2/20)
Memory I (mod:2/25)
Memory I (PDF)(mod:2/25)
Memory II (mod:3/4)
Memory II (PDF)(mod:3/4)
Memory III (mod:3/6)
Memory III (PDF)(mod:3/6)
Basic IO I (mod:4/1)
Basic IO I (PDF)(mod:4/1)
Basic IO II (mod:4/8)
Basic IO II (PDF)(mod:4/8)
Basic IO III (mod:4/15)
Basic IO III (PDF)(mod:4/15)
Basic IO IV (mod:4/22)(New slides)
Basic IO IV (PDF)(mod:4/22)(New slides)
Interrupts I (mod:4/1)
Interrupts I (PDF)(mod:4/1)
Disk Storage, Video and DMA (PDF)(mod:4/6)(New slides)
Bus Standards (PDF)(mod:4/8)
Announcements:

Students from the other section will be joining my lecture on Wednesday.
The lab for Friday will also be combined and will meet from 1:00 to 3:00 (2/8).

NOTE: The laboratory for section 0101 will meet this week at 2:00pm, not at
1:00pm as scheduled. I'm hosting a potential Comp. Eng. faculty candidate
who is giving her talk in ECS 210 from 12pm. Students are welcome to
attend. The laboratory lecture will be given following the talk from 23pm.
Students are reminded that laboratory attendance is mandatory, (attendance
will be taken).

My section (0101) (mod:2/4)
Anyone not listed on one of these two list MUST see us after class today!

Chintan's section (0201) (mod:2/4)

Students are encouraged to bring a copy of the slides to class. It is very important
that you take notes during the lectures.

Advanced material on Segmentation/Paging/Call Gates from text "Advanced 80386 Programming Techniques" by James L. Turley, Osborne McGrawHill

IMPORTANT ANNOUNCEMENT: Lab today (March 1) will be held from 2:004:00 instead
of 1:003:00. We have a computer engineering faculty candidate on campus. You
are welcome to come to the colloquium at 1:00pm in ECS 210I.

The midterm is scheduled for this Wednesday, March 13th. you are responsible for all the
material between (and including) 80x86 Architecture Basics and Memory II (up to slide 10),
as well as the following assembly slides sets: Assembly Basics, Addressing Modes I & II,
NASM, Stack Basics and Coprocessor Instructions. Explaining assembly code fragments is
fair game for the exam.

Note, since this class is now 4 credits, we have made more progress than we have in
previous years. Therefore, I've also included the final exams from previous years,
as much of that material is relevant to our midterm.

Sample Midterm exam

Sample Midterm exam (2000) (PDF)

Sample Midterm exam (2001) (PDF)

Sample Midterm exam (2002) (PDF)

Sample Final exam (2000) (PDF)

Sample Final exam (2001) (PDF)

Sample Final exam (2002) (PDF)

IMPORTANT ANNOUNCEMENT: Lab today (March 15) will be held from 1:303:00  we are
combining the labs for the two classes since Chintan will be giving a Cadence lecture.

IMPORTANT ANNOUNCEMENT: Lab this friday (March 22) will be held from 1:303:00  we are
combining the labs for the two classes since Chintan will continuing his Cadence lecture.

IMPORTANT ANNOUNCEMENT: Lab this friday (April 19) will be held from 1:303:00  we are
combining the labs for the two classes since I will be giving the lecture on Linux device
drivers.

IMPORTANT ANNOUNCEMENT: Lab this friday (April 26) will be held from 1:303:00  we are
combining the labs for the two classes since I will be giving the lecture on Linux device
drivers.

Test bench to be posted
on Monday for Project 5

IMPORTANT ANNOUNCEMENT: Until further notice, the labs this week through the end of the
term will be combined and will meet at 1:303:00.

IMPORTANT ANNOUNCEMENT: The lab meeting for today (Friday, May 10th) is cancelled.

VERY IMPORTANT ANNOUNCEMENT: THE FINAL IS FROM 1:00pm to 3:00pm Wed, May 22nd (tomorrow)!
Lab lectures notes
Assembly Basics (mod:2/3)
Assembly Basics (PDF)(mod:2/3)
Addressing Modes I (mod:2/9)
Addressing Modes I (PDF)(mod:2/9)
Addressing Modes II (mod:2/9)
Addressing Modes II (PDF)(mod:2/9)
NASM (Small correction to Hello World program) (mod:2/9)
NASM (Small correction to Hello World program) (PDF)(mod:2/9)
Stack Basics (mod:2/21)
Stack Basics (PDF)(mod:2/21)
Data Movement Instructions (mod:2/21)
Data Movement Instructions (PDF)(mod:2/21)
Aritmetic and FlowofControl Instructions (mod:2/21)
Aritmetic and FlowofControl Instructions (PDF)(mod:2/21)
Coprocessor Instructions (mod:2/28)
Coprocessor Instructions (PDF)(mod:2/28)
Modules Under Linux (PDF)(mod:4/18)
Module Basics I (PDF)(mod:4/25)
Driver Basics I (PDF)(new slides)(mod:5/2)
Driver Basics II (PDF)(updates)(mod:5/4)
Projects:

Comments on the use of GCC and LD for assembling.

My macros for your use (courtesy of me)

Floating point printf example

The code to get the command line if you are using GCC.

ASSIGNMENT 1: Due Feb. 26th (2/20)

ASSIGNMENT 1: Due Feb. 26th (PDF) (2/20)

Instructions on the use of submit to submit your project (2/25)

ASSIGNMENT 2: Due Mar. 5th (PDF) (2/25)

Starter code for ASSIGNMENT 2 (asm) (3/1)

ASSIGNMENT 3: Due Mar. 21th (PDF) (3/8)

C code for ASSIGNMENT 3 (C code) (3/8)

Project 4: Due Apr. 9 (4/2)

Project 4 testbench (4/2)

Project 4 input file (4/2)

Project 5: Due 4/28 for extra credit, and May 3 otherwise.

Type in the scull device driver code given in Chapter 3 of the text. Type in the script
that calls insmod creates the device nodes. Test them on the lab machines and submit both files by
Tuesday, May 7th at midnight.
NASM Source and Documentation:

Linux NASM source (v0.98)

Table of Contents

NASM example

Instructions on how to compile the example.

Documentation on the 0x80 system call interface.

System error number to name file (found under /usr/src/linux/include/asm/errno.h).

The main source of documentation on Linux Assembly Language.

A short primer on gdb (courtesy Jeff Walton) (updated version) (PDF)

ald: An alternative to gdb (courtesy Ifeoma Kaja) (tar ball gzipped)

The compiled binary "ald: an alternative to gdb"  download and run (courtesy Ifeoma Kaja) (executable)

Another NASM web site. (courtesy Jeff Walton)

Yet another nasm debugger (courtesy of Laura Smith)
Linux Documentation:

Example linux device driver code (tgz) from Rubini and Corbet text (4/17/2002).

Documentation on how to compile a kernel (4/17/2002).

Documentation on Assembly language programming for linux (courtesy of Steve Brown).

Documentation on how to compile a kernel. This HOWTO document is found under /usr/src/doc/HOWTO/

Hardware supported under linux and how to configure it. This HOWTO document is found under /usr/src/doc/HOWTO/

(entry.S) Kernel system call source file found in /usr/src/linux/arch/i386/kernel/

(unistd.h) Kernel system call numbers (to be put into eax) in /usr/include/asm/
Jim Plusquellic /
CSEE /
plusquel@umbc.edu