ZEXT.H 会访问内存吗?
不会。该操作读取整数源寄存器并写入整数目标寄存器,不进行数据内存访问。
半字零扩展
rd、rs 选择 x0–x31;只有一个整数源,没有立即数,编码中的 rs2 固定为 00000。
funct7=0000100、funct3=100;RV32 opcode=0110011,RV64 opcode=0111011。
读取执行前 rs[15:0],高于 bit15 的所有位填零,再按 XLEN 写入 rd;rd=x0 时丢弃写回。
适用于 RV32/RV64 的 Zbb 或 Zbkb;Zbkb 的 RV32 PACK / RV64 PACKW 在 rs2=x0 时就是该指令。
不访问数据内存;rd=rs 合法,使用写回之前的源值。
将 rs 的低 16 位零扩展到 XLEN。Zbb 与 Zbkb 都提供该指令;RV32 使用 PACK 的 rs2=x0 编码,RV64 使用 PACKW 的 rs2=x0 编码。
从机器码字段解析开始,依次展示操作数读取、该指令专属语义计算和 ISA 可见状态更新。
本例假定所选 XLEN 下 Zbb 或 Zbkb 已启用,使用下列固定寄存器初值和 PC=0x2000;取指成功且无异步中断。步骤是教学分解。
机器码按当前指令格式切成字段,动画从 encoding/decode 开始。
该动画展示 ISA 可见的解码和状态变化,不表示任何特定 CPU 的流水线、缓存、预测或时序实现。
将 rs 的低 16 位零扩展到 XLEN。Zbb 与 Zbkb 都提供该指令;RV32 使用 PACK 的 rs2=x0 编码,RV64 使用 PACKW 的 rs2=x0 编码。
RV32/RV64 Zbb 或 Zbkb,x11=0x12348001:zext.h x10, x11 得到 x10=0x8001,高位清零。
不会。该操作读取整数源寄存器并写入整数目标寄存器,不进行数据内存访问。
结果按当前 XLEN 写入 rd:RV32 为 32 位,RV64 为 64 位;两者的高于 bit 15 的位都为零。