ฉันใหม่กับสภา ฉันมีปัญหาในการอ่านสตริงจากอาร์กิวเมนต์บรรทัดคำสั่ง
ฉันต้องการอ่านสตริง thisismymessage
จากอาร์กิวเมนต์ที่ 2 ลงในบัฟเฟอร์
ฉันคิดว่าจะใช้ SYSCALL
แต่ไม่แน่ใจว่าจะใช้อย่างไร
$ spim -f program.s file thisismymessage
ฉันใหม่กับสภา ฉันมีปัญหาในการอ่านสตริงจากอาร์กิวเมนต์บรรทัดคำสั่ง
ฉันต้องการอ่านสตริง thisismymessage
จากอาร์กิวเมนต์ที่ 2 ลงในบัฟเฟอร์
ฉันคิดว่าจะใช้ SYSCALL
แต่ไม่แน่ใจว่าจะใช้อย่างไร
$ spim -f program.s file thisismymessage
ต่อไปนี้เป็นโค้ดสองสามบรรทัดเพื่ออธิบายสิ่งที่คุณถาม:
# $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
แล้วหรือยัง? - person Michael   schedule 03.06.2013