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