我有这个S格式指令表。你能告诉我imm[11:5]
和funct3
是什么吗?我知道funct
表示它的大小有点,有时它是000或010.我不确切知道它为什么存在。此外,imm[11:5]
也是所有0的7位。
请帮忙!
答案 0 :(得分:0)
imm[4:0]
和imm[11:5]
表示立即操作数的位表示形式的闭合间隔。
S格式用于编码商店指令,即:
sX rs2, offset(r1)
有不同类型的商店说明,例如 store-byte (sb
), store-half-word (sh
), store-word ({ sw
)等。funct3
部分用于编码类型(即0b00
-> sb
,0b010
-> sw
,{ {1}}-> 0b011
等)。这允许仅使用一个(主要)操作码,同时仍具有多种类型的存储指令-而不用浪费多个(主要)操作码。 IOW,sd
对指令的次要操作码进行编码。
立即数对偏移量进行编码。如果您问自己为什么要这样分割-它可以增加编码中其余部分与其他指令格式的相似性。例如,操作码,rs1和funct3部分位于R型,I型和B型指令格式中的确切位置。 rs2部件放置与R型和B型指令格式共享。这些相似之处有助于简化指令解码器。
这意味着偏移量是12位宽且使用伪代码:
funct3
另请参阅RISC-V Base specification(批准的2019-06-08)第2.6节(加载和存储指令)中的第一个数字: