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