WIDENER UNIVERSITY
College of Arts and Sciences
Science Division
CSCI 264
Assembly Language Programming
Spring 2020

Instructor: Neveln                                                                                   Office: Freedom 312
e-mail: neveln@cs.widener.edu                                                                 Office Hrs: MWF 11-12, Th 9:30-10:30.

Goal: The main goal of the course is to use a particular assembly language as a vehicle for the understanding of a particular computer architecture and its relation to the operating system and the C programming language. x86 assembler is the language studied.

Assemblers: The assemblers used are NASM, EDLINAS (in Python) and EDLINAS (the Web Application).

Books: The main text for the course is Linux Assembly Language Programming by the instructor. There are additional books I recommend for those interested. A book which details fairly completely and accurately, from a programmer's point of view, the internal operations of the 16 and 32 bit x86 processors is 80x86 Architecture & Programming, Volume II by Rakesh Agarwal. A fairly recent book is x86 Instruction Set Architecture by Tom Shanley. This book is very comprehensive, but sometimes a little careless.

Supervised Labs: On each Thursday there will be a supervised lab. Lab write-ups, worth 10 points, are due the day following the lab, unless they involve an out-of-lab programming assignment. Some of the labs involve programming in the C language. This language will be reviewed early in the semester.

Grading: The grade for the course will be based on the point total from the labs, the tests, and the final exam. There will be a 100 point test given approximately every two weeks. The final exam will be 200 points. The scale used will be 90-100 A, 80-90 B, etc.

Topics:

  1. Background and Overview: Linux, the Gnu Compiler, Assembly Language and Edlinas.
  2. Positional Numeration Systems: Binary, Hex and Two's Complement.
  3. Logic Circuits and Computation: Combinational and Sequential Circuits, x86 Processor History Overview.
  4. Assembly Language Overview: Arithmetic, I/O, Branching and Looping statements, Comparisons with signed and unsigned integers.
  5. Memory: Use of memory operations using the edlinas simulator. Also: data definition using EQU, DB, etc., memory referencing and labels.
  6. The Stack: Subprograms, Parameter Passing, Calling C from Assembler, Calling Assembler from C and Recursion.
  7. Machine Language Overview: Hand assembly of simple programs, the ModRM byte, object code files.
  8. Linux User Programs: Writing Assembly language programs using edlinas which can be linked using gcc and run in Linux. Also: executable files, data, text and BSS segments, and ELF format.
  9. Bit Manipulations: Bit Testing and Setting, Shift Instructions.
  10. Interrupt Processing: Hardware interrupts, IRQs, ISA system architecture, software interrupts, and privilege levels.
  11. DOS Programs: Real Mode Segments, Fixed Memory Areas, BIOS and DOS interrupts.