汇编指令和机器码的对应表_Re: 从零开始的红白机模拟 - [04]6502汇编

本文介绍了6502汇编的基础知识,包括操作码、寻址方式和反汇编。重点讲解了各种寻址方式如隐含、立即、绝对、变址等,并给出了6502指令的示例。同时,提到了反汇编的过程,以及如何根据操作码和寻址方式反汇编成汇编代码。作业包括实现所有机器码的反汇编和自研模拟器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

12a3c77d74527125411bc423b8d1681f.png

本文github备份地址

STEP2: 6502汇编

写模拟器当然要了解使用到的汇编, 不管是调试模拟器还是模拟器调试都需要.

前面知道了6502汇编用$表示十六进制, 那先讲讲6502机器码, 由一个操作码和0~2个地址码构成, 都是8位的:

/// <summary>
/// StepFC: 6502机器码
/// </summary>
typedef union {
    
    // 用32位保存数据
    uint32_t    data;
    // 4个8位数据
    struct {
    
        // 操作码 
        uint8_t op;
        // 地址码1
        uint8_t a1;
        // 地址码2
        uint8_t a2;
        // 显示控制
        uint8_t ctrl;
    };

} sfc_6502_code_t;

其中, 值得注意的是C11才支持的匿名struct/union. 请检查自己编译器支持的情况.

理论上, 6502拥有256条操作码, 这里是所有的指令表: 非官方OpCode

有一些被称为非法或者说未被文档记录的操作码, 但是文档提到

An accurate NES emulator must implement all instructions, not just the official
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值