在手机上玩编程
在手机上可以玩编程?对,可以,而且,玩的还是汇编,6502 汇编。那么,用什么软件呢?Jbit(http://sourceforge.net/projects/jbit/),一款开源的 J2ME 程序。6502汇编,还有人在用吗?有,文曲星系统在用,凌阳的cpu 也支持。
下面,简单介绍一下Jbit 的使用:
1、 启动程序后,出现如下界面
3、 再选择 6502 查看所有的 6502 示例
4、 选择菜单,弹出菜单项
5、 选择 Info,查看该示例的信息:
Show the word "CIAO".
CPU Instructions: LDA (LoaD Accumulator), STA (STore Accumulator) and BRK (BReaK).
CPU Addressing Modes: Immediate [#n], absolute [n:n] and implied [].
IO: Video memory is at 40-79 in page 2; 1st row starts at 2:40, 2nd row starts at 2:50 and so on for a 10x4 matrix of Latin1 (extended ASCII) characters.
翻译及注解:
显示“CIAO”单词。
CPU指令:
LDA--由存储器取数送入累加器 M→A
STA--将累加器的内容送入存储器 A—M
BRK—中断,程序停止
CPU寻址模式:
A)快速模式 (Immediate)
在这种模式中,操作数的值在指令中被给出. 在汇编语言中,这种模式以操作数前加 "#" 来标记.
例如: LDA #$0A - 意思是 "load the accumulator with the hex value 0A"
在机器代码中,不同的模式以不同的代码标记. 所以 LDA 将依赖于不同的地址模式被翻译成不同的代码. 在这种
模式中,代码是: $A9 $0A
B)完全和完全零页面模式 (Absolute and Zero-page Absolute)
在这种模式中,操作数地址被给出.
例如: LDA $31F6 - (汇编语言)
$AD $31F6 - (机器代码)
如果地址不是在零页面 - 也就是,任何高字节不是00的地址 - 只有一个字节需要给出. 处理器自动将高字节填为00.
例如: LDA $F4
$A5 $F4
注意不同的模式中不同的指令代码.
同时注意对于两字节地址,低字节先被储存,例如: LDA $31F6 在内存中被存为三个字节: $AD $F6 $31.
绝对零页面通常被叫做零页面.
C)隐含模式 (Implied)
这种模式不需要任何操作数地址. 它们隐含在指令中.
例如: TAX - (将累加器中的值传给 X 寄存器)
$AA
IO:Video 内存位于 第二页的 40-79 位;第一行开始于 2:40,第二行开始于 2:50,因此,构成一个 10*4的 Latin1(扩展ASCII码)字符矩阵。
6、 按下完成按钮,回到示子,再次打开菜单项,选择 [3 Load&RUN],载入并执行程序。
7、 选择菜单项 Video,查看打印出来的字符
8、 按任意键退回,然后选择 End
9、 然后重复按下 Back ,一直退回主界面,选择 Editor
10、 打开的编辑器如下:
这是什么啊?呵呵,这就是汇编程序的代码。每一个数字(0-255),或者代表指令的操作码,或者代表数据。如前面两个数字:169 67,169 表示指令 LDA,67 表示载入的值。
LDA 指令共有八个操作码,分别代表不同的寻址模式。
11、 按下手机的 # 号键(有些机型上是 @ 键),切换成汇编视图
再次按下 # 号键,回到 MEM 视图。
12、 按下菜单键
13、 选择 7 Debug 进行调试
第一行 PC 3:0 R 表示当前代码所处的位置
第二行 LDA #67 就是第一条指令
第三行 A 0 X 0 Y 0 表示 A X Y 寄存器里的值
第六行 I# 0 表示目前已经运行了 0 条指令
第七行 C# 0 表示目前已经运行了 0 个机器周期
14、 按下数字 1 键,进行单步调试
15、 再次按下数字 1 键
16、 然后按下 # 号键,查看 Video 内存里的值
17、 呵呵,C(值为 67) 已经打印出来了。
这里,简单地带大家逛一下 Jbit,还有很多其它的功能,就不一一列出了。大家可以自已玩一下。
其它的汇编语言,java 的字节码,其实也都可以这样在手机上玩,不一定需要实现全部的指令,只要实现部分指令,能玩起来就行。
参考文档:
1、6502 微处理器: http://nesdev.parodius.com/6502_cn.txt