Computer Architecture and Systems Programming Lab
SPlab, Computer Architecture
Prerequisites: Digital Systems (361-13591), Introduction to Computers (in parallel),
Credits: 4 in the Computer Architecture and Systems Programming Lab (for 2.5 lecture hours, 1 exercise session, 3 lab hours). Divided as 1.5 credits for SPlab,
and 2.5 for the architecture only part of the course.
- Grading (approximate):
- Architecture and SP lab: 55% final exam (must pass final exam to pass the course!),
15% homework assignments, 30% lab grades (lab attendance mandatory! Must pass at least 7 labs and get an average lab grade greater than 55 (including all labs) to pass the course.).
- Students in SPlab only: 30% final exam
(at same time as architecture exam, must pass final exam to pass the course!),
70% lab grades (lab attendance mandatory! Must pass at least 7 labs and get a lab grade average greater than 55 (including all labs) to pass the course.).
- Students in 2.5 credit computer architecture only: 70% final exam
(must pass final exam to pass the course!), 30% homework assignments.
No cheating! You are required to get a non-zero grade on all
assignments and labs in order to pass the course. An unsubmitted assignment or lab gets
1/100. An assignment too similar to someone else's assignment (i.e.
cheating) gets you 0/100 and no credit in the course.
Syllabus and Detailed Description
Topics Covered in the Course (Lectures and Practical Sessions)
Review of basic architecture
Machine and assembly languages (generic)
The process of assembly and linking
Special assembly language programming issues
Parameter passing: assembly language and "external"
Return addresses and co-routines
Traps and interrupts: mechanism and handling
- Worms and viruses: malicious code and defending against it.
- Architecture design considerations - CISC vs. RISC
Special miscellaneous topics
Operating system interface: traps and interrupts *
Access to IO devices: display, keyboard, disks, real-time clocks, DMA *
Communications (serial and parallel), simple error detection and correction
codes (parity, Hamming), handshakes.
Topics Covered in the Labs (including special lectures)
The Lab will be based on a LINUX platform, and use the C programming language.
The emphasis is on low-level programming. Goals of this lab are to introduce
issues in low level programming, as well as techniques on how
to learn needed information on demand.
The following topics will be covered via hands-on experience during
- Low level programming in C. This includes all sorts of "tricks"
that emphasise the power of low-level computing, as an aid to
understanding computing systems in depth:
- Pointers to functions and their applications.
- Self modifying code and applications.
- Binary files of various types: structure and processing.
- Maintaining data structures in files (e.g. pointers to structures, Linux directories).
- Object and executable files (demonstrated through ELF files).
- Linking and Loading.
- Using operating systems services (system calls):
- Process control: creating and terminating processes,
process control, signals. Will be introduced by programming
a simple shell.
- System-level Input/Output: read, write files, file
metadata, sharing files.
- Issues in program developement:
- Debugging programs, and the effect of compound bugs (e.g. various
types of memory leaks, compiler bugs).
- Patching and hacking.
Sourcebooks and Written Material
NASM online manual.
IBM PC Assembly Language Programming, Peter Abel, Prentice Hall (second
- D. A. Patterson and J. L. Hennessey, Computer Organization & Design:
The Hardware Software Interface, Morgan Kauffman, second edition 1998.
- Other material available at the useful links on the course web site.
Back to BGU CS HomePage