MIPS: Membaca string dari argumen baris perintah

Saya baru mengenal Majelis. Saya mengalami kesulitan membaca string dari argumen baris perintah.

Saya ingin membaca string thisismymessage dari argumen ke-2 ke dalam buffer.

Saya berpikir untuk menggunakan SYSCALL, tetapi tidak yakin bagaimana caranya.

$ spim -f program.s file thisismymessage

person Joel    schedule 03.06.2013    source sumber
comment
Sudahkah Anda mencoba menggunakan $a0 sebagai argc dan $a1 sebagai argv?   -  person Michael    schedule 03.06.2013
comment
Jika Anda masih membutuhkan jawabannya, saya rangkum secara singkat di bawah ini.   -  person wazy    schedule 08.06.2013


Jawaban (1)


Berikut ini beberapa baris kode untuk mengilustrasikan apa yang Anda tanyakan:

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

Jumlah argumen dalam $a0 dan Anda dapat memeriksa jumlah argumen terhadap nilai integer yang dimuat (li) ke dalam register sementara untuk tujuan validasi.

Nilai argumen baris perintah, argv, disimpan di $a1 dan dapat diakses dengan memuat kata. Sebuah kata berukuran 4 byte dan dengan demikian kita dapat mengakses argv[0] dengan 0($a1), argv[1] dengan 4($a1) dan seterusnya.

Dalam hal ini kita menginginkan argv[2] yang mana kita dapat memuat kata (lw) dari 8($a1) ke dalam register apa pun yang kita pilih. Dalam hal ini saya memuatnya ke $a0 karena saya langsung mencetaknya setelahnya.

Singkatnya:

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