В связи с тестом на специалисте нужно отметить, что измененный посттестовый (после iut) фрагмент в 8080exe7 не для всех компов годится. Он был введен для корректного тестирования продвинутых клонов ВМ80 (ВМ85, ВМ1) и нормально работает на векторе и его клонах, но на специалисте есть проблема с inx sp/dcx sp
Самый простой вариант - откатить изменение постестового фрагмента, т.е. после
В выложенном exe7 такКод:iut: ds 4 ; max 4 byte instruction under test ;#idb ld (spat),sp replaced with the following code ;#idb Must be very careful to preserve registers and flag ;#idb state resulting from the test. The temptation is to use the ;#idb stack - but that doesn't work because of the way the app ;#idb uses SP as a quick way of pointing to memory. ;#idb Bit of a code smell, but I can't think of an easier way.
А в исходном было такКод:;!!!{ shld SetHL1+1 pop h push psw xthl shld spat-2 lxi h,0 ; jc temp1 ;jump on the state of the C flag set in the test dad sp ;this code will clear the C flag (0 + nnnn = nc) ; jmp temp2 ;C flag is same state as before ;temp1: dad sp ;this code will clear the C flag (0 + nnnn = nc) ; stc ;C flage needs re-setting to preserve state ;temp2: shld spat ;#idb lxi sp,spat-2 ; push psw ; save other registers push b push d ; lhld temp SetHL1: lxi h,0 ;!!!} push h
Т.е. если планируется использовать 8080exe7 не на векторе или его клонах, то лучше вернуть посттестовый фрагмент к исходному виду. При этом выигрыш по скорости останется, но тестирование ВМ1 и ВМ85 будет некорректным, как и с оригинальным эксисайзером.Код:shld temp lxi h,0 jc temp1 ;jump on the state of the C flag set in the test dad sp ;this code will clear the C flag (0 + nnnn = nc) jmp temp2 ;C flag is same state as before temp1: dad sp ;this code will clear the C flag (0 + nnnn = nc) stc ;C flage needs re-setting to preserve state temp2: shld spat lhld temp ;#idb lxi sp,spat push psw ; save other registers push b push d push h




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