ARM Addressing Modes
Objective of this lab:
To explore ARM addressing modes and implement them in Keil uVision 5
Preparation
Read lab lecture notes.
Lab Assignment
Program#1:
Write an ARM assembly language program AddGT.s to
add up all the numbers that are great than 5 in the number array NUM1.
Look at the following given code for more details and complete it.
;The semicolon is used to lead an inline documentation
;When you write your program, you could have your info at the top document lock
;For Example: Your Name, Student Number, what the program is for, and what it does etc.
;;; Directives
PRESERVE8
THUMB
; Vector Table Mapped to Address 0 at Reset
; Linker requires __Vectors to be exported
AREA RESET, DATA, READONLY
EXPORT __Vectors
__Vectors
DCD 0x20001000 ; stack pointer value when stack is empty
DCD Reset_Handler ; reset vector
ALIGN
;Your Data section
;AREA DATA
SUMP DCD SUM
N DCD 7
NUM1 DCD 3, -7, 2, -2, 10, 20, 30
POINTER DCD NUM1
AREA MYRAM, DATA, READWRITE
SUM DCD 0
; The program
; Linker requires Reset_Handler
AREA MYCODE, CODE, READONLY
ENTRY
EXPORT Reset_Handler
Reset_Handler
;;;;;;;;;;User Code Start from the next line;;;;;;;;;;;;
; Please complete the program to add up all the
; numbers in the array NUM1 that are greater than 5.
; Put the sum in the register R0.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Hint: Check the example in the lab notes.
You will hand in the following:
- The source code in the file AddGT.s
- The screenshot (print screen) to show the program has been successfully built
- The screenshot showing the sum in R0.
Program#2:
Write an ARM assembly language program Min-Max.s to
find the maximum value and the minimum value in the number array NUM1.
Look at the following given code for more details and complete it.
;The semicolon is uded to lead an inline documentation
;When you write your program, you could have your info at the top document lock
;For Example: Your Name, Student Number, what the program is for, and what it does etc.
;;; Directives
PRESERVE8
THUMB
; Vector Table Mapped to Address 0 at Reset
; Linker requires __Vectors to be exported
AREA RESET, DATA, READONLY
EXPORT __Vectors
__Vectors
DCD 0x20001000 ; stack pointer value when stack is empty
DCD Reset_Handler ; reset vector
ALIGN
;Your Data section
;AREA DATA
;Max DCD 0
MaxP DCD Max
;Min DCD 0
MinP DCD Min
N DCD 12
NUM1 DCD 3, -7, 2, -2, 10, 20, 30, 15, 32, 8, 64, 66
POINTER DCD NUM1
AREA MYRAM, DATA, READWRITE
Max DCD 0
Min DCD 0
; The program
; Linker requires Reset_Handler
AREA MYCODE, CODE, READONLY
ENTRY
EXPORT Reset_Handler
Reset_Handler
;;;;;;;;;;User Code Start from the next line;;;;;;;;;;;;;;;;;
; Add code below to find the maximum value and
; the minimum value in the number array NUM1.
; You can use the example in the notes as a reference.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
You will hand in the following:
- The source code in the file Min-Max.s
- The screenshot (print screen) to show the program has been successfully built
- The screenshot showing the Min in R5 and the Max in R6.
Copyright: Department of Computer Science, University of Regina.