2012-05-26 80 views
1

我想學習一個測試,我必須知道一些關於MIPS和彙編代碼的內容。你能幫我嗎?我會盡力寫出我認爲是給定問題的正確答案,但我不知道我是否正確MIPS,程序集 - 幾個問題

1)MIPS中的操作數32位操作數是否可以包含任何32位值? 我認爲「不 - 從不」,因爲前16位是爲操作碼和源+最終寄存器保留的。是正確的還是有一些指令可以包含任何32位值?

2)我們有指令倍(IF = 400PS,ID = 500PS,EX = 450ps,MEM = 500PS,WB = 150ps的) 請告訴我時鐘節拍爲 a)無流水線處理機? b)帶流水線的處理器?

我認爲a)是2000ps(所有時間的總和)和b)500ps(表中最大的時間),但是再一次,林不知道。

3)我有以下彙編代碼:

0x0000  addi t0, $0, 5 
0x0004 loop: beq t0, $0, done 
0x0008  nop 
0x000C  lw t1, 0x4($0) 
0x0010  lw t2, 0x24($0) 
0x0014  addi t0, t0, -1 
0x0018  j loop 
0x001C  nop 
0x0020 done 

我不是100%肯定它做什麼(因爲我不充分已瞭解了是爲0x4($ 0的結果)在負荷運轉) 。我知道有一個for循環(對於t = 5,t> 0 t--)。 現在的問題是 - 什麼是這個緩存的命中率和丟失率,以及你如何計算它

如果你至少能回答前兩個問題,那就太好了。非常感謝...

+2

時鐘機制?機智是什麼意思? – betabandido

+1

時鐘*費率*可能? –

回答

2
  1. 如果您在談論MIPS 32位,那麼當然,類型I指令不可能包含32位立即數。這種指令的佈局是(opcode,rs,rt,IMM),它們的大小(6,5,5,16)位。所以立即值只有16位大小。當然如果體系結構是64位的,那麼你可以有更長的立即值。

  2. 我假設你指的是指令執行的延遲。正如你所指出的,如果沒有管道,你需要爲所有階段增加時間。如果處理器使用流水線,則必須將時鐘設置爲匹配最慢的階段。在你的情況下,這是500ps,無論是解碼和內存階段。

  3. lw t1, 0x4($0)從存儲器地址0x4加載一個字($ 0代表總是包含零的寄存器0)並將該值存儲到t1中。所以如果你仔細看代碼,你會發現它總是從位置0x4和0x24加載數據。假設緩存在開始時是空的,那麼在第一次迭代中你將會有兩次失誤,而在以後的失敗中沒有其他錯誤。因此缺失率將是(1 * 2)/(5 * 2)= 2/10 = 1/5。但是,您必須考慮高速緩存是否以塊的形式傳輸數據。在這種情況下,第一個加載可能會傳輸一個包含例如64個字節的大塊。這將使第二次加載操作不會錯過,所以未命中率將降低到1/10。但我認爲這種簡單的處理器並不是這種情況。

僅供參考,here你有很多關於MIPS架構和ISA信息。您可能還對以下計算機體系結構的經典書籍感興趣:Computer Architecture: A Quantitative Approach

+0

非常感謝非常清楚的解釋 - 我現在明白了...... :-) – Smajl

+0

@betabandido:MIPS 64位仍然使用相同的固定32位長度指令,因此不可能加載大於16位的立即數 –

+0

@LưuVĩnhPhúc事實上,如果是這樣的話,這是不可能的。不過,您可以分兩步加載它,或者使用您提到的常量池。我會盡力更新我的答案。 – betabandido

0

@betabandido:MIPS 64位仍然使用相同的32位長度指令,因此您仍然無法加載任何大於16位的立即數。唯一的解決方案是從常量池加載。像ARM程序集只能在4位移位時立即加載8位,因此它幾乎依賴於常量池

例如,指向池的指針存儲在$ 5中,索引是4,可以使用以下指令加載該值

lw t1, 0x4($5)