Monday, February 24, 2020

strcat() implementation in MIPS

Launch EzMIPS, copy the following MIPS code and paste it into EzMIPS. Assemble, Run.

# --------- Implementation of strcat() in MIPS ---------- #

# call strcat() twice:
# 1. append var_source1 to var_target
# 2. append var_source2 to the result above
# 3. print the end result

# ------------------------------------------------------- #

.data

var_target:  .ascii  "My name is "
             .space  20
var_source1: .asciiz "Antonis "
var_source2: .asciiz "Kyprianou"

var_message: .asciiz "The final concatenated string is: " 

# ------------------------------------------------------- #

.text

# ------ load source and target string addresses -------- #

    la $a1, var_target
    la $a0, var_source1
    jal strcat                    # call strcat() function

# ------ load source and target string addresses -------- #

    la $a1, var_target
    la $a0, var_source2
    jal strcat                    # call strcat() function

# ------------------------ print message ---------------- #

    la $a0, var_message           # address of string to be
                                  # printed
    li $v0, 4                     # print string
    syscall

# ----------------- print concatenated string ----------- #

    la $a0, var_target            # address of string to be
                                  # printed
    li $v0, 4                     # print string
    syscall

# --------------------- exit program -------------------- #

    li $v0,10
    syscall

# ---------------------- strcat() ----------------------- #

strcat:                           # loop until end of
                                  # target found
    lb $t1, 0($a1)
    beq $t1, $zero, append        # is this a '\0' ?
    addi $a1, $a1, 1
    j strcat

append:
    lb $t1, 0($a0)                # read char from source
    sb $t1, 0($a1)                # append the char to the
                                  # target

    addi $a0, $a0, 1
    addi $a1, $a1, 1
    bne $t1, $zero, append        # is this a '\0' ?

return:
    jr $ra                        # yes, it is a '\0',
                                  # return to the caller
# ------------------------------------------------------- #

Please let me know of any suggestions or bugs regarding the code above.

Regards,

Antonis

No comments:

Post a Comment