【发布时间】:2016-04-29 20:10:10
【问题描述】:
我正在尝试编写一个小型 8086+ 汇编程序,可能只是实模式,并且可以满足大部分可能的指令。
x86 指令很复杂,需要复杂的表解决方案,这很好,但我想要更小/更简单的东西。
我的一个想法是从操作码开始,制作一组与实际机器指令更密切相关的助记符/寻址模式/寄存器。
这已经完成了吗?我在哪里可以阅读到它?我的直觉告诉我这一定是已经这样做了,但是我在网上找不到任何东西。
我已经研究过的事情:
AT&T语法:不能解决问题,还是需要复杂的 查表;最后和Intel语法基本一致。
CRASM512.ASM:一个很酷的 512 字节特技汇编程序。非常令人印象深刻,但是 不可用(并且不应该)。语法仍然基于 英特尔也是。
-
仅使用“同质编码”指令的一个子集。这是 我目前正在尝试什么,并使用一个更小、更简单的表 驱动方法比成熟的 x86 汇编器。
问题是我仍然需要检查无效指令,而且 x86 足够复杂,我只能使表驱动方法 简单一点,不简单。所以它是复杂度的 90% 结果的 10%,因为与实际交易相比,变化的主要是表格。
【问题讨论】:
-
8086 汇编器与大多数平台(和其他语言)相比很容易,那么您这样做的目标是什么?如果您只是想了解如何操作,那么我建议您构建一个 8086 汇编器的简化子集,然后继续扩展其功能,直到您拥有完整的 8086 汇编器。我能够用大约 1000 行 Python(大约 2008 年)编写一个 PIC16F 汇编器,并用大约 2500 行 C 语言(大约 2001 年)编写一个 80286 汇编器,所以这些都不大。您是否尝试在 8086 汇编器中实现此功能?即便如此,如果你把代码组织得很好,它应该是相当简单的。
-
是的,常规的 x86 汇编器是直接的(使用表驱动的方法),但已经完成了。我想让我的更小,同时仍然可用/有用,所以我正在寻找任何可以削减的角落。无论如何,看看 x86 指令与助记符,关于替代助记符集(等)的问题只是被问到了。
-
好的,所以你想更接近金属而不是......装配工?你知道它是裸机,对吧?它是数字指令编码的表示,它尽可能接近。也许您希望能够表示的示例有助于澄清这一点?
-
您的实际问题是什么?
-
没有表查找的汇编语言是机器语言。您至少需要在表格中查找指令助记符才能找到它们的操作码。