CSCI 224: Assembly Language Programming

Course Agenda (Fall 2023)

ClassDateTopics covered in class
1Wed
9/6
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/8
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/11
Representation of characters with ASCII codes, null-termitated strings, Intro to ARM Cortex microcontrollers.
4Tue
9/12
Lab 1: Getting started with Keil μVision IDE
5Wed
9/13
CPU registers, general structure of assembly code.
6Fri
9/15
Input and output of strings and numbers.
7Mon
9/18
Computing string length, using debugger.
8Tue
9/19
Lab 2: Input/output and arithmetic
9Wed
9/20
Allocating and initializing variables for numbers characters and strings, computing array sums.
10Fri
9/22
Copying arrays from ROM to RAM, computing the Greatest Common Divisor (GCD).
11Mon
9/25
Output of numbers in different bases.
12Tue
9/26
Lab 3: Indirect addressing, indexing, and loops
13Wed
9/27
More on output hexadecimal numbers, implementation of the ReadInt function. functions design in assembly.
14Fri
9/29
Passing parameters to functions in registers and in stack, returning values from functions, computing factorials.
15Mon
10/2
Further examples of passing parameters to functions in stack and by using the stack frame (computing GCD).
16Tue
10/3
Lab 4: Working with stack
17Wed
10/4
Passing parameters to functions by value and by reference, programming Bubble Sort algorithm.
18Fri
10/6
Computing minimum and maximum array element, Selection sort.
19Mon
10/9
Computing maximum element in array, intro to recursion, computing factorials recursively.
20Tue
10/10
Lab 5: Working with recursion
21Wed
10/11
Printing strings recursively forwards and backwards.
22Fri
10/13
Recursive implementation of GCD, recursive implementation of the Bubble sort algorithm.
23Mon
10/16
Recursive print of arrays, recursive computation of a minimum element in array.
24Tue
10/17
Passing values by reference, recursive implementation of Selection Sort.
25Wed
10/18
Configuring microcontroller pins for input/output (Lab).
26Fri
10/20
No class
27Mon
10/23
Fall break
28Tue
10/24
Fall break
29Wed
10/25
Working with RTCC timer, polling RTCC interrupt flags.
30Fri
10/27
Using RTCC alarms channels to schedule various events.
31Mon
10/30
Intro to LEIMER peripheral, using LETIMER channels, direct LED control by LETIMER.
32Tue
10/31
Lab 6: Working with LETIMER
33Wed
11/1
Basics of PWM, using PWM and LETIMER for LED brightness control, setting PWM duty cycle from the user input.
34Fri
11/3
Working with TIMER0 peripheral.
35Mon
11/6
Configuring port pins for input, detecting button presses, using BTN0 to toggle the on-board LED.
36Tue
11/7
Lab 7: Processing button presses
37Wed
11/8
Switch debouncing, implementing the debouncing algorithm.
38Fri
11/10
Basics of interrupt processing, working with LETIMER UF interrupt, working with RTCC interrupts.
39Mon
11/13
Configuring GPIO interrupts.
40Tue
11/14
Lab 8: Processing GPIO interrupts
41Wed
11/15
Combining button interrupts with debouncing, intro to PRS.
42Fri
11/17
Programming the Reaction game.
43Mon
11/20
Intro to the USART module, sending and receiving characters, polling USART interrupt flags.
44Tue
11/21
Lab 9: Developing Terminal Library
45Wed
11/22
Processing USART interrupts for sending and receiving strings.
46Fri
11/24
No class (Thanksgiving)
47Mon
11/27
Intro to I2C protocol, SI7021 sensor structure and interface.
48Tue
11/28
Lab 10: Working with Si7021 sensor
49Wed
11/29
Intro to SPI communication protocol, working with accelerometer.
50Fri
12/1
Reading data from accelerometer, programming digital filter for accelerometer, review of Part II of the course.
51Mon
12/4
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/5
Computing array sum and average of f.p. numbers, computing roots of quadratic equations.
53Wed
12/6
Comparing f.p. values, copy FPU flags to the CPU flags register, computing square roots with the bisection method.
54Fri
12/8
Computing sin(x), review of Module 7.
55Mon
12/11
Basics of C: type casting, using loops and conditional statements, working with 1-dim and 2-dim arrays, passing 1-dim arrays to functions, function prototypes, bubble-sort arrays.
56Tue
12/12
Passing parameters to function by value and by reference, working with structures in C, copying structures, passing and returning structures and arrays from functions, working with pointers.
57Wed
12/13
Developing microcontroller applications on C that involve hardware configuration, using EMLIB library.
58Fri
12/15
Developing combined C/Assembly projects.