RISC-V指令集讲解(2)I-Type整数寄存器-立即数指令

2021-07-30 16:56:57 浏览数 (1)

1. I-type整数寄存器-立即数指令

上文RISC-V指令集讲解 (1) 通用寄存器和汇编指令分类介绍了通用寄存器,程序计数器和6种汇编指令,本文将先从I-type的整数寄存器指令开始,详细介绍每一种汇编指令包括的具体指令。

图1 6种基本指令的机器码格式 [1]

除了CSR指令之外,所有出现的立即数都是有符号位扩展的,并且通常是在指令中最左边的可用位上 [1]。如图1所示,

所有出现立即数的指令种类(I-type,S-type,B-type,U-type和J-type),立即数的符号扩展都取决于指令的bit 31(也是立即数的最高位,比如J-type的imm[20])。

所以I-type中提到的立即数都是有符号位扩展的。

这里举例解释一下带符号位扩展,比如有一个12位立即数,

如果最高位是0,则表示立即数是正数,

如果最高位为1,表示立即数是负数。正数带符号扩展时高20位全部填充上0,负数带符号扩展时高20位全部填充上1,之后再进行相加或比较。而无符号扩展时,高20位都是填充0。

绝大多数整数计算指令对保存在整数寄存器中的XLEN位进行操作(RV32I里对应的整数寄存器为32位)。整数计算指令要么使用I-type指令为寄存器-立即数操作,要么使用R-type指令为寄存器-寄存器操作。

I-type对应的opcode被命名为OP-IMM,

I-type对应的immediate,固定为12位,被命名为I-immediate,如图2所示。

图2 整数寄存器-立即数指令机器码格式  [2]

I-type总共有15条指令,这里先介绍前6条指令,包括以下

ADDI、SLTI、SLTIU、ANDI、ORI、XORI

1.1. ADDI :ADDI指令格式为ADDI rd,rs1,immediate。x[rd] = x[rs1] sext(imm)

1.2. SLT:SLTI指令格式为SLTI rd,rs1,immediate。x[rd] = x[rs1] < sext(immediate)

1.3. SLTIU :SLTIU指令格式为SLTIU rd,rs1,immediate。x[rd]= x[rs1] < sext(immediate)

1.4. ANDI :ANDI指令格式为ANDI rd,rs1,immediate。x[rd] = x[rs1] & sext(immediate)

1.5. ORI :ORI指令格式为ORI rd,rs1,immediate。x[rd] = x[rs1] | sext(immediate)

1.6. XORI :XORI指令格式为XORI rd,rs1,immediate。x[rd] = x[rs1] ^ sext(immediate)

备注:6种指令实例介绍完整内容请搜索引擎搜索“IC知识库”查看。

知识库更多内容请关注:http://www.icfedu.cn/?_tg=bz

0 人点赞