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