- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
出于学习目的,我打算开始构建一个 8051 微 Controller 仿真器。我很擅长使用 C/C++/C# 进行编程。这不是类项目等,而是我这边的一项学习计划。
我确实发现了很多讨论这个问题的问题。然而,我想在更细粒度的层面上打破它,以便我可以在真正开始编写代码之前知道我需要关注哪些领域。
我最初的要求是:
文本编辑器(可以使用editbox控件),用户可以在其中编写汇编代码
验证语法是否正确
有一个小窗口,可以在运行时显示寄存器值。
当用户启动程序时,指令应逐步更新寄存器窗口。
除了 GUI 元素之外,我更感兴趣的是如何模拟微 Controller 。
我理解的方式可以进一步分解:
我需要一个指令查找表或某种其他方式来存储可用指令并验证语法。任何关于如何实现这一点的指示,请告诉我。
如何模拟 8051 的每条指令?
对于寄存器,我可以根据类型使用无符号整数并更新表。
由于微 Controller 的 RAM 内存有限,我如何检查代码长度,或者更确切地说,检查内存中正在执行的代码,以避免缓冲区溢出或其他问题。
如果有一些开源项目详细说明了模拟器是如何从头构建的,我们将不胜感激。
最佳答案
我认为您对该项目的范围有点不清楚,至少与标题相关。
模拟器执行二进制代码,仅此而已。模拟器不包括编辑器(这是一种开发工具)或汇编器(同上)。汇编器负责进行语法检查和翻译,这样模拟器就只需执行相对简单的工作即可执行预先验证的合法代码。
听起来您想构建一个完整的 IDE。这将围绕编辑器、汇编器和模拟器封装大量 GUI。我会将这一步保留为最后一步。
<小时/>至于您有关模拟器本身的问题:
您可以使用最多(例如)64K 字节的数组作为模拟器的工作内存。您可以在程序中使用变量来模拟寄存器。我会使用 unsigned char *
来模拟程序计数器,并使用 int
来模拟大多数其他东西......
操作非常简单:从 0(或预先确定的引导位置)启动程序计数器,然后启动一个循环,通过该指针获取指令,并将与该指令相关的任何操作应用于寄存器和内存。一个简单的实现将围绕一个巨大的 switch
语句,其中包括所有可能的指令代码。
正如我所说,您的模拟器不需要担心非法指令,因为汇编器不应该产生任何指令。如果程序(即主循环)遇到非法操作,您可能会停止它。
同样,您的模拟器不必担心范围、索引或大小溢出...这也是汇编器的问题,或者可能是链接器的问题,如果您有的话。
<小时/>更新:这里的一些提示:
关于emulation - 8051模拟器的制作方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1788840/
如何将 Windows Phone Emulator only Emulator 7 升级到 Emulator 8 我正在使用 Visual Studio 2010 Windows Phone 7 S
我是 WebStorm 和 React Native 的新手,在设置我的环境时遇到了一个错误,与我看到的其他帖子相比,我的环境显得独特。 客观的 我在 WebStorm 中设置了一个默认项目,我的目标
Android 模拟器目前不支持多播,但是我需要测试需要多播数据包的应用程序。我想在模拟器上做。 有没有办法在 Android Emulator 上接收多播数据包?我愿意编写一些代码作为 androi
这个问题在这里已经有了答案: Full emulation vs. full virtualization (9 个回答) 6年前关闭。 我看到它们是不同的东西,但我真的不知道为什么。 有人说:“模拟
每次我运行模拟器时,它在开始时都能正常运行,但几分钟后它就会崩溃,并给我这个错误: emulator process finished with exit code 1073740791 (0xC00
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我刚刚安装了 VS2015 Preview,然后它让我可以选择安装其他软件,包括 Android Emulator。不幸的是,公司网络在下载完成之前出现故障,因此安装失败,并且没有给我重试的选项。 在
当我运行我的应用程序代码时,我可以在控制台中看到以下条目: [2011-03-01 10:29:26 - mireader] Uploading mireader.apk onto device 'e
我刚刚安装了 VS 2015 RC 并打开了适用于 Android 的 VS 模拟器。我无法从此模拟器连接到互联网。我去了设置 - > WiFi,可以看到它已打开,但未显示为已连接到任何网络。 关闭w
我正在使用 Android Studio 2.3(最新)。直到昨天一切都很好并且工作正常,今天模拟器没有连接到数据网络。 到目前为止,我找不到任何解决方案。我的 Mac 在 Mac OS Sierra
我正在使用 android SDK 4.0.3,我正在尝试运行一个简单的程序,在该程序中,我尝试使用 Intent 从一个页面切换到另一个页面(通过将 intent 对象传递为:Intent inte
问题是 我得到“HAX 不工作并且模拟器在模拟模式下运行”,这是否与 Intel x86 Emulator Accelerator (HAXM) 安装和运行 avd 且 CPU 设置为 CPU Int
我正在用 Go 编写云函数并从 firestore 模拟器触发它们。如果我手动启动 firestore 模拟器,这会起作用: java -jar ~/.cache/firebase/emulator
我的 Nexus One 有: 设置包括“语音 识别器设置”列表中 “语音输入和输出设置”。 Google 搜索有麦克风 它旁边的按钮,所以当我触摸 它,一个对话框提示我说什么 我要搜索。 然而,在模
我最近安装了 VS 2015 RC,Android 模拟器似乎运行良好(速度非常快 :)),只是它无法连接到网络。根据 http://blogs.msdn.com/b/visualstudioalm/
Android 模拟器在使用 Google Play 商店时显示消息“您的设备与此版本不兼容”。 它适用于真实设备(或至少适用于我测试过的设备)。 这些是我的 list 权限:
这个问题已经有答案了: Error in launching AVD with AMD processor (19 个回答) 已关闭 4 年前。 我在 exteras 中丢失了 Intel 文件夹,并
这更像是 android studio 中的一个良性错误。每当我从 sleep 或 hibernate 状态唤醒计算机时,模拟器和 android studio 之间的连接不正确,我必须重新启动模拟器
我正在尝试使用路由来测试应用程序。我正在使用 Android Studio 4.0.1 和模拟器版本 30.0.26。当我播放一条路线时,它看起来像是播放第一个位置,然后在 Lat Lon 更改为路线
Visual Studio Emulator for Android (VSEA) 运行良好,直到我开始使用视频卡来支持超宽显示器。运行几分钟后,我不断收到以下错误: An OpenGL error
我是一名优秀的程序员,十分优秀!