MIPS: Citirea unui șir de caractere din argumentul liniei de comandă (Programare, Asamblare, Argumente În Linia De Comandă, Mips, Arhitectura Calculatorului, Spim)

Joel a intrebat.

Sunt nou în Assembly.I’m new to Assembly.I a avea unele probleme de citire a unui șir de caractere din linia de comandă argumente.

Aș dori să citesc șirul thisismymessage de la al doilea argument într-un buffer.

M-am gândit să folosesc SYSCALL, , dar nu sunt sigur cum.

$ spim -f program.s file thisismymessage

Comentarii

  • Ați încercat să utilizați $a0 ca argc și $a1 ca argv? –  > Por Michael.
  • Dacă mai aveți nevoie de un răspuns, l-am rezumat pe scurt mai jos. –  > Por wazy.
1 răspunsuri
wazy

Iată câteva linii de cod pentru a ilistra ceea ce întrebi:

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

Cantitatea de argumente se află în $a0 și ai putea verifica cantitatea de argumente în raport cu o valoare întreagă încărcată (li) într-un registru temporar în scopul validării.

Valorile argumentelor din linia de comandă, argv, sunt stocate în $a1 și pot fi accesate prin încărcarea cuvântului. Un cuvânt este format din 4 octeți și astfel putem accesa argv[0] cu 0($a1), argv[1] cu 4($a1) și așa mai departe.

În acest caz dorim argv[2] pe care putem încărca cuvântul (lw) din 8($a1) în orice registru alegem. În acest caz l-am încărcat în $a0 pentru că îl voi imprima direct după aceea.

Pentru a recapitula:

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