讓我們假設累加器包含0AH,並給出以下指令。 MOV D,A; XRA A; 我發現這條指令清除累加器以及D寄存器。 我通過使用'虛擬8085'模擬器證實了這一點。 爲什麼secon指令也清除D寄存器?爲什麼XRA A也會清除其他寄存器?
0
A
回答
4
好吧,我看着Virtual 8085's source code,它確實看起來像我在我的評論中建議的車。
它表示寄存器爲BitArray
實例。或者更確切地說,每個寄存器被表示爲具有bits
成員的對象,該成員是對BitArray
的引用。
現在,作者做什麼來模擬MOV
是simply point one register's bits
to another register's bits
。假設你做了MOV D,A
;之後,MOV
,D.bits
現在指的是與A.bits
相同的BitArray
。
如果您然後執行按位邏輯操作,則直接在A.bits
上操作,這也會影響D.bits
,因爲它們指的是相同的BitArray
。如果你這樣做,這個錯誤不會發生ADD
或SUB
,因爲它們以不同的方式實施並創建全新的BitArray
而不是修改現有的。
在我看來,MOV
是以破碎的方式實施,應使用Clone
,或可能CopyTo
,而不是=
。如果你想看看它修復了,請在github上提出一個關於這個問題的bug。
TL; DR:XRA A
不明確D
。虛擬8085是越野車。嘗試聯繫其作者,讓他修復該錯誤,或搜索不同的模擬器。
相關問題
- 1. PIC 16F628A清除其寄存器?
- 2. 爲什麼24位寄存器?
- 3. 爲什麼只有四個寄存器?
- 4. 在我的瀏覽器中清除cookies會話也破壞了爲什麼?
- 5. 爲什麼datatable.Clear,清除其他數據表呢?
- 6. 帶有其他功能的敲除寄存器插入元素
- 7. 爲什麼「overflow:hidden」會清除浮點數?
- 8. 如何在MIPS中將浮點寄存器設置爲0(或清除其值)。
- 9. 當我清除集合時,它會清除其他集合的內容以及爲什麼?
- 10. 寄存器和臨時寄存器有什麼區別?
- 11. 爲什麼建立普通布爾MRSW寄存器需要2個寄存器?
- 12. 爲什麼使用臨時寄存器將值傳遞給段寄存器?
- 13. 清除cloudflare上的緩存是否也清除瀏覽器上的緩存?
- 14. 大會部分寄存器
- 15. 爲什麼在清除緩存時會話結束
- 16. 爲什麼我的ASP.NET緩存會自行清除?
- 17. 爲什麼編譯器將變量存儲在寄存器中?
- 18. 爲什麼要清除我的哈希,也清除哈希數組?
- 19. Xcode鏈接器問題 - 其他LD標記不會清除
- 20. Clear()方法清除其它變量也
- 21. Angular JS Filter:爲什麼這會刪除其他LIKE選項?
- 22. 爲什麼「#define A」會干擾「namespace A {}」?
- 23. 爲什麼preg_replace清除變音器?
- 24. 爲什麼在瀏覽器關閉後會話不能清除?
- 25. 爲什麼Powershell不清除?
- 26. 什麼是ESP和EBP寄存器?
- 27. 什麼是專用寄存器?
- 28. 什麼寄存器指向堆?
- 29. PIC寄存器(%ebx)是做什麼的?
- 30. 爲什麼內存塊沒有被垃圾回收器清除?
對不起,這沒有任何意義。 'MOV D,A'會將'D'設置爲'0AH'。然後'XRA A'會將'A'設置爲零,並且淨效應將是'D = 0AH,A = 0'。 –
虛擬8085似乎是越野車。如果您將一個或多個其他寄存器「轉」成「A」,然後對「A」執行按位邏輯(和,或xor)操作,則最終也會修改其他寄存器。 – Michael