让我们假设累加器包含 0AH 并给出以下指令。MOV D,A; XRA A; 我发现这条指令清除了累加器以及 D 寄存器。我通过使用“虚拟 8085”模拟器确认了这一点。为什么第二条指令也会清除 D 寄存器?
1 回答
4
好的,我查看了Virtual 8085 的源代码,正如我在评论中建议的那样,它确实看起来有问题。
它将寄存器表示为BitArray实例。或者更确切地说,每个寄存器都表示为一个对象,其bits成员是对 a 的引用BitArray。
现在,作者模拟MOV的只是简单地将一个寄存器bits指向另一个寄存器bits。假设你这样做MOV D,A;之后MOV,D.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 回答