MIPS Assembly Language Programming
description
Transcript of MIPS Assembly Language Programming
![Page 1: MIPS Assembly Language Programming](https://reader035.fdocuments.us/reader035/viewer/2022081503/56815a9a550346895dc815e6/html5/thumbnails/1.jpg)
MIPS Assembly Language
Programming
CDA 3101 Discussion Session 04CDA 3101 Discussion Session 04
1
![Page 2: MIPS Assembly Language Programming](https://reader035.fdocuments.us/reader035/viewer/2022081503/56815a9a550346895dc815e6/html5/thumbnails/2.jpg)
Outline
2
MIPS simulator – PCSpim
InstallationTry it with small programs !
![Page 3: MIPS Assembly Language Programming](https://reader035.fdocuments.us/reader035/viewer/2022081503/56815a9a550346895dc815e6/html5/thumbnails/3.jpg)
PCSpim
3
Installation• From the textbook CD• From the internet
http://www.cs.wisc.edu/~larus/spim.html
![Page 4: MIPS Assembly Language Programming](https://reader035.fdocuments.us/reader035/viewer/2022081503/56815a9a550346895dc815e6/html5/thumbnails/4.jpg)
Writing A Basic Program
4
Let’s start by writing a program that sums all the numbers between 1 and 5.
void main() { printf("Test Program #1\n");
int sum = 0; int i = 5; do { sum = sum + i; i = i - 1; } while( i > 0 );
printf("Sum from 1 to 5 = %d",sum); printf("\nEnd of Program\n"); }
![Page 5: MIPS Assembly Language Programming](https://reader035.fdocuments.us/reader035/viewer/2022081503/56815a9a550346895dc815e6/html5/thumbnails/5.jpg)
Writing A Basic Program
5
Summing numbers between 1 and 5.Something… like this:
void main() { printf("Test Program #1\n");
int sum = 0; int i = 5; do { sum = sum + i; i = i - 1; } while( i > 0 );
printf("Sum from 1 to 5 = %d",sum); printf("\nEnd of Program\n"); }
![Page 6: MIPS Assembly Language Programming](https://reader035.fdocuments.us/reader035/viewer/2022081503/56815a9a550346895dc815e6/html5/thumbnails/6.jpg)
Writing A Basic Program
6
How can we translate this into MIPS?
void main() { printf("Test Program #1\n");
int sum = 0; int i = 5; do { sum = sum + i; i = i - 1; } while( i > 0 );
printf("Sum from 1 to 5 = %d",sum); printf("\nEnd of Program\n"); }
![Page 7: MIPS Assembly Language Programming](https://reader035.fdocuments.us/reader035/viewer/2022081503/56815a9a550346895dc815e6/html5/thumbnails/7.jpg)
Writing A Basic Program
7
How can we translate this into MIPS?
void main() { printf("Test Program #1\n");
int sum = 0; int i = 5; do { sum = sum + i; i = i - 1; } while( i > 0 );
printf("Sum from 1 to 5 = %d",sum);
printf("\nEnd of Program\n"); }
# Our first test program for MIPS Simulator (pcSpim)
.data.disp1: .asciiz “Test Program #1\n”.disp2: .asciiz “Sum from 1 to 5 = “.disp3: .asciiz “\nEnd of program\n
.text #Tells us this is the code section.
.globl main #Tells compiler that this is a #public location (function)
main: … #The start of the function
![Page 8: MIPS Assembly Language Programming](https://reader035.fdocuments.us/reader035/viewer/2022081503/56815a9a550346895dc815e6/html5/thumbnails/8.jpg)
Writing A Basic Program
8
How can we translate this into MIPS?
void main() { printf("Test Program #1\n");
int sum = 0; int i = 5; do { sum = sum + i; i = i - 1; } while( i > 0 );
printf("Sum from 1 to 5 = %d",sum); printf("\nEnd of Program\n"); }
…
main: li $t0, 0#int sum = 0;li $v0, 5 #int i = 5;
So we will be using $t0 as sum, and $v0 as i
![Page 9: MIPS Assembly Language Programming](https://reader035.fdocuments.us/reader035/viewer/2022081503/56815a9a550346895dc815e6/html5/thumbnails/9.jpg)
Writing A Basic Program
9
How can we translate this into MIPS?
void main() { printf("Test Program #1\n");
int sum = 0; int i = 5; do { sum = sum + i; i = i - 1; } while( i > 0 );
printf("Sum from 1 to 5 = %d",sum); printf("\nEnd of Program\n"); }
…
main: li $t0, 0 #int sum = 0;li $v0, 5 #int i = 5;
#doloop: …
bgtz $v0, loop #while(i > 0);
To make a do … while loop, we will need a label to jump to. It’s really the old goto function.
![Page 10: MIPS Assembly Language Programming](https://reader035.fdocuments.us/reader035/viewer/2022081503/56815a9a550346895dc815e6/html5/thumbnails/10.jpg)
Writing A Basic Program
10
How can we translate this into MIPS?
void main() { printf("Test Program #1\n");
int sum = 0; int i = 5; do { sum = sum + i; i = i - 1; } while( i > 0 );
printf("Sum from 1 to 5 = %d",sum); printf("\nEnd of Program\n"); }
…
main: li $t0, 0 #int sum = 0;li $v0, 5 #int i = 5;
#doloop: add $t0, $t0, $v0 #sum = sum + i;
addi $v0, $v0, -1 #i = i – 1;bgtz $v0, loop #while(i > 0);
Now we can perform the real work.
![Page 11: MIPS Assembly Language Programming](https://reader035.fdocuments.us/reader035/viewer/2022081503/56815a9a550346895dc815e6/html5/thumbnails/11.jpg)
11
How can we translate this into MIPS?
void main() { printf("Test Program #1\n");
int sum = 0; int i = 5; do { sum = sum + i; i = i - 1; } while( i > 0 );
printf("Sum from 1 to 5 = %d",sum); printf("\nEnd of Program\n"); }
main:li $v0,4la $a0,disp1syscallli $t0, 0 #int sum = 0;li $v0, 5 #int i = 5;
loop: add $t0, $t0, $v0 #sum = sum + i;addi $v0, $v0, -1 #i = i – 1;bgtz $v0, loop #while(i > 0);
li $v0,4la $a0,disp2syscall
li $v0,1move $a0,$t0syscall
li $v0,4la $a0,disp3syscall
li $v0,10syscall
![Page 12: MIPS Assembly Language Programming](https://reader035.fdocuments.us/reader035/viewer/2022081503/56815a9a550346895dc815e6/html5/thumbnails/12.jpg)
12
PC SpimPC Spim
![Page 13: MIPS Assembly Language Programming](https://reader035.fdocuments.us/reader035/viewer/2022081503/56815a9a550346895dc815e6/html5/thumbnails/13.jpg)
13
PC SpimPC Spim
• Note the top window – it contains the state of all registers.
![Page 14: MIPS Assembly Language Programming](https://reader035.fdocuments.us/reader035/viewer/2022081503/56815a9a550346895dc815e6/html5/thumbnails/14.jpg)
14
PC SpimPC Spim
• The button on the top right runs the program to its end, after you click “OK” on the dialog box. Note that you won’t see the register changes until the program ends.
![Page 15: MIPS Assembly Language Programming](https://reader035.fdocuments.us/reader035/viewer/2022081503/56815a9a550346895dc815e6/html5/thumbnails/15.jpg)
15
PC SpimPC Spim
• Click this menu item to reinitialize PC Spim – it’s like rebooting your computer. It’s often necessary to click Reload to run your program again.
![Page 16: MIPS Assembly Language Programming](https://reader035.fdocuments.us/reader035/viewer/2022081503/56815a9a550346895dc815e6/html5/thumbnails/16.jpg)
16
PC SpimPC Spim
• Click this menu item to change settings for the emulator.
![Page 17: MIPS Assembly Language Programming](https://reader035.fdocuments.us/reader035/viewer/2022081503/56815a9a550346895dc815e6/html5/thumbnails/17.jpg)
17
PC SpimPC Spim
• Click this menu item to change settings for the emulator.• Sometimes it’s helpful to uncheck “General registers in
hexadecimal” so that you can read values as regular numbers.
![Page 18: MIPS Assembly Language Programming](https://reader035.fdocuments.us/reader035/viewer/2022081503/56815a9a550346895dc815e6/html5/thumbnails/18.jpg)
18
PC SpimPC Spim
• Click the button that looks like a hand to set breakpoints. The program will stop running at positions you indicate, and wait for your authorization to continue upon reaching said point. You will also see the register values updated.