25
Do-While Example
- In C++
- do {
- z--;
- while (a == b);
- z = b;
- In assembly language
- loop: addi $s2, $s2, -1
- beq $s0, $s1, loop
- or $s2, $s1, $zero
Do-While Example In C++ do { z--; while (a == b); z = b; In - - PowerPoint PPT Presentation
Do-While Example In C++ do { z--; while (a == b); z = b; In assembly language loop: addi $s2, $s2, -1 beq $s0, $s1, loop or $s2, $s1, $zero 25 Comparisons Set on less than ( slt ) compares its source
25
26
27
28
29
Instruction:
30
add $t1, $s2, $s2 #$t1 = 2*k add $t1, $t1, $t1 #$t1 = 4*k add $t1, $t1, $t4 #$t1 = addr of JumpT[k] lw $t0, 0($t1) #$t0 = JumpT[k] jr $t0 #jump based on $t0 L0: add $s3, $s0, $s1 #k=0 so h=i+j j Exit L1: add $s3, $s0, $s3 #k=1 so h=i+h j Exit L2: sub $s3, $s0, $s1 #k=2 so h=i-j Exit: . . .
Memory
31
32 bits
230 words read/write addr read data write data word address (binary) 0…0000 0…0100 0…1000 0…1100 1…1100
Register File src1 addr src2 addr dst addr write data 32 bits src1 data src2 data 32 registers ($zero - $ra) 32 32 32 32 32 32 5 5 5 PC ALU 32 32 32 32 32 1 2 3 7 6 5 4 byte address (big Endian) Fetch PC = PC+4 Decode Exec Add 32 32 4 Add 32 32 br offset
32
33
34
35
36
37
38
39
40
41
42
43
44
45
One of the general registers, $sp, is
add data onto the stack – push
remove data from the stack – pop
low addr high addr $sp top of stack
46
47
48
Contents of register $s0 Contents of register $t0 Contents of register $t1 $sp $sp $sp
High address Low address a. b. c.
49
50
51
Saved argument registers (if any) Local arrays and structures (if any) Saved saved registers (if any) Saved return address b. $sp $sp $sp c. $fp $fp $fp a.
High address Low address
52
53
$sp $gp 0040 0000
hex
1000 0000
hex
Text Static data Dynamic data Stack 7fff ffff
hex
1000 8000
hex
pc Reserved
54