2013-06-24 17 views
0

我想將64位地址加載到MIPS64通用寄存器(GPR)中。我可以做到是否有任何簡單的方法或宏將64位地址加載到mips64中GPR

lui $at, LabelAddr[63:48] 
ori $at, $at, LabelAddr[47:32] 
sll $at, 16 
ori $at, $at, LabelAddr[31:16] 
sll $at, 16 
ori $at, $at, LabelAddr[15:0] 

但是,有沒有其他方法可以做到這一點?

我從this

一些資料,但我想知道什麼是「常量池」,以及如何創造它以及如何訪問呢?

回答

2

「簡單」的方法是讓彙編程序使用dla僞指令來處理它。這將擴大到像你的代碼:

lui $dst, LabelAddr[63:48] 
lui $at, LabelAddr[31:16] 
daddiu $dst, $dst, LabelAddr[47:32] 
daddiu $at, $at, LabelAddr[15:0] 
dsll32 $dst, $dst, 0 
daddu $dst, $dst, $at 

常量池是您存儲您的常量可以有效地解決內存區域。一些彙編器和體系結構對此有特殊的支持,而另一些則需要手動完成。正如您鏈接問題的答案中所述,您可以設置一個指向常量池的指針(使用上述方法),併爲後續操作使用更高效的訪問權限。

# load pool base address 
    dla $s0, pool 
foo: 
# just some placeholder 
    addu $t0, $t0, $t1 
bar: 
# load from pool 
    ld $a0, pool_foo($s0) 
    ld $a1, pool_bar($s0) 

.section pool 
# macro helper to define a pool entry 
.macro ENTRY label 
pool_entry_\label\(): .quad \label 
.equ pool_\label\(), pool_entry_\label - pool 
.endm 
ENTRY foo 
ENTRY bar 
相關問題