Всем привет. Увы, не знаю, как вас, а меня все эти тесты вообще не приблизили к пониманию, как бы это все можно было бы сэмулировать. Но тут мне помог случай. Мне тоже удалось пронаблюдать девиации во флаге F3 на подопытном, даже несмотря на то, что процессор тактировался достаточно медленно. Процессор подключен к микроконтроллеру, который имитирует окружение, память, забирая и поставляя данные, и отправляя данные на компьютер, где я могу это все проанализировать с красивой расшифровкой. Увы, маркировки на процессоре нет, но это какой-то из старых, был в Спектруме 48К, Ленинград, наверное, самосбор, который лежит у меня с детства.
Интересной для меня показалась команда CP, поскольку не меняет регистр A, но, тем не менее, влияет на флаги, после нее могло найтись что-то интересненькое. Сначала немного потыкал ее, получил странное, например, при нулях в регистрах после SCF во флаге F3 я получил единицу, поэтому написал цикл:
После CP флаги F5 и F3 должны браться из аргумента, в моем случае это B, который у нас на первой итерации #00, затем изменяется от #FF до #01. Этот код выполнялся три раза, полный дамп каждого прогона сохранялся. В некоторых полученных значениях были обнаружены девиации. На следующий день я также запустил немного другой код, но на сей раз получил уже более стабильные и ожидаемые результаты, хоть и не без нюансов, но без явных девиаций. Вернул прошлый код, но девиаций также больше не было, и не представляю, как можно было бы повторить те результаты. Сделал два прогона. Все результаты свел в табличку, здесь значения регистра флагов для каждого из значений B:Код:LD A,0 LD B,0 LOOP: CP B SCF PUSH BC; чтобы в дампе был виден B POP DE PUSH AF; чтобы в дампе были видны флаги POP DE DJNZ LOOP
Здесь * означает, что значение ожидалось 1, но было 9 в предыдущий день, а на следующий день стало 1,Код:\ | 00 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | A0 | B0 | C0 | D0 | E0 | F0 | ---+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----| 00 | 4* | 8* | A* | A* | 8* | 8* | A* | A* | 8D | 0* | 2* | 2* | 0* | 0* | 2* | 2* | 01 | 8* | 8* | A* | A* | 8* | 8* | A* | A* | 0* | 0* | 2* | 2* | 0* | 0* | 2* | 2* | 02 | 8* | 8* | A* | A* | 8* | 8* | A* | A* | 0* | 0* | 2* | 2* | 0* | 0* | 2* | 2* | 03 | 8* | 8* | A* | A* | 8* | 8* | A* | A* | 0* | 0* | 2* | 2* | 0# | 0* | 2* | 2% | 04 | 8* | 8# | A* | A* | 8* | 8* | A* | A* | 0* | 0% | 2* | 2# | 0# | 0% | 2* | 2% | 05 | 8# | 8# | A# | A# | 8* | 8* | A* | A* | 0* | 0% | 2* | 2# | 0# | 0% | 2% | 2% | 06 | 8# | 8# | A* | A# | 8* | 8* | A* | A* | 0* | 0% | 2# | 21 | 0# | 01 | 2% | 21 | 07 | 8# | 8# | A# | A# | 8* | 8* | A* | A* | 0* | 01 | 21 | 21 | 01 | 01 | 2% | 21 | 08 | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 | 09 | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 | 0A | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 | 0B | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 | 0C | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 | 0D | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 | 0E | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 | 0F | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 |
# означает, что в предыдущий день, когда была обнаружена нестабильность, значение иногда было 1, иногда 9, отличалось в каждом дампе,
% означает то же, только сравнение было с другим сохраненным дампом. Вообще, все собранные дампы субъективно охарактеризовал бы, как стабильный в одну сторону, стабильный в другую сторону, и наименее стабильный.
Думаю, из такой таблички вполне можно выявить некую систему, сделать какие-то выводы, лучше понять, как такое поведение можно было бы проэмулировать, если есть такое желание. Предполагаю, что и F5 может аналогичным образом проявлять нестабильность, это только в моем случае он был стабильным. Наверное, может быть нестабильность и с установленными значениями флагов, но в моем случае это было связано именно с нулевыми их ожидаемыми значениями, где они такими должны были быть.
Кроме того, хотел бы обратить ваше внимание на значение для B=#80, где флаги выставились как #8D, т.е. вместе с флагом переполнения F3 также раз за разом оказывается установленным, хотя в B соответствующий бит сброшен, в результате вычитания бит сброшен, в регистре A соответствующий бит сброшен. Тем не менее, это значение стабильно повторяется во всех моих собранных дампах, 5 из 5. Хотя в чуть другом коде получил таки #85. Для B=#00 я получал как #49 - все три дампа в предыдущий день, так и #41 - в обоих дампах на следующий день.




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
