4.2 Y86-64指令集详解

指令编码结构

Y86-64 的每条指令编码由指令字节和可选的操作数字节组成。指令字节包含两个 4 位部分:

  • 指令码(icode):高位 4 位,标识指令类型(如 halt、nop、rrmovq、irmovq 等)
  • 功能码(ifun):低位 4 位,在同一条指令码下区分不同操作(如条件传送的不同条件)

例如,rrmovq(寄存器到寄存器传送)的 icode 为 2,而 cmovlecmovlcmove 等条件传送通过 ifun 来区分。

指令格式一览

指令icodeifun附加字节
halt00
nop10
rrmovq2条件码rA:rB
irmovq30rA:rB + valC(8字节)
rmmovq40rA:rB + valC(8字节)
mrmovq50rA:rB + valC(8字节)
OPl(addq, subq, andq, xorq)6功能码rA:rB
jXX(jmp, jle, jl, je, jne, jge, jg)7条件码valC(8字节)
call80valC(8字节)
ret90
pushqA0rA:rB
popqB0rA:rB

寄存器编号

Y86-64 使用 4 位二进制数编码 16 个程序寄存器(实际上只用了 15 个,r15 保留未用):

编号名称
0%rax
1%rcx
2%rdx
3%rbx
4%rsp
5%rbp
6%rsi
7%rdi
8~14%r8 ~ %r14
15(无)

寄存器编号 0xF(15)表示”无寄存器”,用于指令中不需要寄存器操作数的场合。

相关笔记

链接到