18
MIPS Assembly Language Programming CDA 3101 Discussion Session 04 CDA 3101 Discussion Session 04 1

MIPS Assembly Language Programming

  • Upload
    liseli

  • View
    66

  • Download
    0

Embed Size (px)

DESCRIPTION

MIPS Assembly Language Programming. CDA 3101 Discussion Session 04. 1. Outline. MIPS simulator – PCSpim Installation Try it with small programs !. 2. PCSpim. Installation From the textbook CD From the internet. http://www.cs.wisc.edu/~larus/spim.html. 3. Writing A Basic Program. - PowerPoint PPT Presentation

Citation preview

Page 1: MIPS  Assembly Language  Programming

MIPS Assembly Language

Programming

CDA 3101 Discussion Session 04CDA 3101 Discussion Session 04

1

Page 2: MIPS  Assembly Language  Programming

Outline

2

MIPS simulator – PCSpim

InstallationTry it with small programs !

Page 3: MIPS  Assembly Language  Programming

PCSpim

3

Installation• From the textbook CD• From the internet

http://www.cs.wisc.edu/~larus/spim.html

Page 4: MIPS  Assembly Language  Programming

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

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

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

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

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

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

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

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

12

PC SpimPC Spim

Page 13: MIPS  Assembly Language  Programming

13

PC SpimPC Spim

• Note the top window – it contains the state of all registers.

Page 14: MIPS  Assembly Language  Programming

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

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

16

PC SpimPC Spim

• Click this menu item to change settings for the emulator.

Page 17: MIPS  Assembly Language  Programming

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

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.