Вот несколько строк кода 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
Вы пробовали использовать '$ a0' как' argc' и '$ a1' как' argv'? – Michael
Если вам все еще нужен ответ, я кратко изложил его ниже. – wazy