4月忙碌在代码海洋中……
虽然第一个编程器是一个不完整的汇编解释运行器,但还是很兴奋的。
2000行的代码,但很明显,代码耦合度有点高,应该把读取操作数的代码编成函数调用……去掉这些应该还有1500行吧……

刚进高校,周围的人都在为编程的事苦恼着,怎样才能随时随地编写程序呢?目光扫向了手机。我的手机是S40的,所以不能运行SIS程序,只有JAVA可选。
想起曾经用VB写了个“按键模拟程序”email给“按键精灵”,然后就发现从此“按键精灵”多了VB脚本功能……-_-///
那个程序里面其实用到了解释运行的方法,在VB里就是狂用case了……
半天看完JAVA语言与J2ME的MIDLET和CANVAS,接着就开始了。
一开始策划着写一个C语言的解释运行器,但规划时发现要考虑的东西太多,编下来遍乱了阵脚……
于是移出编好的程序UI,重新设计解释运行器。

1. 汇编解释运行器规划

解释器部分:

LineInfo
 ---------
 |operator
 |operator_No
 ---------
 |oprand_num
 |oprand_1
 |oprand_1_type
 |oprand_2
 |oprand_2_type
 ---------Interpreter
 ---------
 |get_line_info
 |get_operator
 |check_operator
 |get_oprand
 |check_oprand
 ---------

运行器部分:

RunStack:
 --------- U = int
 |memory[16KU]
 |push
 |pop
 |m_write
 |m_read
 |reg_write
 |reg_read
 |chang_flag
 ---------RunCode
 ---------
 |exe_a_line
 |check_error
 |display_result
 |run_code
 |(functions such as print,mov,add,dec,xor,jmp...)
 ---------

在使用exe_a_line的时候发现,如果递归地使用它,计算1+2+3+...+100时一个单循环在模拟器上运行正常,但在手机上直接Out of memory了……
所以改成了迭代式,在run_code中用while,直到遇到exit或end,或者空行(输出没有exit or end)结束……

2.后期思考
这个汇编的解释运行器:
(1)没有实现[ ]中的偏移计算,只能[reg]或[num]。
这个问题很好解决,只要写一个非常简单的表达式计算函数就行了——每次读一个数据和一个计算符并放入计算栈,最后按优先级计算结果。
(2)没有实现标签与变量自定义
这个可以用一个表实现——一个表中存储变量名,变量类型和变量字符化的值。
(3)提高运行速度
可以采用即时编译——输入一行代码后,即时编码成更方便读取的结构,提高运行效率。

 

向C的编译器发起进攻!!…………

 

J.Y.Liu

09.05.04

 

差不多两个月了,厄,还没时间继续写下去,那么……

android 汇编代码 汇编手机_手机

分享下那耦合度比较高的烂烂的代码………………

 

http://sourceforge.net/projects/mobilecinjava/files/

 

说明:1.有些函数还没有完成  2.FLAGS设计有缺陷,需要重新编写……