閱讀
但是這里的立即數對我來說沒有意義:具體來說,如果給出類似 的指令lui t0, 0xABCDE,立即數的低 12 位將(并且應該)在t0. (即t0 = 0xABCDE000)
這imm[31:12]使得它看起來像是在0xABCDE組裝程序中被左移了 12 位,對嗎?
uj5u.com熱心網友回復:
imm[31:12] 使它看起來像 0xABCDE 在組裝程序中被左移了 12 位,對嗎?
這 20 位被編碼到指令的 imm 欄位中,該欄位是 32 位指令的高 20 位中的一個欄位。結果是一條機器代碼指令,要求處理器將 0xABCDE000 加載到暫存器中。這種編碼是否涉及將匯編代碼中的立即數左移 12 位?是的,我同意這一點。
需要明確的是,匯編器采用的形式是語法問題,機器代碼采用的形式是編碼問題。在這里,我們可以撰寫一個不同的匯編程式,要求您指定值 0xABCDE000(如果低 12 位非零,則報錯)——這樣就沒有匯編時“移位”。
在 RISC V 中,其他指令的立即數以更復雜的方式編碼。一個大的立即數被拆分并插入到單獨的單個欄位中;這樣做是為了在每條指令中將暫存器欄位保持在同一位置,并將立即數的符號位保持在同一位置(符號擴展需要動態擴展)。
例如,看一下 S 格式,其中 12 位立即數在編碼指令中被分成兩個單獨的欄位。
也可以看看
- https://stackoverflow.com/a/58417989/471129
- https://inst.eecs.berkeley.edu//~cs61c/resources/su18_lec/Lecture7.pdf
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/459715.html
