zoukankan      html  css  js  c++  java
  • NES 指令

    //addr  :代表8位地址    addr16:代表16位地址     data  :立即数


    //数据传送指令


    //LDA--由存储器取数送入累加器 M→A


    符号码格式 指令操作码 寻址方式 
    LDA ($addr,X) A1 先变址X后间址 
    LDA $addr A5 零页寻址 
    LDA #$data A9 立即寻址 
    LDA $addr16 AD 绝对寻址 
    LDA ($addr),Y B1 后变址Y间址 
    LDA $addr,X B5 零页X变址 
    LDA $addr16,Y B9 绝对Y变址 
    LDA $addr16,X BD 绝对X变址 


    //LDX--由存储器取数送入累加器 M→X


    符号码格式 指令操作码 寻址方式 
    LDX #$data A2 立即寻址 
    LDX $addr A6 零页寻址 
    LDX $addr16 AE 绝对寻址 
    LDX $addr,Y B6 零页Y变址 
    LDX $addr16,Y BE 绝对Y变址 


    //LDY--由存储器取数送入累加器 M→Y


    符号码格式 指令操作码 寻址方式 
    LDY #$data A0 立即寻址 
    LDY $addr A4 零页寻址 
    LDY $addr16 AC 绝对寻址 
    LDY $addr,X B4 零页X变址 
    LDY $addr16,X BC 绝对X变址 


    //STA--将累加器的内容送入存储器 A--M


    符号码格式 指令操作码 寻址方式 
    STA ($addr,X) 81 先变址X后间址 
    STA $addr 85 零页寻址 
    STA $addr16 8D 绝对寻址 
    STA ($addr),Y 91 后变址Y间址 
    STA $addr,X 95 零页X变址 
    STA $addr16,Y 99 绝对Y变址 
    STA $addr16,X 9D 绝对X变址 


    //STX--将寄存器X的内容送入存储器 X--M


    符号码格式 指令操作码 寻址方式 
    STX $addr 86 零页寻址 
    STX $addr16 8E 绝对寻址 
    STX $addr,Y 96 零页Y变址 


    //STY--将寄存器Y的内容送入存储器 Y--M


    符号码格式 指令操作码 寻址方式 
    STY $addr 84 零页寻址 
    STY $addr16 8C 绝对寻址 
    STY $addr,X 94 零页X变址 


    //寄存器和寄存器之间的传送


    符号码格式 指令操作码 寻址方式 指令作用 
    TAX AA 寄存器寻址 将累加器A的内容送入变址寄存器X 
    TXA 8A 寄存器寻址 将变址寄存器X的内容送入累加器A 
    TAY A8 寄存器寻址 将累加器A的内容送入变址寄存器Y 
    TYA 98 寄存器寻址 将变址寄存器Y的内容送入累加器A 
    TSX BA 寄存器寻址 将堆栈指针S的内容送入变址寄存器X 
    TXS 9A 寄存器寻址 将变址寄存器X的内容送入堆栈指针S 


    [算术运算指令]


    1. ADC--累加器,存储器,进位标志C相加,结果送累加器A  A+M+C→A 


    符号码格式 指令操作码 寻址方式            周期 
    ADC ($addr,X) 61 先变址X后间址          
    ADC $addr 65 零页寻址 
    ADC #$data 69 立即寻址 
    ADC $addr16 6D 绝对寻址 
    ADC ($addr),Y 71 后变址Y间址 
    ADC $addr,X 75 零页X变址 
    ADC $addr16,Y 79 绝对Y变址 
    ADC $addr16,X 7D 绝对X变址 




    2. SBC--从累加器减去存储器和进位标志C,结果送累加器  A-M-C→A


    符号码格式 指令操作码 寻址方式 
    SBC ($addr,X) E1 先变址X后间址 
    SBC $addr E5 零页寻址 
    SBC #$data E9 立即寻址 
    SBC $addr16 ED 绝对寻址 
    SBC ($addr),Y F1 后变址Y间址 
    SBC $addr,X F5 零页X变址 
    SBC $addr16,Y F9 绝对Y变址 
    SBC $addr16,X FD 绝对X变址 




     


    3. INC--存储器单元内容增1  M+1→M


    符号码格式 指令操作码 寻址方式 
    INC $addr E6 零页寻址 
    INC $addr16 EE 绝对寻址 
    INC $addr,X F6 零页X变址 
    INC $addr16,X FE 绝对X变址 


    4. DEC--存储器单元内容减1  M-1→M


    符号码格式 指令操作码 寻址方式 
    DEC $addr C6 零页寻址 
    DEC $addr16 CE 绝对寻址 
    DEC $addr,X D6 零页X变址 
    DEC $addr16,X DE 绝对X变址 


    5. 寄存器X,Y加1减1


    符号码格式 指令操作码 寻址方式 
    INX E8 隐含寻址 
    DEX CA 隐含寻址 
    INY C8 隐含寻址 
    DEY 88 隐含寻址 


    [逻辑运算指令]


    1.AND--寄存器与累加器相与,结果送累加器  A∧M→A


    符号码格式 指令操作码 寻址方式 
    AND ($addr,X) 21 先变址X后间址 
    AND $addr 25 零页寻址 
    AND #$data 29 立即寻址 
    AND $addr16 2D 绝对寻址 
    AND ($addr),Y 31 后变址Y间址 
    AND $addr,X 35 零页X变址 
    AND $addr16,Y 39 绝对Y变址 
    AND $addr16,X 3D 绝对X变址 
         


    2.ORA--寄存器与累加器相或,结果送累加器  A∨M→A


    符号码格式 指令操作码 寻址方式 
    ORA ($addr,X) 01 先变址X后间址 
    ORA $addr 05 零页寻址 
    ORA #$data 09 立即寻址 
    ORA $addr16 0D 绝对寻址 
    ORA ($addr),Y 11 后变址Y间址 
    ORA $addr,X 15 零页X变址 
    ORA $addr16,Y 19 绝对Y变址 
    ORA $addr16,X 1D 绝对X变址 


    3.EOR--寄存器与累加器相异或,结果送累加器  A≮M→A


    符号码格式 指令操作码 寻址方式 
    EOR ($addr,X) 41 先变址X后间址 
    EOR $addr 45 零页寻址 
    EOR #$data 49 立即寻址 
    EOR $addr16 4D 绝对寻址 
    EOR ($addr),Y 51 后变址Y间址 
    EOR $addr,X 55 零页X变址 
    EOR $addr16,Y 59 绝对Y变址 
    EOR $addr16,X 5D 绝对X变址 


    [置标志位指令]


    1. CLC--清除进位标志         0→C   机器码 18     √


    2. SEC--置进位标志C          1→C   机器码 38     √


    3. CLD--清除十进制运算标志D  0→D   机器码 D8     ×


    4. SED--置十进制运算标志D    1→D   机器码 F8     ×


    5. CLV--清除溢出标志V        0→V   机器码 B8


    6. CLI--清除中断禁止指令I    0→I   机器码 58     √


    7. SEI--置位中断禁止标志I    1→I   机器码 78     √


     
    //比较指令


    1. CMP--累加器和存储器比较


    符号码格式 指令操作码 寻址方式 
    CMP ($addr,X) C1 先变址X后间址 
    CMP $addr C5 零页寻址 
    CMP #$data C9 立即寻址 
    CMP $addr16 CD 绝对寻址 
    CMP ($addr),Y D1 后变址Y间址 
    CMP $addr,X D5 零页X变址 
    CMP $addr16,Y D9 绝对Y变址 
    CMP $addr16,X DD 绝对X变址 


     


    2. CPX--寄存器X的内容和存储器比较


    符号码格式 指令操作码 寻址方式 
    CPX #$data E0 立即寻址 
    CPX $addr E4 零页寻址 
    CPX $addr16 EC 绝对寻址 


    这些指令和CMP指令相似,不过前者是寄存器A,后者是寄存器X,另外寻址方式也比较少.


    3. CPY--寄存器Y的内容和存储器比较


    符号码格式 指令操作码 寻址方式 
    CPY #$data C0 立即寻址 
    CPY $addr C4 零页寻址 
    CPY $addr16 CC 绝对寻址 


    这些指令和CPX指令相似,不过前者是寄存器X,后者是寄存器Y.


     
    4. BIT--位测试指令


    符号码格式 指令操作码 寻址方式 
    BIT $addr 24 零页寻址 
    BIT $addr16 2C 绝对寻址 


    //移位指令


    1. 算术左移指令ASL


    符号码格式 指令操作码 寻址方式 
    ASL 0A 累加器寻址 
    ASL $data 06 零页寻址 
    ASL $addr16 0E 绝对寻址 
    ASL $addr,X 16 零页X变址 
    ASL $addr16,X 1E 绝对X变址 


    ASL移位功能是将字节内各位依次向左移1位,最高位移进标志位C中,最底位补0
    2. 逻辑右移指令LSR


    符号码格式 指令操作码 寻址方式 
    LSR 4A 累加器寻址 
    LSR $data 46 零页寻址 
    LSR $addr16 4E 绝对寻址 
    LSR $addr,X 56 零页X变址 
    LSR $addr16,X 5E 绝对X变址 


    该指令功能是将字节内各位依次向右移1位,最低位移进标志位C,最高位补0.
    3. 循环左移指令ROL


    符号码格式 指令操作码 寻址方式 
    ROL 2A 累加器寻址 
    ROL $data 26 零页寻址 
    ROL $addr16 2E 绝对寻址 
    ROL $addr,X 36 零页X变址 
    ROL $addr16,X 3E 绝对X变址 


    ROL的移位功能是将字节内容连同进位C一起依次向左移1位
    4. 循环右移指令ROR


    符号码格式 指令操作码 寻址方式 
    ROR 6A 累加器寻址 
    ROR $data 66 零页寻址 
    ROR $addr16 6E 绝对寻址 
    ROR $addr,X 76 零页X变址 
    ROR $addr16,X 7E 绝对X变址 


    ROR的移位功能是将字节内容连同进位C一起依次向右移1位


    //addr  :代表8位地址    addr16:代表16位地址     data  :立即数


    //堆栈操作指令


    1. 累加器进栈指令 PHA


       PHA是隐含寻址方式的单字节指令,操作码是 48


       功能是把累加器A的内容按堆栈指针S所指示的位置送入堆栈,然后堆栈指针减1


       该指令不影响标志寄存器P的状态


    2. 累加器出栈指令 PLA


       PLA是隐含寻址方式的单字节指令,操作码是 68


       功能是先让堆栈指针S+1,然后取加过1的S所指向的单元的内容,把它送累加器A


       该指令影响标志寄存器P中的N,Z两标志位


    3. 标志寄存器P进栈指令 PHP


       PHP是隐含寻址方式的单字节指令,操作码是 08


       功能是把标志寄存器P的内容按堆栈指针S所指示的位置送入堆栈,然后堆栈指针减1


       该指令不影响标志寄存器P的状态


    4. 标志寄存器P出栈指令 PLP


       PLP是隐含寻址方式的单字节指令,操作码是 28


       功能是先让堆栈指针S+1,然后取加过1的S所指向的单元的内容,把它送标志寄存器P


     


    1. JMP--无条件转移指令


    符号码格式 指令操作码 寻址方式 
    JMP  $data16 4C 绝对寻址 
    JMP ($data16) 5C 间接寻址 


    2. 条件转移指令


    符号码格式 指令操作码 寻址方式 指令功能 
    BEQ $data16 F0 相对寻址 如果标志位Z=1则转移,否则继续 
    BNE $data16 D0 相对寻址 如果标志位Z=0则转移,否则继续 
    BCS $data16 B0 相对寻址 如果标志位C=1则转移,否则继续 
    BCC $data16 90 相对寻址 如果标志位C=0则转移,否则继续 
    BMI $data16 30 相对寻址 如果标志位N=1则转移,否则继续 
    BPL $data16 10 相对寻址 如果标志位N=0则转移,否则继续 
    BVS $data16 70 相对寻址 如果标志位V=1则转移,否则继续 


    3. 转移到子程序指令JSR和从主程序返回指令RTS


    JSR指令仅仅是 绝对寻址,它的操作码是 20


    RTS指令是     隐含寻址,它的操作码是 60 




    //中断指令


      在文曲星内部大量使用了这种指令,该指令占三个字节.


      操作符为 INT,机器码为 00


      例如 INT $8A01


           INT $C001


      那么INT $8A01是

  • 相关阅读:
    java基础 第六章 下(抽象数据类型,面向过程,面向对象)
    java基础 第六章 上(二维数组)
    java基础 第五章 下(选择排序,冒泡排序)
    java基础 第五章 上(数组的第二种定义方法)
    java基础 补充(JVM 划分内存)
    java基础 第四章 下(数组)
    java基础 第四章 上(加载过程,重载)
    java基础 第三章 下(方法)
    java基础 第三章 上(终止循环 break,continue)
    Annotation 注解
  • 原文地址:https://www.cnblogs.com/xiayong123/p/3717569.html
Copyright © 2011-2022 走看看