易码技术论坛

 找回密码
 加入易码
搜索
查看: 2127412|回复: 48

[源码] [嵌入式汇编的Lava编译器:汇编编译即将搞定]

[复制链接]
发表于 2006-9-23 19:30:47 | 显示全部楼层
支持+期待!!!
发表于 2006-9-23 19:39:59 | 显示全部楼层
这消息太令人兴奋了,无限期待……
发表于 2006-9-23 19:49:20 | 显示全部楼层
呵呵,严重支持啊!
不知道楼主是用什么方式实现嵌入汇编的呢?指怎么让解释器执行汇编代码。

另:如果能够,最好能在现有6502指令基础上加一些自定义的宏指令。
象取得lava中变量地址的宏,给lava中变量赋值的宏,以及一些算数运算的宏(这些宏的具体功能可以用汇编调用解释器中的子函数来实现)。这样就可以在嵌入的汇编中很方便的使用和操作ava中的变量了。
 楼主| 发表于 2006-9-23 21:13:17 | 显示全部楼层
汇编中使用Lava的变量在我开始做之前就想到的,使用变量就当标号一样用,就是用的时候实际使用它的地址就行了.至于嵌入汇编的方法开始我想的是修改LavaX的指令地址,6502机型的解释器我也没仔细研究过,要是能加个指令就更好了,当然还有Lava函数的调用,看来我还要再研究研究解释器了......

我现在还在考虑如何在函数里使用汇编,这样汇编的调用就是动态的了,不占用静态内存.

现在Lava的编译还有点东西没有加,比如结构,还有某些关键字(如sizeof ,类型转换)......

对我来说对汇编的编译已经很熟悉了,我都写过两次汇编的编译代码了.....难点就是怎么把汇编和lava很好的结合到一起,看来对6502机型上的lava解释器的研究势在必行啊......
发表于 2006-9-23 21:55:21 | 显示全部楼层
楼主不要局限于Lava的指令
如有可能  如不自己做个新的平台
 楼主| 发表于 2006-9-23 23:19:04 | 显示全部楼层
呵呵!
我做编译器也是一时即兴的,再做平台的话能在哪运行呢?
脱离了WQX我也不知道能做什么了....
发表于 2006-9-24 09:41:44 | 显示全部楼层
超级 超级 超级 严重 严重 严重 严重 严重 严重 支持 支持 支持 支持 支持!!!!
发表于 2006-9-24 10:31:35 | 显示全部楼层
引用第6楼gameghost2006-09-23 23:19发表的“”:
呵呵!
我做编译器也是一时即兴的,再做平台的话能在哪运行呢?
脱离了WQX我也不知道能做什么了....
希望PC端的解释器也一起搞定,如果真的可以实现一些自定义的宏指令的话,应该是很强手的.
PS:如果可以的话,让1.0的解释器支持浮点型和指针型会更爽的,呵呵.^_^
发表于 2006-9-24 11:02:46 | 显示全部楼层
哎呀,好啊
发表于 2006-9-24 11:14:02 | 显示全部楼层
引用第4楼gameghost2006-09-23 21:13发表的“”:
汇编中使用Lava的变量在我开始做之前就想到的,使用变量就当标号一样用,就是用的时候实际使用它的地址就行了.至于嵌入汇编的方法开始我想的是修改LavaX的指令地址,6502机型的解释器我也没仔细研究过,要是能加个指令就更好了,当然还有Lava函数的调用,看来我还要再研究研究解释器了......

我现在还在考虑如何在函数里使用汇编,这样汇编的调用就是动态的了,不占用静态内存.
.......
1.汇编中使用Lava的变量在我开始做之前就想到的,使用变量就当标号一样用,就是用的时候实际使用它的地址就行了.
不是很明白楼主的意思,是这样吗?
      char  x;
      _asm{
          lda x
          ....
      }
      编译的时候把x的地址换过去?就是说lda x -> AD aa bb ( $bbaa为x的实际地址)
      这样对全局变量是可行,但对函数内部的局部变量就需要做一些处理才行(因为这些变量的地址在编译阶段是未确定的)

2.至于嵌入汇编的方法开始我想的是修改LavaX的指令地址
如果是这样就必须为不同的机型生成不同的代码了,或者这个修改指令地址的函数前先做机型判断

3.我现在还在考虑如何在函数里使用汇编,不占用静态内存.
这个估计有些难办,而且这样的话所调用的汇编代码里就很难使用jmp指令了
发表于 2006-9-24 11:39:35 | 显示全部楼层
关于嵌入汇编的方法是直接写成机器码呢?还是写汇编代码?
发表于 2006-9-24 11:50:03 | 显示全部楼层
期待啊
 楼主| 发表于 2006-9-24 11:56:41 | 显示全部楼层
当然是写汇编代码,要不我做汇编编译程序干什么.

回10楼:

代码我确实考虑写成这样:
char x;
   _asm{
      lda x
      ....
   }
使用x时就会把x的地址编译进去

机型不同可以修改程序来适应各种机型

但是对于函数内,还是要研究解释器,要知道程序内存的使用状态,
知道函数的内存开始地址,就可以把jmp xxxx编译成 jmp (xxxx),跳转就解决了

对于函数内汇编程序的初始化,因为在lava里有初始化全局内存的指令,没有局部的,所以可以留出一块内存,不断的对其初始化,然后用memcpy() copy到函数里的内存就可以实现,

昨天反汇编了解释器,看了一晚上,晕啊,一头雾水.......郁闷啊......
发表于 2006-9-24 13:16:41 | 显示全部楼层
严重支持!
期待ing...
发表于 2006-9-24 20:37:34 | 显示全部楼层
超强啊,严重支持!
发表于 2006-9-26 17:30:12 | 显示全部楼层
呵呵哈哈,终于在EM上发帖 了。^_^
顶一下。
发表于 2006-9-26 20:30:35 | 显示全部楼层
消失了那么久,终于上来了啊!!!
发表于 2006-9-29 19:10:33 | 显示全部楼层
支持!加油干呀!
发表于 2006-9-29 20:23:56 | 显示全部楼层
消息越来越让人振奋了!
再次强烈支持!
发表于 2006-9-30 11:47:31 | 显示全部楼层
就是不知道是什么机器型号用的呢
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-27 09:46 , Processed in 0.014586 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表