簡體   English   中英

小立即在 risc-v 中的 lui

[英]lui in risc-v with small immediate

對於像lui x28 123這樣的 risc-v 指令,venus 顯示它的機器碼是0x0007BE37 但是lui應該只加載立即數123的高20位。 由於十六進制1230x0000007B ,我認為相應的機器碼應該是0x00000E37

我很奇怪為什么 venus 會產生不同的結果,我對lui的理解有問題嗎?

當您將數值作為文字提供給LUI之類的指令時,一些匯編程序會將其作為您希望在指令中編碼的確切立即值。 這對於生成匯編程序的編譯器或想要使用LUI並為該指令中的 20 位指定確切位模式而不受匯編程序任何干擾的匯編程序員來說非常重要且有用。

如果您希望它只占用文字的高 20 位,則有一些匯編程序會接受的編譯時函數1 ,例如%hi%lo ,例如lui %hi(123)%hi用於lui%lo用於需要 12 個低位的指令,例如addisw / lw

1這些可能會在鏈接時進行評估。


由於傳統選擇與lwaddi等指令配對,這些函數( %hi%lo )很復雜,其中它們的立即數構成 12 位 rest,但本身是有符號的 因此, %hi function 在特定情況下將值偏移 1,其中lw的偏移量將顯示為負數,並且在運行時將符號擴展為 1。 因此,當它們配對2時,環境會使事情正常進行,但是如果您在沒有這種配對的情況下在隨機常數上使用LUI中的%hi() ,您可能無法獲得您期望的確切 20 位。

2只要 function arguments 匹配,多個%lo可以與相同的%hi配對。 因此,例如,對全局變量的讀/修改/寫序列可能對lw %lo()sw %lo()都有一個lui %hi() ) 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM