CSCI 224: Assembly Language Programming

Course Agenda (Fall 2024)

ClassDateTopics covered in class
1Wed
9/4
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/6
Binary representation of signed integer numbers, sign extention of numbers, the hexadecimal system, converting numbers between binary and hex, addition in binary system.
3Mon
9/9
Representation of characters with ASCII codes, null-termitated strings, Intro to ARM Cortex microcontrollers.
4Tue
9/10
Lab 1: Getting started with Keil μVision IDE
5Wed
9/11
General structure of assembly code.
6Fri
9/13
Creating projects from template, CPU registers, input and output of strings.
7Mon
9/16
Input and output of strings and numbers, simple arithmetic, computing array sum.
8Tue
9/17
Lab 2: Input/output and arithmetic
9Wed
9/18
Allocating and initializing variables of various lengths in ROM, working with Keil debugger.
10Fri
9/20
Capitalizing every string letter, Eucledian algorithm for computing the Greatest Common Divisor (GCD).
11Mon
9/23
Implementing the GCD algorithm, output of numbers in different bases.
12Tue
9/24
Lab 3: Indirect addressing, indexing, and loops
13Wed
9/25
More on output hexadecimal numbers, implementation of the ReadInt function.
14Fri
9/27
Functions design in assembly, passing parameters to functions in registers and in stack, returning values from functions, computing factorials.
15Mon
9/30
Further examples of passing parameters to functions in registers, passing parameters by value and by reference, into to the stack frame concept.
16Tue
10/1
Passing parameters to stack by using the stack frame, printing arrays.
17Wed
10/2
Turning GCD into a function, intro to Bubble-Sort algorithm.
18Fri
10/4
Programming and tracing the Bubble Sort algorithm.
19Mon
10/7
Computing minimum and maximum array elements.
20Tue
10/8
Intro to recursion, computing factorials recursively, tracing code with debugger.
21Wed
10/9
Lab 4: Working with stack
22Fri
10/11
Lab 5: Working with recursion
23Mon
10/14
Printing strings recursively forwards and backwards, recursive implementation of GCD.
24Tue
10/15
Recursive print of arrays, recursive implementation of the Bubble sort algorithm.
25Wed
10/16
Recursive computation of a minimum element in array, recursive implementation of Selection Sort.
26Fri
10/18
Configuring microcontroller pins for input/output, Blink-A-LED project.
27Mon
10/21
Intro to LEIMER peripheral, using LETIMER channels, direct LED control by LETIMER.
28Tue
10/22
Lab 6: Working with LETIMER
29Wed
10/23
Basics of PWM, using PWM and LETIMER for LED brightness control, setting PWM duty cycle from the user input.
30Fri
10/25
Working with RTCC timer, polling RTCC interrupt flags.
31Mon
10/28
Fall break
32Tue
10/29
Fall Break
33Wed
10/30
Using RTCC alarms channels to schedule various events.
34Fri
11/1
Working with TIMER0 peripheral, Configuring port pins for input, detecting button presses, using BTN0 to toggle the on-board LED.
35Mon
11/4
Lab 7: Processing button presses
36Tue
11/5
Switch debouncing, implementing the debouncing algorithm.
37Wed
11/6
Basics of interrupt processing, working with LETIMER UF interrupt.
38Fri
11/8
Working with RTCC interrupts.
39Mon
11/11
Configuring GPIO interrupts.
40Tue
11/12
Lab 8: Processing GPIO interrupts
41Wed
11/13
Combining button interrupts with debouncing, intro to PRS.
42Fri
11/15
Programming the Reaction game, intro to the USART module.
43Mon
11/18
Using UART for sending and receiving characters, polling USART interrupt flags.
44Tue
11/19
Lab 9: Developing Terminal Library
45Wed
11/20
Processing USART interrupts for sending and receiving strings, basics of I2C communication protocol.
46Fri
11/22
Working with SI7021 temperature/humidity sensor.
47Mon
11/25
Lab 10: Working with Si7021 sensor
48Tue
11/26
Developing I2C driver and sensor driver, intro to SPI communication protocol.
49Wed
11/27
Working with accelerometer, filtering accelerometer data.
50Fri
11/29
No class (Thanksgiving)
51Mon
12/2
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.
52Tue
12/3
Computing array sum and average of f.p. numbers, computing roots of quadratic equations.
53Wed
12/4
Comparing f.p. values, copy FPU flags to the CPU flags register, computing square roots with the bisection method.
54Fri
12/6
Computing sin(x), review of Module 7.