mips

Matrices Multiplication

Page 1 of 1

1 Replies - 4025 Views - Last Post: 14 December 2009 - 10:04 AM

#1 mahmouduk  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 1
  • Joined: 14-December 09

mips

Posted 14 December 2009 - 04:40 AM

######################################################
#
# Project 1 Matrices Multiplication
# Group Names:
# 1.mahmoud aladham 120062307
# 2.mohammed abuwarda 160063654
#
######################################################
.data
strA: .asciiz "First Matrix:\n "
strB: .asciiz "Second Matrix:\n "
strC: .asciiz "Product Matrix:\n "
newline: .asciiz "\n"
space: .asciiz " "
# This is the start of the First Matrix.
matrix1: .word 111, 112, 113
.word 103, 104, 105
.word 190, 95 , 199
matrix2: .word 90, 91, 92
.word 101, 202, 303
.word 9, 10, 11
# The next statement allocates room for the product.
# The matrix takes up 4*9=36 bytes.
#.space n allocates n empty bytes in the memory
product: .space 36
.align 2
.text
# Your well-commented program starts here.
main:
li   $t1, 32       # $t1 = 32 (row size/loop end)
li   $s0, 0        # i = 0; initialize 1st for loop
L1: li   $s1, 0        # j = 0; restart 2nd for loop
L2: li   $s2, 0        # k = 0; restart 3rd for loop
sll  $t2, $s0, 5   # $t2 = i * 32 (size of row of x)
addu $t2, $t2, $s1 # $t2 = i * size(row) + j
sll  $t2, $t2, 3   # $t2 = byte offset of [i][j]
addu $t2, $a0, $t2 # $t2 = byte address of x[i][j]
l.d  $f4, 0($t2)   # $f4 = 8 bytes of x[i][j]
L3: sll  $t0, $s2, 5   # $t0 = k * 32 (size of row of z)
addu $t0, $t0, $s1 # $t0 = k * size(row) + j
sll  $t0, $t0, 3   # $t0 = byte offset of [k][j]
addu $t0, $a2, $t0 # $t0 = byte address of z[k][j]
l.d  $f16, 0($t0)  # $f16 = 8 bytes of z[k][j]
sll  $t0, $s0, 5       # $t0 = i*32 (size of row of y)
addu  $t0, $t0, $s2    # $t0 = i*size(row) + k
sll   $t0, $t0, 3      # $t0 = byte offset of [i][k]
addu  $t0, $a1, $t0    # $t0 = byte address of y[i][k]
l.d   $f18, 0($t0)     # $f18 = 8 bytes of y[i][k]
mul.d $f16, $f18, $f16 # $f16 = y[i][k] * z[k][j]
add.d $f4, $f4, $f16   # f4=x[i][j] + y[i][k]*z[k][j]
addiu $s2, $s2, 1      # $k k + 1
bne   $s2, $t1, L3     # if (k != 32) go to L3
s.d   $f4, 0($t2)      # x[i][j] = $f4
addiu $s1, $s1, 1      # $j = j + 1
bne   $s1, $t1, L2     # if (j != 32) go to L2
addiu $s0, $s0, 1      # $i = i + 1
bne   $s0, $t1, L1     # if (i != 32) go to L1


*** MOD EDIT: Added code tags. Please :code: ***

This post has been edited by JackOfAllTrades: 14 December 2009 - 10:04 AM


Is This A Good Question/Topic? 0
  • +

Replies To: mips

#2 JackOfAllTrades  Icon User is offline

  • Saucy!
  • member icon

Reputation: 6062
  • View blog
  • Posts: 23,513
  • Joined: 23-August 08

Re: mips

Posted 14 December 2009 - 10:04 AM

Moved to Assembly
Was This Post Helpful? 0
  • +
  • -

Page 1 of 1