1

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

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

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

$ spim -f program.s file thisismymessage 
+1

Вы пробовали использовать '$ a0' как' argc' и '$ a1' как' argv'? – Michael

+0

Если вам все еще нужен ответ, я кратко изложил его ниже. – wazy

ответ

4

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

# $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 
Смежные вопросы