2011-09-19 56 views
1

我在網上找不到這個例子,我甚至不知道從哪裏開始搜索。我對於ASM相當陌生,並且正在大學攻讀MIPS課程。我會說這是家庭作業的一部分,但這不是提示。只需要在更大的程序中實施,以使其工作方式符合我的需要。在MIPS彙編中初始化n個寄存器的最高測試循環

無論如何,我想要做的是創建一個頂級測試循環,根據單獨的寄存器的值設置「n」個寄存器。

例如,如果我將$ t0設置爲3,我希望循環執行3次並提示輸入$ t1,$ t2和$ t3。我知道如何完成輸入提示,我只需要幫助設計一個可以實現這一點的循環。任何提示從哪裏開始或我需要使用什麼操作?

這基本上就是我迄今爲止...

li $t2, 1 
next1: 
beq $t2, $s1, next2 
    # loop code 
addi $t2, $t2, 1  
j next1 

next2: 

回答

2

沒有這樣做,因爲目的寄存器通常是硬編碼到指令編碼沒有簡單的方法。

你可以使用switch語句相當於:

sll $a0, 2 # $a0 = 8 * $a0 
# set one of $t0,$t1,...,t7 to the value of $a1 as selected by the value of $a0 
b $a0(SW) 
nop   # branch delay slot 
DONE: 
... 
# switch cases start here. Each case uses 2 instructions 
SW: 
b DONE  # case 0 
mov $t0, $a1 # branch delay slot 
b DONE 
mov $t1, $a1 
... 
b DONE 
mov $t7, $a1 
# end of switch cases 

你可以使用自修改代碼來代替,但不推薦。

+0

太棒了!我很欣賞這個例子。 – Chris