JBit 与 6502 汇编

1、JBit 是一个 J2ME 平台上的 MIDlet 程序,用来在手机上编辑和调试 6502 程序,甚至可以在桌面上开发 6502 汇编程序并传输到 MIDP 的手机设备上(6502 是七八十年代使用非常普遍的一种CPU)。
文曲星使用 6502。


2、6502 汇编资料
a) http://nesdev.parodius.com/6502_cn.txt

b) 6502编程大奥秘.chm (网络上有,自已搜索一下吧。)


3、学习笔记

LDA 指令

LDA ($addr,X)   A1   先变址X后间址   *11
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变址


  LDA                  LDA Load accumulator with memory                 LDA

  Operation:  M -> A                                    N Z C I D V
                                                        / / _ _ _ _
                                (Ref: 2.1.1)
  +----------------+-----------------------+---------+---------+----------+
  | Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
  +----------------+-----------------------+---------+---------+----------+
  |  (Indirect,X)  |   LDA (Oper,X)        |    A1   |    2    |    6     |
  |  Zero Page     |   LDA Oper            |    A5   |    2    |    3     |
  |  Immediate     |   LDA #Oper           |    A9   |    2    |    2     |
  |  Absolute      |   LDA Oper            |    AD   |    3    |    4     |
  |  (Indirect),Y  |   LDA (Oper),Y        |    B1   |    2    |    5*    |
  |  Zero Page,X   |   LDA Oper,X          |    B5   |    2    |    4     |
  |  Absolute,Y    |   LDA Oper,Y          |    B9   |    3    |    4*    |
  |  Absolute,X    |   LDA Oper,X          |    BD   |    3    |    4*    |
  +----------------+-----------------------+---------+---------+----------+
  * Add 1 if page boundary is crossed.


11.先变址X后间接寻址

  两字节指令

  指令格式:

操作码 第一字节
零页基地址 第二字节

  这种寻址方式是先以X作为变址寄存器和零页基地址IND相加 IND+X,不过这个变址计算得到的只是一个间接地址,还必须

经过两次间接寻址才得到有效地址

  第一次对 IND + X 间址得到有效地址低 8 位

  第二次对 IND + X + 1 间址得到有效地址高 8 位

  然后把两次的结果合起来,就得到有效地址.

 

  我们看一个例子:

  指令 LDA ($F0,X) 的寻址过程如下:

  这里设 (X) = 02,(F2) = 30,(F3) = 40

  那么先得到间接地址 = F0 + (X) = F0 + 02 = F2

  第一次对地址F0 + (X) = F2间址得到有效地址低8位 = 30

  第二次对地址F0 + (X) + 1 = F3间址得到有效地址高8位 = 40

  那么有效地址就是地址4030了,该指令功能就是将地址4030的内容送寄存器A,大家可以在NCTOOLS中试一下


12.后变址Y间接寻址

  两字节指令

  指令格式:

操作码 第一字节
零页间接地址 第二字节

  这种寻址方式是对IND部分所指出的零页地址先做一次间接寻址,得到一个低8位地址

  再对IND + 1 作一次间接寻址,得到一个高8位地址

  最后把这高,低两部分地址合起来作为16的基地址,和寄存器Y进行变址计算得到操作数的有效地址,注意的是这里IND是零页地址

  看一个例子:

  例如指令 LDA ($F0),Y

  我们看看寻址过程:

  设 (F0)=20,(F1)=30,(Y)=03

  先对地址F0间址得到低8位地址 20

  再对地址F0+1间址得到高8位地址30

  把两次结果合起来得到16位的基地址 3020

  然后再把地址3020和寄存器Y进行变址,得到有效地址3020+(Y)=3020+03=3023

  所以该指令的功能是将地址3023的内容送寄存器A




---------------------------------
    9) 预索引间接 (Pre-indexed indirect)
    这种模式是将一个零页面地址加上 X 寄存器中的内容,然后给出保存操作数地址的字节的地址. 间接模式在汇编语言
    中是由圆括号标记.
    例如: LDA ($3E, X)
          $A1 $3E
    假定: -           byte       value
                      X.reg      $05
                      $0043      $15
                      $0044      $24
                      $2415      $6E

    这条指令将被如下执行:
    (i)    $3E + $05 = $0043
    (ii)   获取 $0043, $0044 两字节中保存的地址 = $2415
    (iii)  读取 $2415 中的内容 - 也就是,$6E - 进入累加器

    10) 传递索引间接 (Post-indexed indirect)
    在这种模式中,一个零页面地址的内容 (包括其后面的字节) 给出一个间接地址,该地址中的内容将与 Y 寄存器中的
    值相加生成出操作数的真实地址. 同样,在汇编语言中,这个指令由圆括号标记.
    例如: LDA ($4C), Y
    注意,圆括号只括起来了指令中的第二个字节,因为它是做间接操作的一部分.
    假定: -           byte        value
                      $004C       $00
                      $004D       $21
                      Y.reg       $05
                      $2105       $6D
    这条指令将被如下执行:
    (i)    读取字节 $4C, $4D 中的内容 = $2100
    (ii)   与 Y 寄存器中的内容相加 = $2105
    (iii)  读取字节 $2105 中的内容 - 也就是,$6D 到累加器.
    注意,这种模式中,仅使用了 Y 寄存器.

你可能感兴趣的:(编程,D语言)