CHIP8指令表
CHIP-8有35个指令,都为两字节长,以大端方式存储。指令表的指令格式规定如下:
NNN | 地址 |
NN | 8位常量 |
N | 4位常量 |
V | 寄存器 |
X和Y | 寄存器标识 |
PC | 程序计数器 |
I | 16位索引地址寄存器 |
CHIP-8包括SCHIP指令代码如下:
操作码 | 类型 | 功能描述 |
0NNN | 调用 | 执行地址NNN的子程序 |
00CN | 显示 | 滚动N行 |
00FB | 显示 | 向右滚动4个像素 |
00FC | 显示 | 向左滚动4个像素 |
00FD | 系统 | 退出模拟器 |
00FE | 显示 | 设置为CHIP-8图形模式 |
00FF | 显示 | 设置为SCHIP图形模式 |
00E0 | 显示 | 清屏 |
00EE | 跳转 | 从子程序返回 |
1NNN | 跳转 | 跳转到地址NNN |
2NNN | 跳转 | 调用子程序NNN |
3XNN | 条件 | 如果VX等于NN则跳过下一条指令(通常时跳过一条跳转指令) |
4XNN | 条件 | 如果VX不等于NN则跳过下一条指令(同上) |
5XY0 | 条件 | 如果VX的值等于VY则跳过下一条指令(同上) |
6XNN | 赋值 | VX = NN |
7XNN | 赋值 | VX += NN,进位标记不会改变 |
8XY0 | 赋值 | VX = VY |
8XY1 | 按位或 | VX = VX | VY |
8XY2 | 按位与 | VX = VX & VY |
8XY3 | 按位异或 | VX = VX ^ VY |
8XY4 | 运算 | VX += VY,VX有进位(大于255)时VF为1,否则VF为0 |
8XY5 | 运算 | VX -= VY,VX负数时VF为0,否则VF为1 |
8XY6 | 右移 | VX >>= 1,VX最低位存入VF中 |
8XY7 | 运算 | VX = VY - VX,VX负数时VF为0,否则VF为1 |
8XYE | 左移 | VX <<= 1,VX最高位存入VF中 |
9XY0 | 条件 | 如果VX不等于VY则跳过下一条指令(通常时跳过一条跳转指令) |
ANNN | 地址 | 将I设置为NNN |
BNNN | 跳转 | 跳转到地址V0+NNN,PC=V0+NNN |
CXNN | 随机数 | VX = rand() & NN |
DXYN | 显示 | 在(VX,VY)绘制一个宽8像素、高N像素的精灵。每8个像素从I寄存器中的地址逐步读出一字节(8位),在执行该语句时I内的值不可以改变,如果像素反转为0则碰撞检测将VF置为1 |
EX9E | 按键 | 跳过下一条指令,如果存储在VX的键值所应的键被按下 |
EXA1 | 按键 | 跳过下一条指令,如果存储在VX的键值所应的键没有被按下 |
FX07 | 定时器 | 获取延时寄存器的值 |
FX0A | 按键 | 等待按键,将按键的值存入VX(阻塞指令,所有指令将等待该指令执行完 |
FX15 | 定时器 | 将VX的值存入延时寄存器 |
FX18 | 定时器 | 将VX的值存入声音寄存器 |
FX1E | 地址 | I += VX |
FX29 | 地址 | 将VX中的精灵地址赋值给I,字符0-F由4X5字体表示 |
FX33 | BCD | 将VX中值的BCD码存入I中的地址内,百位在I,十位在I+1,个位在I+2 |
FX55 | 地址 | 将V0到VX的值存入I中地址为起始的内存空间 |
FX65 | 地址 | 将I中地址为起始的内容依次存入V0-VX |
FX75 | 地址 | 将V0到VX(x<8)的值存入rpl中地址为起始的内存空间 |
FX85 | 地址 | 将rpl中地址为起始的内容依次存入V0-VX(x<8) |