CHIP指令表

CHIP-8有35个指令,都为两字节长,以大端方式存储。指令表的指令格式规定如下:

NNN:地址

NN:8位常量

N:4位常量

V:寄存器

X和Y:4位,标识寄存器

PC:程序计数器

I:16位索引地址寄存器


操作码                    类型                    功能描述


0NNN                    调用                    执行地址NNN的子程序

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

参考文献:CHIP-8 - Wikipedia

chip8模拟器的python3实现-2-指令介绍的更多相关文章

  1. chip8模拟器的python3实现-1-CHIP8简介

    打算编写一个NES模拟器,先从简单的chip8模拟器入手 1.CHIP-8简介 CHIP-8是一个解释型语言,由Joseph Weisbecker开发.最初CHIP-8在上个世纪70年代被使用在COS ...

  2. CHIP8模拟器的python3实现-3-指令实现

    class Chip8CPU(object): def __init__(self, screen): self.registers = { 'v': [], 'index': 0, 'pc': 0, ...

  3. C#中的预编译指令介绍

    原文:C#中的预编译指令介绍 1.#define和#undef 用法: #define DEBUG #undef DEBUG #define告诉编译器,我定义了一个DEBUG的一个符号,他类似一个变量 ...

  4. corosync+pacemaker的crmsh的常用指令介绍

    配置crmsh的yum仓库,此仓库的RPM包有openSUSE提供,将这个network:ha-clustering:Stable.repo文件直接下载到本地并且命名为crmsh.repo wget ...

  5. C++编译器详解(二)常见precompiling 指令介绍

    VC++编译器中一些常见precompiling 指令介绍 我们在利用vc6.0 project wizard生成的代码中,经常看到大量的precompiling指令.本文讲解了常见的这些指令的作用 ...

  6. Docker学习(三): Dockerfile指令介绍

    特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...

  7. python3入门之赋值语句介绍

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 本节主要介绍赋值语句,以及几种特殊的赋值.下面附有之前的文章: python3入门之print,import,input介绍 python入门之字 ...

  8. 浅析VS2010反汇编 VS 反汇编方法及常用汇编指令介绍 VS2015使用技巧 调试-反汇编 查看C语言代码对应的汇编代码

    浅析VS2010反汇编 2015年07月25日 21:53:11 阅读数:4374 第一篇 1. 如何进行反汇编 在调试的环境下,我们可以很方便地通过反汇编窗口查看程序生成的反汇编信息.如下图所示. ...

  9. Modbus RTU新版本指令介绍

    Modbus RTU新版本指令介绍 TIA V13 SP1版本软件中提供了2个版本的Modbus RTU指令: 图1. 两个版本Modbus RTU指令 早期版本的Modbus RTU指令(图1. 中 ...

随机推荐

  1. CentOS 7修改系统时间及硬件时间

    转载于:https://www.cnblogs.com/LouisZJ/p/8554991.html [root@nginx ~]# timedatectl --help timedatectl [O ...

  2. projective dynamics的global solve中 引入拉格朗日乘子的简化方法

    想了一下使用乘子法还是可行的/做一个简化.在约束C(xn) 在C(xn-1)处线性展开 (n是时间步骤)具体推导留作备份等有时间了去代码实现 3式是一个典型的LCP问题 用PGS就行 左边的系数部分依 ...

  3. 【转】配置Exchange 2010 服务器(二)Exchange2010证书配置

    原文链接:http://blog.51cto.com/shubao/788562 (一)架设证书服务器 (二)Exchange2010申请证书 (三)证书服务器导入Exchange服务器受信任根证书 ...

  4. 【C语音基础】printf()用法

    printf() -- 将变量的内容输出到显示器上 四种用法 1.printf("字符串\n"); 2.printf("输出控制符",输出参数); 3.prin ...

  5. mybatis学习 -每天一记 mybatis insert null 报错

    mybatis 插入数据,model的属性存在null,插入报错 在使用mybatis 进行insert时,如果字段值存在null的情况,会出现插入失败的情况,解决方案: 如果使用spring boo ...

  6. js实现reqire中的amd,cmd功能

    js实现reqire中的amd,cmd功能 ,大概实现了 路径和模块 引入等重要功能. 本帖属于原创,转载请出名出处. <!DOCTYPE html PUBLIC "-//W3C//D ...

  7. Dostoevsky: Better Space-Time Trade-Offs for LSM-Tree Based Key-Value Stores via Adaptive Removal of Superfluous Merging 阅读笔记

    Introduction 主流的基于LSM树的KV存储都在两方面进行权衡,一方面是写入更新的开销,另一方面是查询和存储空间的开销.但它们都不是最优的,问题在于这些存储系统在LSM树的每一个level上 ...

  8. Sql Server数据库之触发器

    阅读目录 一:触发器的优点 二:触发器的作用 三:触发器的分类 四:触发器的工作原理 五:创建触发器 六:管理触发器 概念:   触发器(trigger)是SQL server 提供给程序员和数据分析 ...

  9. django项目部署

    1.布署前需要关闭调试.允许任何机器访问,在setting文件中设置 DEBUG = False ALLOW_HOSTS=['*',] 2.安装uWSGI pip install uwsgi 3.配置 ...

  10. Day03 - Ruby比一比:Module的include与extend

    前情提要在第一天里,我们很激昂地用Ruby的类别.物件.方法,写了开赛宣言!在第二天里,我们比较了方法与模块,比的过程中,发现模块多了包含(inclusion)与延伸(extension). 超级比一 ...