This preview shows page 1. Sign up to view the full content.
Unformatted text preview: ld the coding begin. Individual modules should be coded, tested thoroughly (which may require special programs to be designed as 'test-harnesses') and documented, and the program built piece by piece. Today nearly all programming is based on high-level languages, so it is rare for large programs to be built using assembly programming as described here. Sometimes, however, it may be necessary to develop small software components in assembly language to get the best performance for a critical application, so it is useful to know how to write assembly code for these purposes. 72 ARM Assembly Language Programming 3.5 Examples and exercises
Once you have the basic flavour of an instruction set the easiest way to learn to write programs is to look at some examples, then attempt to write your own program to do something slightly different. To see whether or not your program works you will need an ARM assembler and either an ARM emulator or hardware with an ARM processor in it. The following sections contain example ARM programs and suggestions for modifications to them. You should get the original program working first, then see if you can edit it to perform the modified function suggested in the exercises. Example 3.1 Print out r1 in hexadecimal. This is a useful little routine which dumps a register to the display in hexadecimal (base 16) notation; it can be used to help debug a program by writing out register values and checking that algorithms are producing the expected results, though in most cases using a debugger is a better way of seeing what is going on inside a program.
AREA Hex_Out,CODE,READONLY SWI_WriteC SWI_Exit
ENTRY EQU EQU &0 &11 output character in r0 finish program
code entry point LDR
BL r1, VALUE
HexOut get value to print
call hexadecimal output VALUE LOOP SWI DCD MOV CMP ADDGT ADDLE
SWI MOV SUBS BNE SWI_Exit &12345678
r2, #8 finish test value
nibble count = 8 HexOut MOV r0, r0, r0, r0, r1, LSR #28 #9 r0, #"A"-10 r0, #"0" get top nibble 0-9 or A-F? ASCII alphabetic ASCII numeric
print character shift left one nibble decrement nibble count if more do next nibble SWI_WriteC r1, r1, LSL #4 r2, r2, #1 LOOP MOV END Exercise 3.1.1 pc, r14 return Modify the above program to output r1 in binary format. For the value loaded into r1...
View Full Document
This document was uploaded on 10/30/2011 for the course CSE 378 380 at SUNY Buffalo.
- Spring '09