由于最初的 8086 和 8088 没有非法指令的软件异常,因此在输入此类指令时它们的行为如何,例如“FF FF”(不是操作码)?它们是否会停转,是否会自行复位,可能会在其控制总线上发出特殊的循环指示?
2 回答
如果没有记错的话,英特尔的官方声明是他们都是 NOP。
实际上,至少有一些未定义的操作码确实作为产生结果的真实指令执行。例如,AAD 或 AAM 的第二个字节是 00001010。这将转换为十进制的 10。如果您执行的指令与其中一个字节具有相同的第一个字节(分别为 11010101 或 11010100),但将第二个字节更改为另一个值(例如 00000100),它将执行相同的基本操作,但在您的基础上指定(八进制表示 00000100)。
编辑:您似乎打算将您的问题变成几乎没有人能真正回答的问题。您首先询问未定义的操作码,然后将其限制为英特尔所说的未定义的那些子集,并且只想知道那些真正真正未定义的那些(根据某些定义显然只存在于您的脑海中)。
唯一似乎完全可以回答的问题是“ffff 做了什么?” 有一次我可能能够回答这个问题,但我只能说“显然没有什么值得纪念的”。
至于声称它不可能是正确的,您似乎误认为这是英特尔真正关心的事情。在大多数情况下,未记录的操作码就是:未记录的。他们付出了相当大的努力来记录当你遵循“规则”时事情会如何运作,但大多忽略了否则会发生什么。
从事情的声音来看,几乎所有能让您满意的是真正的 8088/8086,它仍然可以运行,您可以使用它进行测试。我祝你好运找到那个。
好吧,我们知道一些未定义的操作码做了什么。我的朋友 reenigne 或 Andrew Jenner 为我硬件测试了操作码 0x60-0x6F。原来它们只是 0x70-0x7F 的别名,或者条件跳转。
编辑:换句话说,它们可能不是 NOP,而经过测试的绝对不是 NOP。