CSCI 224: Assembly Language Programming

Course Agenda (Fall 2025)

ClassDateTopics covered in class
1Wed
9/3
Getting started: syllabus, grading policy, course outline, online services, submission of assignments, place of assembly language, binary representation of integer numbers, converting integers from decimal to binary and back.
2Fri
9/5
Binary representation of signed integer numbers, sign extention of numbers, the hexadecimal system, converting numbers between binary and hex, addition in binary system, intro to ARM Cortex microcontrollers.
3Mon
9/8
Representation of characters with ASCII codes, null-termitated strings, general structure of assembly code.
4Tue
9/9
Lab 1: Getting started with Keil μVision IDE
5Wed
9/10
Creating projects from template, CPU registers, input and output of strings and numbers.
6Fri
9/12
Indirect addressing, printing arrays of numbers.
7Mon
9/15
Performing simple arithmetic, computing array sums, computing string length.
8Tue
9/16
Lab 2: Input/output and arithmetic
9Wed
9/17
Allocating and initializing variables of various lengths in ROM, working with Keil debugger.
10Fri
9/19
Eucledian algorithm for computing the Greatest Common Divisor (GCD).
11Mon
9/22
Output of numbers in different bases.
12Tue
9/23
Lab 3: Indirect addressing, indexing, and loops
13Wed
9/24
Implementation of the ReadInt function.
14Fri
9/26
Functions design in assembly, passing parameters to functions in registers by value and by reference, returning values from functions.
15Mon
9/29
passing parameters to functions in stack, the stack frame concept, the GCD function design, intro to Bubble-Sort algorithm.
16Tue
9/30
Lab 4: Working with stack
17Wed
10/1
Printing arrays, programming and tracing the Bubble Sort algorithm.
18Fri
10/3
Computing minimum and maximum array elements, programming Selection Sprt algorithm.
19Mon
10/6
Intro to recursion, computing factorials recursively, tracing code with debugger.
20Tue
10/7
Lab 5: Working with recursion
21Wed
10/8
Recursive implementation of GCD.
22Fri
10/10
Printing strings recursively forwards and backwards.
23Mon
10/13
Recursive print of arrays, recursive implementation of the Bubble sort algorithm.
24Tue
10/14
No class
25Wed
10/15
Configuring microcontroller pins for input/output, Blink-A-LED project.
26Fri
10/17
Intro to LEIMER peripheral, blink LED with LETIMER.
27Mon
10/20
Fall break
28Tue
10/21
Fall break
29Wed
10/22
Using LETIMER channels, direct LED control by LETIMER, intro to PWM.
30Fri
10/24
Using PWM and LETIMER for LED brightness control, setting PWM duty cycle from the user input.
31Mon
10/27
Working with BURTC and RTCC timer, polling RTCC interrupt flags.
32Tue
10/28
Lab 7: Processing button presses
33Wed
10/29
Switch debouncing, implementing the debouncing algorithm.
34Fri
10/31
Basics of interrupt processing, working with LETIMER UF interrupt and with RTCC CNTTICK interrupt.
35Mon
11/3
Working with RTCC channel interrupts, configuring GPIO interrupts.
36Tue
11/4
Lab 8: Processing GPIO interrupts
37Wed
11/5
Combining button interrupts with debouncing, intro to PRS.
38Fri
11/7
Programming the Reaction game.
39Mon
11/10
Intro to the USART module, using UART for sending and receiving characters, polling USART interrupt flags.
40Tue
11/11
Lab 9: Developing Terminal Library
41Wed
11/12
Processing USART interrupts for sending and receiving strings.
42Fri
11/14
Basics of I2C communication protocol.
43Mon
11/17
Developing I2C driver and sensor driver.
44Tue
11/18
Lab 10: Working with Si7021 sensor
45Wed
11/19
Intro to SPI communication protocol, working with accelerometer, filtering accelerometer data.
46Fri
11/21
More details on accelerometer setup, applications of accelerometers.
47Mon
11/24
Working with accelerometer interrupt, working with non-volatile SPI flash.
48Tue
11/25
The f.p. format details, overview of ARM FPU instructions, using ARM FP co-processor, input/output of f.p. numbers, retargeting standard I/O.
49Wed
11/26
Computing array sum and average of f.p. numbers, computing roots of quadratic equations.
50Fri
11/28
No class (Thanksgiving)