Tinyfool@Csdn

天行健,君子以自强不息----本Blog内容均可转载,但是作者不放弃版权,转载必须标明作者和原文地址。

用户操作
[即时聊天] [发私信] [加为好友]
TinyfoolID:tinydust
183350次访问,排名406好友3人,关注者10
tinydust的文章
原创 44 篇
翻译 6 篇
转载 0 篇
评论 506 篇
Tinyfool的公告
CodeChina.Org 中国代码网-中国程序员的代码天堂

银杏泰克科技有限公司[站内搜索解决方案]

全能之眼
Tiny同志在配眼镜

微尘程序员网站

最近评论
Vanel:那么这就match我对Yahoo和Google合作的看法了.
其他不举,想不通为什么说话就不能好好说呢?非要加个英文词。match?match?写汉字符合不行吗?现在CSDN里到处充斥着这种文章。风气么。。
lao1000:有点意思
renxinzhi:不能光看眼前的蝇头小利,与Google合作雅虎失掉的是继续前行的动力,本来广告是雅虎的主业,现在(相当于)把广告卖给Google,连雅虎都失去了对自己的信心,那么怎么让广告客户对它坚定信心呢?由于Google与雅虎是天生的竞争对手,而且Google又在合作中占据强势地位,对两者来说是此消彼长的关系,但是肯定是Google上涨。这样不仅会造成雅虎的客户流失,而且也使由于暂时的获利雅虎失去了继续……
bad__ba:个人觉得如果Google耗巨资来制作系统和应用软件的话,也不会只靠广告来收入,软件收费几乎是必然的。
tinydust::)
文章分类
收藏
    相册
    ATinyGBA
    blog用图
    China Mdc2004
    Tinyfool
    Tinyfool的开发日记(RSS)
    Tinyfool的移动开发阵线(RSS)
    Tinyfool的随想录(RSS)
    微尘程序员网站
    联系Tinyfool
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 一个用C/C++编写的源代码公开的简单的32位精简指令虚拟机收藏

    新一篇: 寒到绝对零度的一篇文章《BCB6.0是垃圾的二十条理由》 | 旧一篇: Symbian翻译 之 Essential Idioms-Layout conventions

    概述

      这个虚拟机作为我的TinyOs计划的理论准备。我的TinyOs在计划中是一个运行在GBA上面的32位的多任务操作系统。多任务是通过多个虚拟机的切换实现的。作为技术准备,我打算在PC上面实现一个简单的32位精简指令虚拟机,然后在这个虚拟机的基础上,实现一个多虚拟机的任务切换。这样的话,我的开发和调试可以变得更加简单,当任务切换实现以后,我再把这个多虚拟机的系统,移植到GBA上面去。(这里使用32位和精简指令都是为了适应GBA的环境。)

    指令集定义

      于是,我定义了一个最简单的指令集,如下:

    机器码

    指令格式

    简单解释

    0 T_NOP T_NOP T_NOP 空指令,无任何意义,直接执行下一句
    1 T_MOV  op0 op1 传输指令,把op1地址内容送至op0地址
    2 T_ADD  op0 op1 加法指令,把op0地址内容和op1地址内容相加,结果送至op0地址
    3 T_CMP  op0 op1 比较指令,比较op0和op1地址内容,如果<那么寄存器Cmp置0,否则寄存器Cmp置1
    4 T_JMP  op0 T_NOP 无条件条转指令,跳转到op0这个地址
    5 T_JCP  op0 op1 比较跳转指令,寄存器Cmp为0,跳转到op0,寄存器Cmp为1,跳转到op1
    6 T_PUS  op0 T_NOP 压栈指令,把op0地址的内容压栈
    7 T_POP  op0 T_NOP 出栈指令,出栈到op0地址
    8 T_HLT  T_NOP T_NOP 关机指令,关闭虚拟机
    9 T_PUT op0 op1 屏幕输出指令,在屏幕op0内容/20,op0内容%20的位置,用op1内容代表的颜色画点

      注解:操作数为T_NOP代表改操作数无意义,可以为任何数。

      屏幕暂时的尺寸定义为20*20点阵,支持24位真彩。因为时间和汇编代码里面暂时不需要的原因,T_PUS ,T_POP ,T_HLT 三个指令,在这个版本里面并没有实现。

    汇编程序编写

    地址 指令 操作数0 操作数1 注释
    00 T_JMP  12 0 直接跳转到12,因为03-11都是给变量预分配的
    03 0 1 0 3、5是一个变量
    4、6是用来累加的常量
    7、8是用来做越界检测的常量
    06 10 400 16777216
    09 0 0 0
    12 T_NOP T_NOP T_NOP 空指令
    15 T_PUT 2 2 在屏幕的0点画颜色为0的点,因为地址2保存的数是0
    18 T_ADD 3 4 对变量3进行加1操作
    21 T_ADD 5 6 对变量5进行加10操作
    24 T_CMP 3 7 比较变量3的值和常量7的值
    27 T_JCP 30 33 分别跳转到30和33
    30 T_JMP 36 0 直接跳转到36
    33 T_MOV 3 2 给变量3赋0值
    36 T_CMP 5 8 比较变量5的值和常量8的值
    39 T_JCP 42 45 分别跳转到42和45
    42 T_JMP 48 0 直接跳转到48
    45 T_MOV 5 2 给变量5赋0值
    48 T_PUT 3 5 在变量3指定的位置,画上变量5指定的颜色
    51 T_JMP 18 0 无条件跳转到18

    虚拟机的PC实现

      为了关注核心问题,我做了大量的简化,在目前这个虚拟机模型里面,除了Ip(指令指针寄存器),Cmp(比较寄存器)以外,没有定义任何其他的寄存器。任何运算和操作都是在32位的地址空间里面进行的。

      首先我定义了一个全局数组ASM用来保存我写的汇编程序,用宏定义的做法,可以让你觉得这个数组就是一个简单的汇编编辑器了。然后,利用核心代码RunEnmu()来运行汇编程序。下面是核心的实现代码:

    核心代码


      因为这个实现很简单,我就不说什么细节了,有什么疑问可以在后面留言。

      你可以在下面地址下载到完全的代码和可执行程序(BCB的,相信可以很容易的移植到VC):

      http://www.tinydust.net/gba-os/Emu.zip    

      运行截图如下:

    TinyOs虚拟机模型1   

    想了解更多关于GBA TinyOS请浏览Tiny的GBA开发专栏。

    http://blog.codelphi.com/tinyfool/category/402.aspx

    想了解Tiny,请浏览Tiny的网站。

    http://www.tinydust.net/

    发表于 @ 2004年05月17日 23:01:00|评论(loading...)|编辑

    新一篇: 寒到绝对零度的一篇文章《BCB6.0是垃圾的二十条理由》 | 旧一篇: Symbian翻译 之 Essential Idioms-Layout conventions

    评论

    #fuck 发表于2004-06-26 11:15:00  IP: 220.166.192.*
    垃圾
    #tinyfool 发表于2004-06-26 15:23:00  IP: 61.51.60.*
    haha,
    #tinyfool 发表于2004-06-26 16:06:00  IP: 61.51.60.*
    小弟什么都不好,就是涵养好
    #ggstudy 发表于2004-06-28 21:12:00  IP: 218.98.195.*
    只有垃圾才说别人是垃圾呢
    最基本的素养都丢了。
    #Koumei 发表于2004-07-05 17:53:00  IP: 218.20.59.*
    Tiny加油!
    #hehe 发表于2004-07-08 17:42:00  IP: 211.97.116.*
    会开发的人多了
    #lgc 发表于2004-07-10 10:14:00  IP: 24.10.129.*
    嗯,楼主好想法。但是光有虚拟机效率不高,最好配上一个编译器。刚好我最近写了一个Ansi C脚本编译器和32bit虚拟机,有兴趣可以过来看看。网址是:http://cc.usu.edu/~gangcailin/cs.zip
    #lgc 发表于2004-07-10 10:55:00  IP: 24.10.129.*
    对了,有什么意见或者建议可以发给我,我的email是:lgc_ustc@yahoo.com.cn
    #death 发表于2004-07-28 17:57:00  IP: 221.136.45.*
    我还以为什么虚拟机呢,会写的人的确多呢
    #胡紧掏 发表于2004-09-03 14:50:00  IP: 202.103.243.*
    恩 不错 好好加油
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © Tinyfool