MIPS: чтение строки из аргумента командной строки

Я новичок в сборке. У меня возникли проблемы с чтением строки из аргументов командной строки.

Я хотел бы прочитать строку thisismymessage из 2-го аргумента в буфер.

Я думал об использовании SYSCALL, но не знаю как.

$ spim -f program.s file thisismymessage

person Joel    schedule 03.06.2013    source источник
comment
Пробовали ли вы использовать $a0 вместо argc и $a1 вместо argv?   -  person Michael    schedule 03.06.2013
comment
Если вам все еще нужен ответ, я кратко изложил его ниже.   -  person wazy    schedule 08.06.2013


Ответы (1)


Вот несколько строк кода, чтобы проиллюстрировать то, что вы спрашиваете:

# $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

Количество аргументов находится в $a0, и вы можете проверить количество аргументов по целочисленному значению, загруженному (li) во временный регистр для целей проверки.

Значения аргументов командной строки, argv, хранятся в $a1, и к ним можно получить доступ, загрузив слово. Слово занимает 4 байта, поэтому мы можем получить доступ к argv[0] с помощью 0($a1), к argv[1] с помощью 4($a1) и так далее.

В этом случае нам нужен argv[2], в который мы можем загрузить слово (lw) из 8($a1) в любой выбранный нами регистр. В данном случае я загрузил его в $a0, потому что после этого я его непосредственно печатаю.

Резюме:

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