You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

疑问:RISC-V指令addi sp,sp,-32为何被转换为二进制码11 01?

RISC-V addi指令编码解析

先明确RISC-V的I型指令编码格式(32位),从高位到低位依次是:

  • 12位立即数 imm[11:0]
  • 5位源寄存器 rs1
  • 3位功能码 funct3
  • 5位目标寄存器 rd
  • 7位操作码 opcode

对于addi指令,固定参数:

  • opcode = 0010011(二进制)
  • funct3 = 000(二进制)
  • 寄存器sp是x2,对应二进制00010,所以rs1和rd都是00010

1. 解析addi sp, sp, -40的编码

  • 立即数-40的12位补码计算:40的十六进制是0x28,12位补码为0x1000 - 0x28 = 0xfd8,对应二进制110111111000
  • 按I型格式拼接32位二进制:
    110111111000 00010 000 00010 0010011
    
  • 分组转十六进制(每4位一组):1101 1111 1000 0001 0000 0001 0001 0011 → 0xfd810113,和你给出的结果一致。

2. 解析addi sp, sp, -32的编码

  • 立即数-32的12位补码计算:32的十六进制是0x20,12位补码为0x1000 - 0x20 = 0xfe0,对应二进制111111100000
  • 按I型格式拼接32位二进制:
    111111100000 00010 000 00010 0010011
    
  • 转十六进制为0xfe010113,对应的完整二进制是32位,并非11 01。

你提到的11 01应该是对编码的误解:参考图片显示的反汇编结果包含指令与对应机器码,机器码0xfe010113的十六进制字节拆分是0xfe、0x01、0x01、0x13,若误提取其中片段,可能会得到类似11 01的不完整二进制内容。

内容的提问来源于stack exchange,提问作者Chris633

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 00:32:18