MIPS: การอ่านสตริงจากอาร์กิวเมนต์บรรทัดคำสั่ง

ฉันใหม่กับสภา ฉันมีปัญหาในการอ่านสตริงจากอาร์กิวเมนต์บรรทัดคำสั่ง

ฉันต้องการอ่านสตริง thisismymessage จากอาร์กิวเมนต์ที่ 2 ลงในบัฟเฟอร์

ฉันคิดว่าจะใช้ SYSCALL แต่ไม่แน่ใจว่าจะใช้อย่างไร

$ spim -f program.s file thisismymessage

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