`
transfan
  • 浏览: 3330 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

模拟器开发实践--解释vs编译

FP 
阅读更多

指令码的执行方式,大致有两种:解释和编译。两者都是以二进制目标机器码为输入,所采取的执行策略不同。

何为解释?就是说将机器码逐条读出,每读一条就进行解码、执行。实现相对简单,一般用高级语言编写解释器,移植性好。能够实现精确控制,方便中断、异常处理,且能实现目标硬件功能的完全模拟。缺点是效率低下。

编译,就是把二进制机器码按块进行转换,生成本地机器能够直接运行的指令码,并存放入缓冲区。它能够实现代码的高效运行,前提是缓冲区的代码会被反复调用。

通常情况下解释执行的速度慢于编译执行。原因是解释执行时,不管以前有没有执行过,都要对当前的指令进行分析译码,而编译执行能够记住过去执行过代码,当再次调用时直接从缓冲区中取出编译好的代码直接执行。举个例子,比如一段循环代码:sub这行它会执行100次,编译执行时只在第1次执行时运行编译器,然后的99次均直接执行缓冲区中的本机代码;解释执行要有100次调用解释器的开销。

mov r0, #100
loop:
sub r0, r0, #1
bne 
loop

 

一般编译执行的流程如下:

for(;;)
    
...{
    pc
=当前块入口地址();
    
if(pc被缓冲)
        
...{
        fp
=获取缓冲区入口地址(pc);
        fp();
// 执行缓冲区中的代码 
        }

    
else
        
...{
        生成代码(pc);
        }

    }

编译器编写时要考虑的问题主要有:基本块的划分,中断/异常模拟的实现,本机机器指令相关(如寄存器分配,指令编码等)。

有张图,展示了Mac上某x86模拟器动态编译执行的架构:

分享到:
评论

相关推荐

    MTK 模拟器编译和环境搭建。

    MTK(MediaTek)模拟器的编译与环境搭建是一个涉及多步骤的技术过程,主要针对的是MediaTek平台的软件开发工作。在这个过程中,开发者需要构建一个可以模拟MTK硬件功能的软件环境,以便在实际设备之外测试和调试应用...

    cmpp.rar_CMPP 模拟器_CMPP-VC_Ismg_cmpp c_linux c cmpp2

    6. **学习与实践**: 对于想深入了解移动通信协议或短信服务开发的开发者,这是一个很好的实践项目。通过阅读源代码,可以学习到如何实现TCP连接、数据包的封装和解析、以及如何处理CMPP协议的各种命令。 总结,这个...

    Android模拟器及编译环境安装新手入门.pdf

    本文档旨在为初次接触Android开发的新手提供一个全面、易懂的指南,帮助读者顺利安装Android模拟器及编译环境。文档作者Mercury@阿肆分享了自己的实践经验,并提供了详细的步骤说明。 #### 目标读者 本文档适合...

    编译原理实践-语言认知1

    本实验旨在通过实践帮助学生深入理解程序设计语言的发展历史,不同语言的特点,以及它们如何被编译或解释执行。实验主要关注五种语言:C、Java、Python、Haskell和MIPS汇编。 2.1.1 程序设计语言发展历史 编程语言...

    编译原理实验 (及模拟器)

    这个实验及模拟器旨在让学生深入理解和实践编译器的工作过程,包括词法分析、语法分析、语义分析以及代码生成等关键步骤。 在编译原理中,首先进行的是词法分析,它将源代码分解成一个个被称为“标记”(Token)的...

    模拟器中控源码-易语言

    "盯盯中控"可能是一个模拟器监控或管理的系统,源码.e是易语言的源代码文件格式,用于编写和编译程序。 2. **精易模块6.1内存修复版.ec**:这是一个易语言的扩展模块,提供了额外的功能或者修复了特定的内存问题。...

    安卓的nes(fc),街机MD,GBA,SFC,模拟器VC工程源码,C++,C,Java语言编写

    本文将详细讲解与标题"安卓的nes(fc),街机MD,GBA,SFC,模拟器VC工程源码,C++,C,Java语言编写"以及描述中提及的安卓模拟器相关的技术知识点,包括Android平台上的游戏模拟器开发、编程语言C++、C和Java的应用,以及...

    安卓GBA游戏模拟器源码编译APK与测试游戏.zip

    总之,通过这个资源,开发者不仅可以学习到GBA模拟器的实现细节,还能实践Android应用的开发流程,包括源码编译、调试和发布等环节。这不仅有助于提升编程技能,也能加深对移动平台游戏模拟技术的理解。

    fc-nes-java模拟器.rar

    标题中的“fc-nes-java模拟器.rar”表明这是一个与经典FC(Family Computer,也称任天堂红白机)游戏相关的项目,它...对于对复古游戏、模拟器开发或移动应用有兴趣的程序员来说,这是一个既有挑战性又有趣的实践项目。

    安卓FC NES小霸王游戏模拟器源码编译APK支持wifi直连对战游戏

    【安卓FC NES小霸王游戏模拟器源码编译APK支持wifi直连对战游戏】是一个专为Android平台设计的复古游戏模拟器项目,它能够让用户在手机上体验到经典的小霸王(NES)游戏。这款模拟器的独特之处在于其内置了WiFi直连...

    XEMU 是一款轻量级的 RISC-V 解释型模拟器,基于 C 语言实现,支持 RV32IM 指令集,支持简单外设模拟

    XEMU是针对RISC-V架构设计的一款轻量级解释型模拟器,它的主要特点是用C语言编写,这使得XEMU具有较高的运行效率和跨平台兼容性。C语言是一种广泛使用的编程语言,其简洁的语法和良好的底层控制能力,使得XEMU能够...

    Android编译环境和模拟器环境搭建和介绍

    标题与描述均指向了“Android编译环境和模拟器环境搭建和介绍”,这涉及到了Android应用开发的基础配置,包括开发工具的选择与安装、模拟器的使用以及开发环境的整体搭建过程。接下来,我们将深入探讨这些核心知识点...

    龙芯Pmon-gcc-64位编译

    龙芯,作为中国自主研发的CPU架构,其Pmon的编译过程对于理解和开发基于龙芯平台的应用至关重要。本文将深入探讨“龙芯Pmon-gcc-64位编译”的相关知识,帮助读者理解这一关键步骤。 首先,我们要明白“Pmon-gcc-64...

    Linux实践-讲义

    ### Linux实践-讲义 #### 一、Linux安装程序 Linux 的安装方法主要有三种:二进制文件安装、YUM库安装以及源代码安装。不同的安装方式适用于不同的场景。 1. **二进制文件安装**:这种方式适用于快速安装特定版本...

    一个用VC编写的NES/FC模拟器、游戏机的---C源代码

    其中可能包含.sln(解决方案文件)和.vcproj(项目文件),用于在VC环境中打开并编译整个模拟器项目。 【详细知识点】 1. **C语言编程**:模拟器的核心是用C语言编写的,这是一种强大的、低级的编程语言,适合实现...

    ns-3网络模拟器基础与应用

    本书以工程实践为导向,从平台选择到编译安装ns-3,从设计开发仿真脚本到收集、统计和分析仿真数据,从ns-3内核模块再到其他上层重要模块,深入浅出地介绍了ns-3的相关重要内容,并且配备大量示例,以供读者参考。...

    gba模拟器android源码

    总之,"gba模拟器android源码"项目涵盖了Android编程、C++和Java语言、硬件模拟、图形和音频处理、性能优化等多个IT领域的知识,对于希望深入理解游戏模拟器开发或Android应用开发的程序员来说,这是一个宝贵的资源...

    Y86-sim-interactive, Y86指令集模拟器-调试器

    通过阅读自述文件,你可以了解到如何编译和运行Y86程序,以及如何使用模拟器提供的各种调试功能。 在实际应用中,这个工具不仅可以帮助学生掌握Y86指令集和计算机体系结构的基本原理,还可以为教师提供一个方便的...

    心脏模拟器 VI1 simulink-monitoring N°25:心脏模拟器 VI1 simulink-matlab开发

    8. **软件工程实践**:开发这样的模拟器还需要遵循良好的软件工程实践,包括文档编写、版本控制、测试和调试,以确保模型的准确性和可靠性。 9. **实际应用**:除了教育,心脏模拟器也可能用于药物效果预测、手术...

Global site tag (gtag.js) - Google Analytics