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