COMP9032 Lab 1 
	Sept. 2025 
	
		For this lab, you are required to work solo, and your work is assessed individually.
	
	
		1. Objectives
	
	
		In this lab, you will learn:
	
	
		•     AVR instructions, and
	
	
		•     basic assembly programming.
	
	
		2. Programming Style.	
	
		The general practice, when you write an assembly program, is to maintain the readability and consistency of your code. For this reason, you are encouraged to adopt the following rules:
	
	
		•     Starting each source code file with a heading that includes:
	
	
		o  your name so that it is easy to see who is responsible for the file, the date of last modification and a version number, and
	
	
		o a description of what the program does, possibly with a pseudo-code for a high-level abstraction. 
	
	
		•     Including appropriate comments that explain the “why", not just the “how" of the program throughout the source code.
	
	
		•     Using a sensible layout for your code - to make it easy to see the code structure, instructions, and any labels.
	
	
		3. Tasks
	
	
		There are three tasks in this lab. Task 1 will be assessed by your two lab tutors in Week 2, and Tasks 2&3 will be assessed by both your peers and the tutors in Week 3.
	
	
		Task 1 (30 marks, due in your lab session in Week 2)
	
	
		1)   Write an assembly program that converts a signed binary number from a register into its
	
	
		decimal representation and stores each character of the decimal string (including the sign) as its ASCII value in a sequence of registers. An example is shown in Figure 1, where the signed binary 11111011 in R3 is converted into decimal -5 which is stored in the register pair R4:R5 in the ASCII format (See the ASCII table given at the end of this document) . 
	
	
		2)   Assemble and simulate your program using Microchip Studio and demonstrate your work to your lab tutors.
	
	 
	Figure 1: Signed binary 11111011 is converted to decimal and stored in R4:R5 in ASCII
	Task 2 (35 marks, due in your lab session in Week 3)
	  
	1)   Write an assembly program to calculate a√a  , where a is a one-byte unsigned number and the result is rounded down to the nearest integer, e.g. 5√5 =  11.18 → 11.
	2)   Create a demo video that shows how you verify your design with a set of testing cases.
	Task 3 (35 marks, due your lab session in Week 3)
	1)   The greatest common divisor (GCD) of two integers can be calculated in a way as given in a C-like pseudo code shown in Figure 2. Based on this calculation approach, write an assembly program to obtain the GCD of an array of 8-bit unsigned integers. The size of the array is less than 16 and is stored in register R0. The elements of the array are stored consecutively from register R1 up to R15.  For this task, you are required to use macros to improve your code.
	The concept of macro is discussed in Week 2.
	2)   Create a demo video that clearly demonstrates the correctness of your design using three test cases with different array sizes
	 
	Figure 2: Pseudo Code GCD
	NOTE:
	•    To simplify testing, we assume the input values of all tasks can be manually set in the  registers before execution (See explanation on page 5 of Lab 0 on how to set a register value).
	•    You can put your code for each task in the same project in Microchip Studio for this lab. Run the program for each task by setting it as the entry file, which has been explained in Lab 0.
	•    All your programs should be well commented on and easy to read.
	•     The peer assessment form for Tasks 2 & 3 will be available in Week 3.