Download presentation
Presentation is loading. Please wait.
1
Cosc 2150: Computer Organization
ARC assembly code Simplified SPARC language 1
2
There are 32 32-bit registers. %r0 through %r31. Reserved registers:
ARC Hardware There are bit registers. %r0 through %r31. Reserved registers: %r0 is always 0. Storing anything in %r0 will be lost. %r14 is a stack pointer register also called %sp %r15 is link register (used for subroutine calls) 2
3
The ARCTools Simulator Window
4
There are two addition registers
%pc, a 32-bit program counter register %psr, which is a processor status register Where arithmetic/logic flags are set. They are N,Z,V,C, where N is a negative flag Z is the zero flag V is the overflow flag C is the carry flag. The lowest 211 = 2048 addresses of the memory map are reserved for use by the operating system. 4
5
A Basic ARC assembly program
.begin .org 2048 !Lowest space in memory a program can go main: !special label, for start of your code !Assembly instructions halt !end of assembly code var: value ! variable: value of the variable. .end 5
6
Arithmetic instructions
All arithmetic and logic instructions have 3 opcode: instruction op1, op2, op3. Only op2 can be immediate load/ number otherwise, they will refer to a register. Any instructions that end in a cc, set condition codes (NZVC) addcc %r0, 1, %r1 (%r1 = 0 + 1) would set N=0, Z=0, V=0, and C=0 subcc %r0, 1, %r1 (%r1 = 0 – 1) would set N=1, Z=0, V=1, and C=0 Assuming %r1 = 1, subcc %r1, 1, %r1 (%r1 = %r1 –1), would set N=0, Z=1, V=0, and C=0 6
7
Data transfer instructions
All have 2 opcode instructions. load: ld [x], %r1 !load the value of x into %r1 ld %r1+x, %r2 !load the value found by %r1 +x (offset) into %r2 store: st %r1, [x] !store the value of %r1 into x st %r2, %r1+x ! store the value of %r2 into the address %r1 +x 7
8
Branch instructions All but one branch instruction have a single opcode in the following format branch label ! branch conditionally or unconditionally to the label example: ba done !branch to the label done ! assembly code done: halt ! stop the program be, bcs, bcc, bneg, bvs, bvc, bne, bpos all use the NZVC condition flags to as the condition whether to branch or not. jmpl and call are used for subroutines, which will be covered later. 8
9
The ARCTools Edit Window
10
The ARCTools Edit Window
• The Edit window with an asm file and the file dialog
11
Assembly The arc4 program after assembly, showing arc4.lst, the listing file.
12
Binary File The arc4 bin file, displayed after pressing the Show Binary File button.
13
Simulation The ARCTools simulator window after pressing Bin -> Sim.
14
Simulator note. You need a blank line at the end of the program or the program will not compile with normally a very strange error that makes no sense.
15
ARC example code (1) Example 1 main () { int a=15, b=5,c; c = a+ b; }
.begin .org 2048 main: ! c = a +b ld [a], %r1 ld [b], %r2 addcc %r1, %r2, %r3 st %r3, [c] halt a: 15 b: 5 c: 0 .end 15
16
ARC Example code (2) Example 2 main() { int a =2, c=0; if (a == 2) {
c =a*4; } else { c = a/2; } .begin .org 2048 main: ld [a], %r1 !if (a==2) subcc %r1, 2, %r0 bne else ! true c= a*4 sll %r1, 2, %r1 ba done ! false c = a/2 else: srl %r1, 1, %r1 done: st %r1, [c] halt a: 2 c: 0 .end
17
ARC code example (3) Example 3 main () { int a=15, b=5, c;
if (a>=b) c = a - b; else c a + b; } .begin .org 2048 main: ld [a], %r1 ld [b], %r2 !if (a>=b) subcc %r1, %r2, %r3 bneg false st %r3, [c] ba done false: add %r1, %r2, %r3 done: halt a: 15 b: 5 c: 0 .end 17
18
ARC code example (4) Example 4 main () { int x = 0; while (x <5) {
x = x +1; } .begin .org 2048 main: ld [x], %r1 !while (x<5) top: subcc %r1, 5, %r0 bpos done !x = x+1 add %r1, 1, %r1 st %r1, [x] ba top done: halt x: 0 .end 18
19
ARC code example (4 modified)
main () { int x = 0; while (x <=5) { x = x +1; } .begin .org 2048 main: ld [x], %r1 top: subcc %r1, 5, %r2 subcc %r2, 1, %r0 bpos done add %r1, 1, %r1 st %r1, [x] ba top done: halt x: 0 .end 19
20
What is the logic to figure out the following
Helpful things to know What is the logic to figure out the following If (a>=b) or (a>=1) or any constant If (a>b) or (a> 1) If (a < b) or (1 < b) If (a <= b) or (1 <= b) If (a==1) or (a==b) Complex if statements If ( (a >10) && (b < 10) )
21
ARC code example (5) Example 5 int a=2, b=2, i=1; while (i < 5) {
} Give it a try 21
22
ARC code example (5 cont.)
.begin .org 2048 main: ld [i], %r1 top: subcc %r1, 5, %r0 bpos done ld [a], %r2 ld [b], %r3 add %r2, %r3, %r2 st %r2, [a] add %r1, 1, %r1 st %r1, [i] ba top done: halt a: 2 b: 2 i: 1 .end 22
23
Q A & 23
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.