Assembly 为什么XRA也会清除其他寄存器?

Assembly 为什么XRA也会清除其他寄存器?,assembly,8085,Assembly,8085,假设累加器包含0AH,并给出以下说明。 MOV D,A; XRA A; 我发现这条指令清除累加器和D寄存器。 我用“虚拟8085”模拟器证实了这一点。 为什么secon指令也会清除D寄存器?好的,我看了一下,它确实像我在评论中建议的那样有问题 它将寄存器表示为位数组实例。或者更确切地说,每个寄存器都表示为具有位成员的对象,该成员是对位数组的引用 现在,作者所做的模拟MOV的工作是。假设你做了movd,A;在这之后,MOV,D.bits现在指的是与A.bits相同的bitary 如果执行逐位逻辑操

假设累加器包含0AH,并给出以下说明。 MOV D,A; XRA A; 我发现这条指令清除累加器和D寄存器。 我用“虚拟8085”模拟器证实了这一点。 为什么secon指令也会清除D寄存器?

好的,我看了一下,它确实像我在评论中建议的那样有问题

它将寄存器表示为
位数组
实例。或者更确切地说,每个寄存器都表示为具有
成员的对象,该成员是对
位数组的引用

现在,作者所做的模拟
MOV
的工作是。假设你做了
movd,A
;在这之后,
MOV
D.bits
现在指的是与
A.bits
相同的
bitary
如果执行逐位逻辑操作,则直接对
a.bits
进行操作,这也会影响
D.bits
,因为它们引用相同的
位数组。如果执行了
ADD
SUB
等操作,则不会发生此错误,因为它们以不同的方式实现,并创建全新的
位数组,而不是修改现有的位数组

在我看来,
MOV
的实现方式不正确,应该使用
Clone
,或者可能使用
CopyTo
,而不仅仅是
=
。如果您希望看到它得到修复,请在github上提交一个关于此问题的bug


TL;DR:
XRA A
未清除
D
。虚拟8085是有车的。试着联系它的作者,让他修复这个bug,或者搜索一个不同的模拟器。

好的,我看了,它确实像我在评论中建议的那样看起来有bug

它将寄存器表示为
位数组
实例。或者更确切地说,每个寄存器都表示为具有
成员的对象,该成员是对
位数组的引用

现在,作者所做的模拟
MOV
的工作是。假设你做了
movd,A
;在这之后,
MOV
D.bits
现在指的是与
A.bits
相同的
bitary
如果执行逐位逻辑操作,则直接对
a.bits
进行操作,这也会影响
D.bits
,因为它们引用相同的
位数组。如果执行了
ADD
SUB
等操作,则不会发生此错误,因为它们以不同的方式实现,并创建全新的
位数组,而不是修改现有的位数组

在我看来,
MOV
的实现方式不正确,应该使用
Clone
,或者可能使用
CopyTo
,而不仅仅是
=
。如果您希望看到它得到修复,请在github上提交一个关于此问题的bug



TL;DR:
XRA A
未清除
D
。虚拟8085是有车的。试着联系它的作者,让他修复错误,或者搜索其他模拟器。

对不起,这没有意义
MOV D,A
D
设置为
0AH
。然后,
XRA
A
设置为零,净效应将是
D=0AH,A=0
。虚拟8085似乎有缺陷。如果您将
MOV
A
插入一个或多个其他寄存器,然后对
A
执行位逻辑(and、or、xor)操作,则最终也会修改这些其他寄存器。对不起,这没有意义
MOV D,A
D
设置为
0AH
。然后,
XRA
A
设置为零,净效应将是
D=0AH,A=0
。虚拟8085似乎有缺陷。如果将
MOV
A
插入一个或多个其他寄存器,然后对
A
执行位逻辑(and、or、xor)操作,则最终也会修改这些其他寄存器。