2016-01-31 53 views
0

我正在爲學校進行作業,部分作業正在通過各種MIPS指令進行排序,並確定它們是否對常量或變量起作用。我的問題與地址有關。我正在閱讀我的教科書,我無法弄清楚地址是否被認爲是常量或變量。我想說這是一個變數,但我不能確定。如果有人能夠證明這對我很有幫助。MIPS地址解釋

+0

這是一個相當普遍的問題,因爲措辭。你有* constant *和* variable *的定義嗎?這些將有助於指導我們一個有用的答案。在非哈佛架構中,所有的內存都是可寫的,因此在某種意義上是「可變的」。但從程序的角度來看,有「程序部分」(psects)是隻讀的,其他的是可讀/寫的。 – wallyk

+0

因此,例如,確切的問題是關於指令「la」和問題狀態「是否使用此指令加載常量或變量?」除此之外,我沒有任何定義。 – Samuel

+0

另一個我感興趣得到回答的問題是僞指令的格式類型是否來自僞指令「引擎蓋下」的格式? – Samuel

回答

1

那麼,給定上下文的用於在存儲器中的指令通常的幀,一個通常認爲指示自己是常量,儘管人們可以編寫代碼他們修改到其偶爾用於一些超優化目的的期望的效果—也用於病毒。不過,考慮到正常的情況下:

.data 
array1:  .space 12  # reserve 12 bytes for 3 integer array 

    .text 
__start: 
     la $t0, array1 # load array address 
     li $t1, 5   # $t1 = 5 ("load immediate") 
     sw $t1, ($t0)  # a[0] = 5 
     li $t1, 13  # $t1 = 13 
     addi $t0, t0, 4  # t0 = t0 + 4 
     sw $t1, ($t0)  # a[1] = 13 
     li $t1, -7  # $t1 = -7 
     sw $t1, 4($t0) # a[2] = -7 
     done 

因此,在該序列中,值5,圖13,和-7是所述指令的一部分,並且通常被認爲常數。另外,用於增加$ t0中地址指針的4也是一個常數。此外,一旦程序加載到內存中,array1的地址是恆定的,因爲它不會改變。但是,在程序加載之前,其地址是而不是已知:加載程序分配了兩個程序段(.data和.text)的地址分配。

+0

中清楚地給出了立即數。這非常有幫助。當我詢問僞指令的格式類型時,我的意思是,像lw或sw這樣的一些指令是I格式,而其他指令如add則是R格式。那麼僞指令的格式是什麼? – Samuel

+0

@Samuel:那麼像'.text'或'.space'這樣的僞指令? – wallyk

+0

下面是僞指令列表https://en.wikibooks.org/wiki/MIPS_Assembly/Pseudoinstructions – Samuel