[go: up one dir, main page]

0% found this document useful (0 votes)
198 views6 pages

Tutorial MIPS Using MARS

This tutorial provides examples of MIPS assembly language code for printing characters, numbers, and strings; taking user input; performing arithmetic operations like addition and multiplication; conditional branching; and using loops. The code segments are meant to demonstrate basic MIPS programming concepts and instructions to beginners using the MARS simulator. Students are instructed to step through each code example to observe register values and memory addresses.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
198 views6 pages

Tutorial MIPS Using MARS

This tutorial provides examples of MIPS assembly language code for printing characters, numbers, and strings; taking user input; performing arithmetic operations like addition and multiplication; conditional branching; and using loops. The code segments are meant to demonstrate basic MIPS programming concepts and instructions to beginners using the MARS simulator. Students are instructed to step through each code example to observe register values and memory addresses.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

Tutorial on MIPS Programming using MARS

It is expected that students should go through the code segments provided in this tutorial before
proceeding with the asignments. This tutorial is meant for beginners of MIPS programming and
assumes use of the MARS simulator for execution and debugging.

Execute the codes given below ( in steps) and observe the values of registers and memory addresses
as shown in the simulator during each step. It would help you understand how the code works.

1. Printing a character :

.data
character : .byte 'a'

.text

li $v0, 11 #11=system code for printing a character, $v0=register that gets the system
code for printing as value

la $a0, character #'a'=our example character, $a0=register that accepts the character for
printing
syscall #Call to the System to execute the instructions and print the character at the
a0

2. Printing a number :

.data
age : .word 21

.text

li $v0, 1 #1= system code for printing a word ( 32 bit integer), $v0=register that gets
the system code for printing as value

la $a0, age # age is the variable that contains the word to be printed, $a0=register that
accepts the word for printing
syscall #Call to the System to execute the instructions and print the word at a0

3. Printing a floating point number :

.data
PI : .float 3.14 # PI is the variable that contains the floating point nmumber 3.14 to be
printed ( loaded in the data memory)
.text

li $v0, 2 # 2= system code for printing a floating point number (32-bit IEEE 754
format), $v0=register that gets the system code for printing as value

lcw1 $f12, PI # $f12 register is not available with MIPS but with the co-processor 1; lwfc1
means load the $f12 register of coprocessor 1
syscall #Call to the System to execute our instructions

4. Printing a double- precision floating point number :

.data
test : .double 7.202 # test is the variable that contains the double precision floating point
number 7.202 (64-bit IEEE 754 format), $v0=register that gets the
system code for printing as value to be printed ( loaded in the data
memory)
.text

ldc1 $f2, test # the 64-bit value in test variable is stored in $f2 (32-bit LSB) and $f3 ( 32-
bit USB)

li $v0, 3 #3= system code for printing a double precisionfloating point number
( IEEE 754 format),$v0=register that gets the system code for printing as
value

move $f12,$f2 # move is a pseudo-instruction that transfers contents of $f2 to $f12

syscall #Call to the System to execute our instructions

5. Adding two numbers :

.data
num1 : .word 2 # first number to be added stored in data memory
num2: .word 3 # second number to be added stored in data memory

.text

lw $t0, num1 # num 1 is stored in temporary register $t0


lw $t1, num2 # num 2 is stored in temporary register $t1

add $t2 , $t0, $t1 # t2 <- t0 + t1

li $v0, 1 #1= system code for printing a word,


$v0=register that gets the system code for printing as value

move $a0, $t2 # move is a pseudo-instruction that transfers contents of $t2 to $a0
#a0 is the register that needs to hold the value that needs to be printed

syscall #Call to the System to execute our instructions


6. Multiply two numbers :

.data

.text

addi $t0,$zero,10 # t0 <- 0+10


addi $t1, $zero,4 # t1 <- 0+4

mult $t0,$t1 # The result is in hi and low registers

li $v0, 1 #1= system code for printing a word,


$v0=register that gets the system code for printing as value

add $a0, $zer0, $s0 # a0 <- 0+t0


#a0 is the register that needs to hold the value that needs to be printed

syscall #Call to the System to execute our instructions

7. To get the user input :


.data
prompt : .aciiz “Enter your age”
message : .asciiz “ \n Your age is”
.text
li $v0, 4 #4= system code for printing a string,
$v0=register that gets the system code for printing as value

la $a0,prompt # load address of prompt in $a0


syscall # prints the string “ Enter your age”

# Get the users age


li $v0,5 #5= system code for user input
syscall #Call to the System to execute the instruction

# Store the result in $t0


move $t0, $v0 # move is a pseudo-instruction that transfers contents of $t0 to $v0
t0 now contains the user input
# Display the user input
li $v0, 4 #4= system code for printing a string,
$v0=register that gets the system code for printing as value
la $a0, message # load address of prompt in $a0
syscall # prints the string “ Your age is”

# Show the age


li $v0, 1 #1= system code for printing a word,
$v0=register that gets the system code for printing as value
move $a0, $t0 # move is a pseudo-instruction that transfers contents of $t0 to $a0
#a0 is the register that needs to hold the value that needs to be printed

syscall #Call to the System to execute our instructions


8. Passing Arguments to Functions :

.data #data section

.text #code section

main:

addi $a1, #zero, 50 # a1 <- 50


addi $a2, #zero, 100 # a2 <- 100

jal addnumbers # Call the subroutine addnumbers and pass on values of a1 and a2 as
arguments of addnumbers; Save the return address in $ra

li $v0, 1 #1= system code for printing a word,


$v0=register that gets the system code for printing as value
move $a0, $v1 # move is a pseudo-instruction that transfers contents of $v1 to $a0
#a0 is the register that needs to hold the value that needs to be printed

syscall #Call to the System to execute our instructions

li $v0, 10 # system call for terminating the execution


syscall

addnumbers :

add $v1, $a1, $a2 # v1 <- a1 + a2

jr $ra # return to the address pointed to by the address held in return address register
9. Branch Instructions ( If Statements) :

.data #data section


message : .asciiz “ The numbers are different”

.text #code section

main:

addi $t0, #zero, 5 # t0 <- 5


addi $t1, #zero, 20 # t1 <- 20

# Conditional jump to label numbersdifferent if numbers $t0 and $t1 are different

bne $t0, $t1, numbersdifferent


li $v0, 10 #10= system code for exit
$v0=register that gets the system code for printing as value
syscall
numbersdifferent :

# Display the user input

li $v0, 4 #4= system code for printing a string,


$v0=register that gets the system code for printing as value
la $a0, message # load address of prompt in $a0
syscall # prints the string

li $v0, 10 #10= system code for exit


$v0=register that gets the system code for printing as value
syscall

--------------------------------------------------------------------------------------------------------
There are alternate ways to compute the same problem :

1. use of slt instruction - it compares two registers and returns the value as 1 if true and 0 for
false

2. Use of Pseudo branch instructions such as bgt/blt

---------------------------------------------------------------------------------------------------------
10. Using While Loops :

.data #data section


message : .asciiz “ After the while loop is done”
message 2 : .asciiz “\n”

.text #code section

main:

addi $t0, #zero, 50 # to hold the index of the array

while :

bgt $t0,10, exit # if(i>10

jal printnumbers

addi $t0,$t0,1

j while

exit :
li $v0, 4
la $a0, message
syscall

# End of program

li $v0, 10
syscall

printnumbers :

# Print the number

li $v0, 1
move $a0, $t0
syscall

# Move to the next line

li $v0, 4
la $a0, message2
syscall

# Return to main

jr $ra

You might also like