2014-01-12 51 views
3

我試圖使用跳轉表中的標籤陣列跳到以實現MIPS開關的情況下實現開關的情況下:在MIPS

.data 
JumpTable: 
    .word L0, L1, L2, L3 

    .text 
    .globl main 
main: 
    la $t4, JumpTable  # address of JumpTable 
    sll $t1, $s5, 2  # s5 is value of the variable witch we want to switch on it. 
    add $t1, $t1, $t4 
    lw $t0, 0($t1) 
    jr $t0 

    L0: 
     ... 
    L1: 
     ... 
    L2: 
     ... 
    L3: 
     ... 

我的問題是,有沒有辦法爲不這樣做連續的變量?(如1,4,19,40)

+0

在這種情況下,唯一的方法是比較跳轉 –

+0

你是否暗示跳轉表沒有辦法做到這一點? – Branky

+0

是的,嘗試從C編譯並查看反彙編,並非所有情況都可以與跳轉表一起使用。當然,你可以使用地址填充未使用的案例以跳出案例,但它會佔用內存,並不是所有案例都可以使用。例如,如何爲具有0,1,0000000,500000000個案例的交換機制作跳轉表? –

回答

2

您可以雙打添加到您的表

.word L0, L0, L0, L0, L1, L2, L2, L2, L2, L2, L2, L3, ... 

OR

使用條件分支。這取決於您的預期應用。

+0

它只適用於小跳轉表,對於距離較遠的情況,它會佔用很多內存,可能根本無法執行 –

+0

確實如此。在這種情況下,應該使用條件分支。 – Patrik