[英]Copying content of array to another array and printing in MIPS assembly
我是匯編語言的新手。 我在很多幫助下設法編寫了一段代碼,該代碼接受一個數組並打印它。 我現在只想簡單地將第一個數組的內容復制到第二個數組中,然后打印第二個數組。 (稍后我將操作它,以便第二個數組向后打印第一個數組)
我只想學習如何將一個數組復制到第二個數組中並打印它。 下面是我只打印第一個數組的代碼
# PrintList.asm
.data
Sz: .word 10
Array: .word 1, 1, 2, 3, 5, 8, 13, 21, 34, 55
NL: .asciiz " "
.text
main:
lw $s7, Sz
move $s1, $zero
move $s2, $zero
print_loop:
bge $s1, $s7, print_loop_end
lw $a0, Array($s2)
li $v0, 1
syscall
la $a0, NL
li $v0, 4
syscall
addi $s1, $s1, 1
addi $s2, $s2, 4
j print_loop
print_loop_end:
任何指導或提示都會有所幫助,謝謝
首先對您的程序進行一些評論:
move $2, $zero
.....
lw $a0, Array($s2)
在實際環境中使用 MIPS 時(例如:許多 WLAN 路由器使用 MIPS 處理器),第二行將不起作用。 原因是“Array”的地址通常在 0x10000 以上的范圍內,並且代碼中的行將無法訪問 0x7FFF 以上的地址。
最好使用以下兩行:
la $2, Array
...
lw $a0, 0($s2)
您還應該知道“系統調用”會調用操作系統。 這意味着“$v0”寄存器中數字的含義取決於所使用的操作系統(或模擬器)。 在 Unix 中,以下幾行:
li $v0, 1
syscall
將調用將立即停止程序的“exit()”系統調用。 在使用“syscall”指令時,您應該提到您使用例如 SPIM 模擬器(其中 $v0=1 表示:打印整數)。
現在關於實際問題:
要復制數組,您只需在“lw”指令后添加“sw”指令:
lw $a0, Array($s2)
sw $a0, SecondArray($s2)
一些真正的 MIPS 處理器不允許在以下指令中使用使用“lw”加載的寄存器。 因此,您應該以某種方式重新排列說明以避免這種情況:
lw $a0, Array($s2)
li $v0, 1
sw $a0, SecondArray($s2)
地址 > 0x10000 的問題仍然存在。 如果您的程序可以使用這樣的地址運行,您將需要第二個數組指針:
la $s2, Array
la $s3, SecondArray
...
lw $a0, 0($s2)
li $v0, 1
sw $a0, 0($s3)
...
addi $s2, $s2, 4
addi $s3, $s3, 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.