find substring and indices in mips

Posted by ccc on Stack Overflow See other posts from Stack Overflow or by ccc
Published on 2012-12-07T22:50:06Z Indexed on 2012/12/07 23:04 UTC
Read the original article Hit count: 5208

Filed under:
|
|

im trying find out substring and first occurrence indices. but something wrong. im comparing each element of pattern array and each element of string array until pointer reach to '\0'. and if any characater found it keep in temp array. and increasing pointers +1. whats the problem. algorithm is totaly wrong ?

#Note: $v0 is a symbolic name used by the assember for $2.
#      $a0 is a symbolic name used by the assember for $4.

          .data

prompt_str:     .asciiz  "Please type a text string: "
prompt_ptr: .asciiz  "Please type a pattern string: "
print_yes:  .asciiz  "Yes, there is a match."
print_no:   .asciiz  "No, there is no match."
text_str:   .asciiz  "Text string : "
pattern_str:    .asciiz  "Pattern string : "
print_out:      .asciiz  "Output to be produced :"
print_dash:     .asciiz  "----------------------"
print_index:    .asciiz  "Starting index :"
print_msg :     .asciiz  "Length of longest partial match = "
nl:             .asciiz  "\n"    
str :       .space  81
ptr :       .space  81
tmp :       .space  81
          .text



main:   la  $a0, prompt_str   
        li  $v0, 4          #print_string command.
        syscall

        la  $a0,str   #read string
    li  $a1,81
    li  $v0,8
    syscall

    la  $t0,str     #move string to $t0

    la  $a0,prompt_ptr
    li  $v0,4       #print pattern command
    syscall

    la  $a0,ptr     #read pattern
    li  $a1,81
    li  $v0,8
    syscall

    la  $t1,ptr     #move pattern to $t1              
    la  $t5,tmp     #move temp to $t5

    lb  $t2,0($t0)  #pointer first element array of string
    lb  $t3,0($t1)  #pointer first element array of pattern
    lb  $t6,0($t5)  #pointer first element array of temp

loop :  beq $t3,$0,end_loop
    beq $t2,$t3,match
    addiu   $t0,$t0,1
    j   loop

match : move    $t6,$t2
    addiu   $t5,$t5,1
    addiu   $t0,$t0,1
    addiu   $t1,$t1,1
    j   print_match

print_match :   la  $a0,text_str    #print string
        li  $v0,4
        syscall
        move    $a0,$t0
        li  $v0,4
        syscall

        la  $a0,nl      #print newline character
        li  $v0,4
        syscall

        la  $a0,pattern_str #print pattern string
        li  $v0,4
        syscall
        move    $a0,$t1
        li  $v0,4
        syscall

        la  $a0,nl      #print newline character
        li  $v0,4
        syscall         

        la  $a0,print_out   #print output line and newline character
        li  $v0,4
        syscall
        la  $a0,nl
        li  $v0,4
        syscall

        la  $a0,print_dash
        li  $v0,4
        syscall
        la  $a0,print_yes
        li  $v0,4
        syscall
        la  $a0,print_index     #print starting index
        li  $v0,4
        syscall
        li  $v0,10
        syscall

end_loop :  li  $v0,10
        syscall

© Stack Overflow or respective owner

Related posts about mips

Related posts about mips32