0

让我们假设累加器包含 0AH 并给出以下指令。MOV D,A; XRA A; 我发现这条指令清除了累加器以及 D 寄存器。我通过使用“虚拟 8085”模拟器确认了这一点。为什么第二条指令也会清除 D 寄存器?

4

1 回答 1

4

好的,我查看了Virtual 8085 的源代码,正如我在评论中建议的那样,它确实看起来有问题。

它将寄存器表示为BitArray实例。或者更确切地说,每个寄存器都表示为一个对象,其bits成员是对 a 的引用BitArray

现在,作者模拟MOV只是简单地将一个寄存器bits指向另一个寄存器bits。假设你这样做MOV D,A;之后MOVD.bits就是现在指的BitArray一样A.bits
如果您随后执行按位逻辑运算,您将直接在 上进行操作A.bits,这也会影响,D.bits因为它们引用相同的BitArray. ADD如果您执行or ,则不会发生该错误SUB,因为它们以不同的方式实现并创建一个全新的BitArray而不是修改现有的。

在我看来,这MOV是以一种破碎的方式实现的,应该使用Clone,或者可能CopyTo不仅仅是=. 如果您想修复它,请在 github 上提交一个关于此的错误。


TL;DR:XRA A不清楚D。虚拟 8085 有问题。尝试联系它的作者让他修复这个错误,或者搜索一个不同的模拟器。

于 2016-10-26T08:35:41.310 回答