`
zwhc
  • 浏览: 264875 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

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 寄存器.

分享到:
评论

相关推荐

    JBit-开源

    JBit通过模拟6502指令集,允许用户编写、保存和运行与这些老式系统兼容的程序。这不仅是一个教育工具,也是一个娱乐和怀旧的平台,使用户能够在现代设备上重现早期个人计算机时代的编程挑战和乐趣。 JBit作为开源...

    jbig pos签购图

    由于JBIT的无损特性,解压缩后的图像与原始签名图像无异,从而保证了签名的真实性和法律效力。同时,JBIT的高效性使得即使在处理大量签购图时,系统性能也能得到保障,避免了因数据量过大而导致的系统瓶颈。 总的来...

    Java项目新手java开发的一些小例子,可以提供思考,创新

    集合\bin\cn\jbit\arrylist\QQ.class (1732, 2018-05-18) 集合\bin\cn\jbit\arrylist\TestList.class (514, 2018-05-18) 集合\src\cn\jbit\arrylist\TestList.java (4480, 2018-05-18) 集合\bin\cn\jbit\arrylist (0...

    jphp-torrent-ext:适用于jphp的JBit Torrent API

    JBit Torrent API 例子 获取种子信息: use php\torrent\ TorrentFile ; $ file = TorrentFile :: of ( "path/to/torrentFile" ); for ( $ i = 0 ; $ i < count> length ); $ i ++) $ size += $ file -> length ...

    Hibernate关联映射

    答案:cn jbit hw test Hw hw 2 ">2).在第6章简答题2员工奖项的基础上 使用连接查询完成以下功能 1> 查询所有员工获得的所有奖项 并打印输出员工姓名和奖项名称 答案:cn jbit hw test Hw hw 1 2&gt...

    jbig二值图像压缩算法编码实现

    2. **局部预测**:每个符号进行预测,预测结果与实际值之间的差异被用于编码。这种预测可以基于上下文,例如,当前块的左边界或上边界像素。 3. **模式识别**:JBIT2算法识别并存储重复出现的模式,这些模式被定义...

    Oracle导出

    ### 标题与描述解读:“Oracle导出” 这个标题直接指出了本文档的主题——如何使用Oracle数据库中的导出功能。导出操作通常涉及到将数据库中的数据、结构或其他元数据复制到一个文件中,以便于备份、迁移或归档等...

    MySchool数据库附件

    jbit学习必要资料 数据较为完整 自行创建

    学员信息管理系统

    package com.jbit.util; /** * 常量列表 * @author xu.sun * */ public class SysConstants { public static final String SYS_PROPERTYNAME = "sys.properties"; public static final String SYS_LISTENER...

    异常以及异常中常用到的类

    最近刚学习了异常,下面就写一篇有关异常的知识点,与各位同仁分享! 既然学习异常,必不可少的就是要学习异常处理机制。通过该机制是程序中的业务代码和异常处理代码分离,从而使代码更加优雅,是程序员更专心于...

    解决乱码问题

    2. **数据库与应用程序编码不一致**:当从数据库读取数据时,如果数据库的字符集与应用程序所使用的字符集不一致,也会导致乱码。 3. **网络传输过程中的编码转换**:数据在网络传输过程中可能会经历多次编码转换,...

    遍历当前程序路径下的files和cache目录

     adb push c:\piaoyao.mp3 /data/data/cn.com.jbit/files/piaoyao.mp3 对上面这条命令需要有一个piaoyao.mp3的文件放在C盘下,可用以上命令上传多个文件,同样可以上传到cache目录下。 或者程序写好后,运行此程序...

    oracle部分讲解

    - d:\oracledata\jbit\jbit1.DBF:数据文件的存储路径。 - SIZE 100M:初始大小设置为100MB。 - AUTOEXTEND ON NEXT 32M:当表空间达到当前最大值时,自动以32MB的增量进行扩展。 - MAXSIZE UNLIMITED:没有设置表...

    北大青鸟ACCP6.0 S2论坛短消息

    `jbit_message`文件可能是Java源代码,对应着论坛短消息服务的后端逻辑。在ACCP6.0课程中,Java是一种常用的编程语言,常用于开发Web应用。这部分代码可能包含了用户认证、消息发送与接收、消息存储和检索等功能。...

    Struts2 FreeMarker myBatis

    - `jbit.log`:可能是应用运行时的日志文件,用于记录程序的运行情况和错误信息。 - `.project`:Eclipse项目的配置文件,定义了项目的属性和构建设置。 - `WebContent`:这个目录通常包含Web应用程序的静态资源,如...

    用java写的凯撒加密器源码

    package cn.jbit.encryption; import java.util.Scanner; public class Switcher { public static void main(String[] args){ System.out.println("******************欢 迎 使 用凯撒加密器*****************...

    超市收银系统 JAVA

    在【JBIT_Unit01_20130924SuperMarket_V2.0】这个文件中,可能包含了该收银系统的源代码、数据库脚本、配置文件等资源。开发者或学习者可以通过阅读和分析这些代码,了解系统的设计思路,掌握Java在企业级应用中的...

    JDBC word文档

    databaseName=jbit", "username", "password"); // 创建Statement对象 Statement stmt = conn.createStatement(); // 执行查询语句 ResultSet rs = stmt.executeQuery("SELECT * FROM pet_owners"); // ...

    spring mvc教程

    <context:component-scan base-package="cn.jbit"/> ``` - **Web.xml 示例**: ```xml <servlet-name>dispatcherServlet <servlet-class>org.springframework.web.servlet.DispatcherServlet ...

    使用DAO模式实现宠物数据更新

    DAO(Data Access Object)模式是一种常见的软件设计模式,主要用于数据库操作的封装,使得业务逻辑层与数据访问层解耦,提高代码的可复用性和可维护性。在本例中,我们将探讨如何使用DAO模式来实现宠物数据的更新...

Global site tag (gtag.js) - Google Analytics