MIPS: Reading a string from command line argument

Joel picture Joel · Jun 3, 2013 · Viewed 12.9k times · Source

I'm new to Assembly. I'm having some trouble reading a string from the command line arguments.

I would like to read the string thisismymessage from the 2nd argument into a buffer.

I thought of using SYSCALL, but not sure how.

$ spim -f program.s file thisismymessage

Answer

wazy picture wazy · Jun 8, 2013

Here is a few lines of code to illistrate what you are asking:

# $a0 = argc, $a1 = argv
# 4($a1) is first command line argv 8($a1) is second

main:
    lw $a0, 8($a1)       # get second command line argv
    li $v0, 4              # print code for the argument (string)
    syscall                # tells system to print
    li $v0, 10              # exit code
    syscall                # terminate cleanly

The amount of arguments is in $a0 and you could check the amount of arguments against an integer value loaded (li) into a temporary register for validation purposes.

The command line argument values, argv, are stored in $a1 and can be accessed by loading the word. A word is 4 bytes and thus we can access argv[0] with 0($a1), argv[1] with 4($a1) and so forth.

In this case we want argv[2] which we can load the word (lw) from 8($a1) into whatever register we choose. In this case I loaded it into $a0 because I am directly printing it afterwards.

To recap:

# $a0 is argc, $a1 is argv
lw $t0, 8($a1)             # gets argv[2] and stores it in $t0