gpt4 book ai didi

emulation - 8051模拟器的制作方法

转载 作者:行者123 更新时间:2023-12-03 06:46:21 29 4
gpt4 key购买 nike

出于学习目的,我打算开始构建一个 8051 微 Controller 仿真器。我很擅长使用 C/C++/C# 进行编程。这不是类项目等,而是我这边的一项学习计划。

我确实发现了很多讨论这个问题的问题。然而,我想在更细粒度的层面上打破它,以便我可以在真正开始编写代码之前知道我需要关注哪些领域。

我最初的要求是:

  1. 文本编辑器(可以使用editbox控件),用户可以在其中编写汇编代码

  2. 验证语法是否正确

  3. 有一个小窗口,可以在运行时显示寄存器值。

  4. 当用户启动程序时,指令应逐步更新寄存器窗口。

除了 GUI 元素之外,我更感兴趣的是如何模拟微 Controller 。

我理解的方式可以进一步分解:

  1. 我需要一个指令查找表或某种其他方式来存储可用指令并验证语法。任何关于如何实现这一点的指示,请告诉我。

  2. 如何模拟 8051 的每条指令?

  3. 对于寄存器,我可以根据类型使用无符号整数并更新表。

  4. 由于微 Controller 的 RAM 内存有限,我如何检查代码长度,或者更确切地说,检查内存中正在执行的代码,以避免缓冲区溢出或其他问题。

如果有一些开源项目详细说明了模拟器是如何从头构建的,我们将不胜感激。

最佳答案

我认为您对该项目的范围有点不清楚,至少与标题相关。

模拟器执行二进制代码,仅此而已。模拟器不包括编辑器(这是一种开发工具)或汇编器(同上)。汇编器负责进行语法检查和翻译,这样模拟器就只需执行相对简单的工作即可执行预先验证的合法代码。

听起来您想构建一个完整的 IDE。这将围绕编辑器、汇编器和模拟器封装大量 GUI。我会将这一步保留为最后一步。

<小时/>

至于您有关模拟器本身的问题:

您可以使用最多(例如)64K 字节的数组作为模拟器的工作内存。您可以在程序中使用变量来模拟寄存器。我会使用 unsigned char * 来模拟程序计数器,并使用 int 来模拟大多数其他东西......

操作非常简单:从 0(或预先确定的引导位置)启动程序计数器,然后启动一个循环,通过该指针获取指令,并将与该指令相关的任何操作应用于寄存器和内存。一个简单的实现将围绕一个巨大的 switch 语句,其中包括所有可能的指令代码。

正如我所说,您的模拟器不需要担心非法指令,因为汇编器不应该产生任何指令。如果程序(即主循环)遇到非法操作,您可能会停止它。

同样,您的模拟器不必担心范围、索引或大小溢出...这也是汇编器的问题,或者可能是链接器的问题,如果您有的话。

<小时/>

更新:这里的一些提示:

Emulator Framework

关于emulation - 8051模拟器的制作方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1788840/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com