Computer Architecture & Organization: Instructions: Pcspim Tutorial
Computer Architecture & Organization: Instructions: Pcspim Tutorial
19/02/2009
What is an Assembler ASM Directives ASM Syntax Intro to PCSPIM Simple examples
19/02/2009
Add the numbers 0 to 4 10 = 0 + 1 + 2 + 3 + 4 In C: int i, sum; main() { sum = 0; for (i=0; i<5; i++) sum = sum + I; } Now lets code it in ASSEMBLY
19/02/2009 CA&O Lecture 05 by Engr. Umbreen Sabir
What IS an Assembler?
19/02/2009
An Assembly SOURCE FILE contains, in symbolic text, values of successive bytes to be loaded into memory... e.g. .data 0x10000000 Specifies address where following values are loaded .byte 1, 2, 3, 4 #First four byte values .byte 5, 6, 7, 8 # Second four byte values .word 1, 2, 3, 4 # 4 WORD values (each is 4 bytes) .asciiz "Comp 411 # A string of 9 ASCII bytes .
19/02/2009 CA&O Lecture 05 by Engr. Umbreen Sabir
.align 2 # Align to next multiple of 4 (22) .word 0xfeedbeef # Hex encoded WORD Value Resulting memory dump:
[0x10000000] 0x04030201 0x08070605 0x00000001 0x00000002 [0x10000010] 0x00000003 0x00000004 0x706d6f43 0x31313420 [0x10000020] 0x00000000 0xfeedbeef 0x00000000 0x00000000
Notice the byte ordering. This MIPS is little-endian (The least significant byte of a word or half-word has the lowest address)
19/02/2009 CA&O Lecture 05 by Engr. Umbreen Sabir
Assembler Syntax
.data <addr> Subsequent items are considered data .text <addr> Subsequent items are considered instructions .align N Skip to next address multiple of 2N
19/02/2009
Allocate Storage
.byte b1, b2, , bn Store a sequence of bytes (8-bits) .half h1, h2, , hn Store a sequence of half-words (16-bits) .word w1, w2, , wn Store a sequence of words (32bits) .ascii string Stores a sequence of ASCII encoded bytes .asciiz string Stores a zero-terminated string .space n Allocates n successive bytes
19/02/2009 CA&O Lecture 05 by Engr. Umbreen Sabir
Define scope
.globl sym
Declares symbol to be visible to other files .extern sym size Sets size of symbol defined in another file (Also makes it DIRECTLY addressable)
9
19/02/2009
10
Actual Code
.text 0x80000080 .globl main Main: add $8,$0,$0 add $9,$0,$0 Loop: addu $8,$8,$9 addi $9,$9,1 slti $10,$9,5 bne $10,$0,loop end: beq $0,$0,end
# sum = 0 # for (i = 0; ... # sum = sum + i; # for (...; ...; i++ # for (...; i<5;
11
19/02/2009
SPIM Simulation
Lets tryout our Example Well use the PCSPIM (MIPS backwards) integrated ASSEMBLER, SIMULATOR, and DEBUGGER.
12
19/02/2009
The following hints will get you started with SPIM By default a small fragment of code is loaded called the kernel. We will discuss the role of this code in detail, later in the course. Basically its primary job is to branch to the main label of your code. It does so in approximately 4 instructions. We will use a raw version of the machine, w/o a kernel. You can single-step the machine by pressing [F10].
19/02/2009 CA&O Lecture 05 by Engr. Umbreen Sabir
13
The results of the execution of each instruction are reflected in the register and memory location values. Illegal operations result in an exception which causes your code to automatically jump back the kernel. For our purposes now, this will be due to a bug in your program. Refer to the manual for more fancy usage, such as setting and executing to breakpoints
19/02/2009 CA&O Lecture 05 by Engr. Umbreen Sabir
14
15
19/02/2009
RAW SPIM
16
19/02/2009
17
Variable Allocation
We cheated in our last example. Generally, variables will be allocated to memory locations, rather than registers. This time we add the contents of an array
.data .extern sum 4 .extern i 4 .extern a 20 sum: .space 4 i: .space 4 a: .word 7,8,9,10,8
19/02/2009 CA&O Lecture 05 by Engr. Umbreen Sabir
18
.word allows us to initialize a list of sequential words in memory. The label represents the address of the first word in the list, or the name of the array
19
19/02/2009
20
19/02/2009
21
19/02/2009
22
19/02/2009
A Coding Challenge
What is the largest Fibonacci number less than 100? Fibonacci numbers: Fi+1 = Fi + Fi-1 F0 = 0 F1 = 1 0, 1, 1, 2, 3, 5, 8, 13, 21, 34,
23
19/02/2009
A Coding Challenge
In C
24
19/02/2009
Next lecture
MIPS ISA
25
19/02/2009
END OF LECTURE 5
26
19/02/2009