《4.2 RV32I指令电子课件 计算机系统基础:C语言视角(RISC-V版).ppt》由会员分享,可在线阅读,更多相关《4.2 RV32I指令电子课件 计算机系统基础:C语言视角(RISC-V版).ppt(75页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、4.2 RV32I指令电子课件 计算机系统基础:C语言视角(RISC-V版)RV32IRV32I指令指令功能分类功能分类按照功能按照功能整数运算整数运算整数的算术、逻辑和移位运算等整数的算术、逻辑和移位运算等数据传送数据传送在内存和寄存器之间传送数据在内存和寄存器之间传送数据条件分支条件分支根据两个寄存器的比较结果,进行分支跳转根据两个寄存器的比较结果,进行分支跳转无条件跳转无条件跳转改变指令执行的顺序改变指令执行的顺序其他功能其他功能控制状态寄存器指令,系统调用,以及将控制转移到调控制状态寄存器指令,系统调用,以及将控制转移到调试环境等试环境等RV32IRV32I指令指令表表31 2524
2、2019 1514 1211 76 00000000rs2rs1000rd0110011add0100000rs2rs1000rd0110011sub0000000rs2rs1001rd0110011sll0000000rs2rs1010rd0110011slt0000000rs2rs1011rd0110011sltu0000000rs2rs1100rd0110011xor0000000rs2rs1101rd0110011srl0100000rs2rs1101rd0110011sra0000000rs2rs1110rd0110011or0000000rs2rs1111rd0110011andi
3、mm11:0rs1000rd0010011addiimm11:0rs1010rd0010011sltiimm11:0rs1011rd0010011sltiuimm11:0rs1100rd0010011xoriimm11:0rs1110rd0010011oriimm11:0rs1111rd0010011andi0000000shamtrs1001rd0010011slli0000000shamtrs1101rd0010011srli0100000shamtrs1101rd0010011sraiimm31:12rd0110111luiimm31:12rd0010111auipcimm11:0rs1
4、000rd0000011lbimm11:0rs1001rd0000011lhimm11:0rs1010rd0000011lwimm11:0rs1100rd0000011lbuimm11:0rs1101rd0000011lhuimm11:5rs2rs1000imm4:00100011sbimm11:5rs2rs1001imm4:00100011shimm11:5rs2rs1010imm4:00100011swimm12|10:5rs2rs1000imm4:1|111100011beqimm12|10:5rs2rs1001imm4:1|111100011bneimm12|10:5rs2rs1100
5、imm4:1|111100011bltimm12|10:5rs2rs1101imm4:1|111100011bgeimm12|10:5rs2rs1110imm4:1|111100011bltuimm12|10:5rs2rs1111imm4:1|111100011bgeuimm20|10:1|11|19:12rd1101111jalimm11:0rs1000rd1100111jalr整数运算指令整数运算指令整数的算术、逻辑和移位运算等,共整数的算术、逻辑和移位运算等,共2121条指令条指令算术运算算术运算加法,减法运算加法,减法运算逻辑运算逻辑运算与、或和异或与、或和异或移位运算移位运算左移、逻
6、辑右移和算术右移左移、逻辑右移和算术右移小于则置位(小于则置位(slt/slti/sltu/sltiuslt/slti/sltu/sltiu),加载高),加载高位立即数(位立即数(luilui)、)、PCPC加高位立即数(加高位立即数(auipcauipc)整数整数运算指令运算指令除除luilui和和auipcauipc外,其他运算指令都是三地址指令外,其他运算指令都是三地址指令两个源操作数(即待运算的数据)两个源操作数(即待运算的数据)第一个源操作数第一个源操作数来自于寄存器来自于寄存器rs1rs1第二个源操作数第二个源操作数rs2 rs2 R-类类型型或从指令或从指令31:2031:20中
7、直接获得中直接获得 I-类类型型一个目标操作数(运算执行后的结果)一个目标操作数(运算执行后的结果)存储于存储于rdrd中中整数运算指令整数运算指令R-R-类型,类型,RegisterRegisterI-I-类型,类型,ImmediateImmediateU-U-类型,类型,UpperUpper:lui lui和和auipcauipc指令指令31 25 24 20 19 15 14 12 11 7 6 0funct7rs2rs1funct3rdopcode31 20 19 15 14 12 11 7 6 0imm11:0rs1funct3rdopcode31 1211 7 6 0imm31:1
8、2rdopcodeR-R-类型运算指令类型运算指令操作码为操作码为0110011011001131 25 24 20 19 15 14 12 11 7 6 0funct7rs2rs1funct3rdopcodeADDADD操作码操作码01100110110011,R-R-类型类型函数码:指令函数码:指令14:1214:12和指令和指令31:2531:25,分别为,分别为000000和和00000000000000,加法运算加法运算寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x8x90000 0000 0000 0000 0000
9、0000 0000 01106x100000 0000 0000 0000 0000 0000 0000 00113x30 x3131 2524 2019 1514 1211 76 000000000101001001000010000110011addx10 x9算术算术x8R-类型类型寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x80000 0000 0000 0000 0000 0000 0000 10019x90000 0000 0000 0000 0000 0000 0000 01106x100000 0000 0000
10、 0000 0000 0000 0000 00113x30 x31SUBSUB操作码操作码01100110110011,R-R-类型类型函数码:指令函数码:指令14:1214:12和指令和指令31:2531:25,分别为,分别为000000和和01000000100000,减法运算减法运算寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x8x90000 0000 0000 0000 0000 0000 0000 01106x100000 0000 0000 0000 0000 0000 0000 00113x30 x3131 2524
11、 2019 1514 1211 76 001000000101001001000010000110011subx10 x9算术算术x8R-类型类型寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x80000 0000 0000 0000 0000 0000 0000 00113x90000 0000 0000 0000 0000 0000 0000 01106x100000 0000 0000 0000 0000 0000 0000 00113x30 x31ANDAND操作码操作码01100110110011,R-R-类型类型函数码:
12、指令函数码:指令14:1214:12和指令和指令31:2531:25,分别为,分别为111111和和00000000000000,按位与运算按位与运算寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x8x90000 0000 0000 0000 0000 0000 0000 01106x100000 0000 0000 0000 0000 0000 0000 00113x30 x3131 2524 2019 1514 1211 76 000000000101001001111010000110011x10 x9andx8R-类型类型寄
13、存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x80000 0000 0000 0000 0000 0000 0000 00102x90000 0000 0000 0000 0000 0000 0000 01106x100000 0000 0000 0000 0000 0000 0000 00113x30 x31OROR操作码操作码01100110110011,R-R-类型类型函数码:指令函数码:指令14:1214:12和指令和指令31:2531:25,分别为,分别为110110和和00000000000000,按位或运算按位或运算寄
14、存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x8x90000 0000 0000 0000 0000 0000 0000 01106x100000 0000 0000 0000 0000 0000 0000 00113x30 x3131 2524 2019 1514 1211 76 000000000101001001110010000110011x10 x9orx8R-类型类型寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x80000 0000 0000 0000 00
15、00 0000 0000 01117x90000 0000 0000 0000 0000 0000 0000 01106x100000 0000 0000 0000 0000 0000 0000 00113x30 x31XORXOR操作码操作码01100110110011,R-R-类型类型函数码:指令函数码:指令14:1214:12和指令和指令31:2531:25,分别为,分别为100100和和00000000000000,按位异或运算按位异或运算寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x8x90000 0000 0000 0
16、000 0000 0000 0000 01106x100000 0000 0000 0000 0000 0000 0000 00113x30 x3131 2524 2019 1514 1211 76 000000000101001001100010000110011x10 x9xorx8R-类型类型寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x80000 0000 0000 0000 0000 0000 0000 01015x90000 0000 0000 0000 0000 0000 0000 01106x100000 0000
17、 0000 0000 0000 0000 0000 00113x30 x31SLLSLL操作码操作码01100110110011,R-R-类型类型函数码:指令函数码:指令14:1214:12和指令和指令31:2531:25,分别为,分别为001001和和00000000000000,逻辑左移运算(逻辑左移运算(Shift Left Shift Left LogicalLogical)寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x8x90000 0000 0000 0000 0000 0000 0000 01106x100000 0
18、000 0000 0000 0000 0000 0000 00113x30 x3131 2524 2019 1514 1211 76 000000000101001001001010000110011x10 x9sllx8R-类型类型寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x80000 0000 0000 0000 0000 0000 0011 000048x90000 0000 0000 0000 0000 0000 0000 01106x100000 0000 0000 0000 0000 0000 0000 00113x
19、30 x31SRLSRL操作码操作码01100110110011,R-R-类型类型函数码:指令函数码:指令14:1214:12和指令和指令31:2531:25,分别为,分别为101101和和00000000000000,逻辑右移运算(逻辑右移运算(Shift Right Shift Right LogicalLogical)寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x8x90000 0000 0000 0000 0000 0000 0000 01106x100000 0000 0000 0000 0000 0000 0000 0
20、0113x30 x3131 2524 2019 1514 1211 76 000000000101001001101010000110011srlx10 x9右移右移x8R-类型类型寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x80000 0000 0000 0000 0000 0000 0000 00000 x90000 0000 0000 0000 0000 0000 0000 01106x100000 0000 0000 0000 0000 0000 0000 00113x30 x31SRASRA操作码操作码01100110
21、110011,R-R-类型类型函数码:指令函数码:指令14:1214:12和指令和指令31:2531:25,分别为,分别为101101和和01000000100000,算术右移运算(算术右移运算(Shift Right Shift Right ArithmeticArithmetic)寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x8x91111 1111 1111 1111 1111 1111 1111 1010-6x100000 0000 0000 0000 0000 0000 0000 00011x30 x3131 2524
22、2019 1514 1211 76 001000000101001001101010000110011srax10 x9右移右移x8R-类型类型寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x81111 1111 1111 1111 1111 1111 1111 1101-3x91111 1111 1111 1111 1111 1111 1111 1010-6x100000 0000 0000 0000 0000 0000 0000 00011x30 x31SLTSLT操作码操作码01100110110011,R-R-类型类型函数码
23、:指令函数码:指令14:1214:12和指令和指令31:2531:25,分别为,分别为010010和和00000000000000,小于则置位运算(小于则置位运算(Set Less Set Less ThanThan)寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x8x90000 0000 0000 0000 0000 0000 0000 01106x100000 0000 0000 0000 0000 0000 0000 00113x30 x3131 2524 2019 1514 1211 76 00000000010100100
24、1010010000110011x10 x9sltx8R-类型类型寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x80000 0000 0000 0000 0000 0000 0000 00000 x90000 0000 0000 0000 0000 0000 0000 01106x100000 0000 0000 0000 0000 0000 0000 00113x30 x31SLTUSLTU操作码操作码01100110110011,R-R-类型类型函数码:指令函数码:指令14:1214:12和指令和指令31:2531:25,分别
25、为,分别为011011和和00000000000000,无符号小于则置位运算(无符号小于则置位运算(Set Less Than Set Less Than UnsignedUnsigned)在比较时,将在比较时,将rs1rs1和和rs2rs2中的数看作无符号数中的数看作无符号数寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x8x90000 0000 0000 0000 0000 0000 0000 01106x100000 0000 0000 0000 0000 0000 0000 00113x30 x3131 2524 2019
26、1514 1211 76 000000000101001001011010000110011x10 x9sltux8R-类型类型寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x80000 0000 0000 0000 0000 0000 0000 00000 x90000 0000 0000 0000 0000 0000 0000 01106x100000 0000 0000 0000 0000 0000 0000 00113x30 x31I-I-类型运算指令类型运算指令操作码为操作码为0010011001001131 20 19
27、15 14 12 11 7 6 0imm11:0rs1funct3rdopcodeADDIADDI操作码操作码00100110010011,I-I-类型类型函数码:指令函数码:指令14:1214:12为为000000,加立即数运算加立即数运算31 2019 1514 1211 76 00000 0000 000101001000010000010011imm11:0 x9addx8I-类型运算类型运算寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x8x90000 0000 0000 0000 0000 0000 0000 01106
28、x10 x30 x31寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x80000 0000 0000 0000 0000 0000 0000 01117x90000 0000 0000 0000 0000 0000 0000 01106x10 x30 x31andiandi,oriori,xorixori,sltislti和和sltiusltiu指令均为指令均为I-I-类型指令,解释与类型指令,解释与addiaddi指令类似指令类似问题问题1 1没有定义减立即数指令,如何实现减立即数运没有定义减立即数指令,如何实现减立即数运算?算?
29、将将addiaddi指令的指令的imm11:0imm11:0中的立即数设置为负数中的立即数设置为负数31 2019 1514 1211 76 01111 1111 111101000000010000010011imm11:0 x8addx8I-类型运算类型运算寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x80000 0000 0000 0000 0000 0000 0000 01117x9x10 x30 x31寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x80000
30、 0000 0000 0000 0000 0000 0000 01106x9x10 x30 x31注意:在同一条指令中,一个寄存器既可以用注意:在同一条指令中,一个寄存器既可以用作源寄存器,也可以用作目标寄存器作源寄存器,也可以用作目标寄存器这对所有的运算指令都是适用的这对所有的运算指令都是适用的问题问题2 2没有定义非(没有定义非(NOTNOT)运算指令,如何实现位组合)运算指令,如何实现位组合的按位非运算,即按位取反操作?的按位非运算,即按位取反操作?将将xorixori指令的指令的imm11:0imm11:0中的立即数设置为中的立即数设置为xFFFxFFF31 2019 1514 121
31、1 76 01111 1111 111101000100010000010011imm11:0 x8xorx8I-类型运算类型运算寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x80000 0000 0000 0000 0000 0000 0000 01117x9x10 x30 x31寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x81111 1111 1111 1111 1111 1111 1111 1000-8x9x10 x30 x31问题问题3 3I-I-类型指令的
32、立即数的取值范围是多少?类型指令的立即数的取值范围是多少?立即数是来自于指令的立即数是来自于指令的31:2031:20位中,共位中,共1212位,位,其取值范围其取值范围:-2:-21111221111-1-1移位运算移位运算移位运算的移动位数移位运算的移动位数仅需仅需5 5位位表示表示sllislli,srlisrli和和sraisrai指令指令第二个源操作数:指令第二个源操作数:指令31:2031:20中的立即数的低中的立即数的低5 5位(指令位(指令24:2024:20),),shamtshamt(shift amount,shift amount,移移位操作的位数)位操作的位数)指令指
33、令31:2031:20中的立即数的高中的立即数的高7 7位,用于设置移位位,用于设置移位运算的类型(逻辑或算术移位)运算的类型(逻辑或算术移位)SLLISLLI操作码操作码00100110010011,I-I-类型类型函数码:指令函数码:指令14:1214:12为为001001,代表左移运算代表左移运算结合指令结合指令31:2531:25的立即数的立即数00000000000000,表示要执行的是逻辑,表示要执行的是逻辑左移立即数运算左移立即数运算寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x8x90000 0000 0000 0
34、000 0000 0000 0000 01106x10 x30 x31寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x80000 0000 0000 0000 0000 0000 0011 000048x90000 0000 0000 0000 0000 0000 0000 01106x10 x30 x3131 2524 2019 1514 1211 76 000000000001101001001010000010011sllishamtx9左移左移x8I-类型运算类型运算SRLISRLI操作码操作码00100110010011,
35、I-I-类型类型函数码:指令函数码:指令14:1214:12为为101101,代表右移运算代表右移运算结合指令结合指令31:2531:25的立即数的立即数00000000000000,表示要执行的是逻辑,表示要执行的是逻辑右移立即数运算右移立即数运算寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x8x90000 0000 0000 0000 0000 0000 0000 01106x10 x30 x31寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x80000 0000
36、0000 0000 0000 0000 0000 00000 x90000 0000 0000 0000 0000 0000 0000 01106x10 x30 x3131 2524 2019 1514 1211 76 000000000001101001101010000010011srlishamtx9右移右移x8I-类型运算类型运算SRAISRAI操作码操作码00100110010011,I-I-类型类型函数码:指令函数码:指令14:1214:12为为101101,代表右移运算代表右移运算结合指令结合指令31:2531:25的立即数的立即数01000000100000,表示要执行的是算术
37、,表示要执行的是算术右移立即数运算右移立即数运算寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x8x91111 1111 1111 1111 1111 1111 1111 1010-6x10 x30 x31寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x81111 1111 1111 1111 1111 1111 1111 1101-3x91111 1111 1111 1111 1111 1111 1111 1010-6x10 x30 x3131 2524 2019 15
38、14 1211 76 001000000000101001101010000010011sraishamtx9右移右移x8I-类型运算类型运算U-U-类型运算指令类型运算指令31 1211 7 6 0imm31:12rdopcodeLUILUI操作码操作码01101110110111,代表加载高位立即数代表加载高位立即数(Load(Load Upper Immediate)Upper Immediate)运算运算将指令将指令31:1231:12的的2020位立即数,写入指令位立即数,写入指令11:711:7标识的标识的rdrd的的高高2020位中,低位中,低1212位补位补0 0寄存器堆寄存器
39、堆x00000 0000 0000 0000 0000 0000 0000 00000 x1x2x3*x30 x3131 1211 76 00001 0100 0000 0000 0000000110110111imm31:12x3lui寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1x2x30001 0100 0000 0000 0000 0000 0000 0000 x1400 0000*x30 x31AUIPCAUIPC操作码操作码00101110010111,代表代表PCPC加高位立即数加高位立即数(Add(Add Upper
40、Immediate to PC)Upper Immediate to PC)运算运算以低以低1212位补位补0 0,高,高2020位是指令位是指令31:1231:12的立即数的方式形成一的立即数的方式形成一个个3232位的值,加到位的值,加到PCPC上,结果写入指令上,结果写入指令11:711:7标识的标识的rdrd中中寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x5x30 x3131 1211 76 00000 0000 0000 0000 0000001010010111imm31:12x3auipc寄存器堆寄存器堆x0000
41、0 0000 0000 0000 0000 0000 0000 00000 x1*x50100 0000 0000 0000 0000 0000 0000 0000 x4000 0000 x30 x31PC0100 0000 0000 0000 0000 0000 0000 0000 x4000 0000数据传送指令数据传送指令在内存和通用寄存器之间传送数据在内存和通用寄存器之间传送数据加载(加载(LoadLoad)将数据从内存移动到寄存器将数据从内存移动到寄存器存储(存储(StoreStore)将数据从寄存器移动到内存将数据从寄存器移动到内存加载加载/存储指令存储指令加载指令加载指令操作码为
42、操作码为00000110000011I-I-类型类型lblb,lhlh,lwlw,lbulbu和和lhulhu指令指令存储指令存储指令操作码为操作码为01000110100011S-S-类型类型sbsb,shsh和和swsw指令指令寻址模式寻址模式使用存储单元地址,对存储单元进行读写操作使用存储单元地址,对存储单元进行读写操作存储单元地址存储单元地址3232位位无法在一条无法在一条3232位的指令中直接声明一个地址位的指令中直接声明一个地址寻址模式寻址模式计算将要读取或存储的存储单元的地址的机制计算将要读取或存储的存储单元的地址的机制加载加载/存储指令的寻址模式存储指令的寻址模式“基址寄存器基
43、址寄存器+偏移量偏移量”基址基址+偏移量偏移量存储单元地址存储单元地址通过将一个通过将一个1212位的立即数(位的立即数(imm11:0imm11:0)进行符)进行符号扩展后,与寄存器号扩展后,与寄存器rs1rs1中的值相加得到中的值相加得到rs1,rs1,“基址寄存器基址寄存器”imm11:0,imm11:0,偏移量偏移量LWLW地址地址x3FFF 00070000 0000 x3FFF 00060000 0000 x3FFF 00050000 0000 x3FFF 00040000 0110寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000
44、 x1*x20011 1111 1111 1111 0000 0000 0000 00000 x3FFF 0000 x3x4x31基址基址+偏移量偏移量(x2x2)+0 x0000 0004+0 x0000 00040 x3FFF 00040 x3FFF 000431 2019 1514 1211 76 00000 0000 010000010010010100000011imm11:0 x2lwx10I-类型加载类型加载寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x20011 1111 1111 1111 0000 0000 0
45、000 00000 x3FFF 0000 x100000 0000 0000 0000 0000 0000 0000 01106x31RS1=x0RS1=x0 x0=0 x0=0“基址基址+偏移量偏移量”,0+SEXT0+SEXT(imm11:0imm11:0)绝对地址绝对地址x0 x0加载指令加载指令不可不可用作目标寄存器用作目标寄存器RDRD其他加载指令其他加载指令W W代表字(代表字(WordWord)B B代表字节(代表字节(ByteByte)lblb指令,从计算出的存储单元地址中读取指令,从计算出的存储单元地址中读取一个字节一个字节(即(即8 8位),经位),经符号扩符号扩展展为为3
46、232位后,写入目标寄存器位后,写入目标寄存器rdrd中中H H代表半字(代表半字(HalfwordHalfword)lhlh指令,从计算出的存储单元地址中读取连续的指令,从计算出的存储单元地址中读取连续的两个字节两个字节(即(即1616位,半字)位,半字),经,经符号扩展符号扩展为为3232位后,写入目标寄存器位后,写入目标寄存器rdrd中中U U代表无符号数(代表无符号数(UnsignedUnsigned)lbulbu指令,从计算出的存储单元地址中读取指令,从计算出的存储单元地址中读取一个字节一个字节,经,经零扩展零扩展后,写入后,写入目标寄存器目标寄存器rdrd中中lhulhu指令,从计
47、算出的存储单元地址中读取连续的指令,从计算出的存储单元地址中读取连续的两个字节两个字节,经,经零扩展零扩展后,后,写入目标寄存器写入目标寄存器rdrd中中lblb和和lbulbu:用于读取:用于读取ASCIIASCII字符字符lhlh和和lhulhu:用于读取:用于读取1616位的位的UnicodeUnicode字符(一种可以容纳世界上所有文字和符字符(一种可以容纳世界上所有文字和符号的字符编码方案)号的字符编码方案)SWSW基址基址+偏移量偏移量(x5x5)+0 x0000 0008+0 x0000 00080 x3000 00080 x3000 0008地址地址x3000 000B0000
48、 0000 x3000 000A0000 0000 x3000 00090000 0000 x3000 00080000 001131 2524 2019 1514 1211 76 000000000011000101010010000100011imm11:5x6x5swimm4:0S-类型类型寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1*x50011 0000 0000 0000 0000 0000 0000 00000 x3000 0000 x60000 0000 0000 0000 0000 0000 0000 00113x
49、31其他存储指令其他存储指令sbsb指令指令存储字节(存储字节(Store ByteStore Byte,SBSB)操作)操作将寄存器将寄存器rs2rs2中的值的中的值的低低8 8位位(一个字节),传送(一个字节),传送到内存的一个存储单元中到内存的一个存储单元中shsh指令指令存储半字(存储半字(Store HalfwordStore Halfword,SHSH)操作)操作将寄存器将寄存器rs2rs2中的值的中的值的低低1616位位(两个字节),传(两个字节),传送到送到两个连续的存储单元两个连续的存储单元中中地址对齐地址对齐为了为了提高性能提高性能,加载,加载/存储指令计算出来的存储指令计
50、算出来的“基基址址+偏移量偏移量”的值,应该尽量对齐地址的值,应该尽量对齐地址lw/swlw/sw指令指令“基址基址+偏移量偏移量”的值应该是的值应该是4 4字节对齐,即地址字节对齐,即地址应为应为4 4的倍数的倍数lh/lhu/shlh/lhu/sh指令指令2 2字节对齐,即地址应为字节对齐,即地址应为2 2的倍数的倍数指令序列示例指令序列示例寄存器堆寄存器堆x00000 0000 0000 0000 0000 0000 0000 00000 x1x30 x31地址地址31 2524 2019 1514 1211 76 0解释解释x1000 0010.x0040 000C0000 0001