С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Результаты на УКНЦ:
Скрытый текст
[свернуть]
Скрытый текст
[свернуть]
Что тут можно сказать? По всей видимости разработчики микрокода довольно хорошо промахнулись с байтовыми командами. Уже известно что в команде MOVB параметр dst сначала читается, а уже потом записывается. Судя по всему при адресации по счетчику команд (методы 27, 6Х, 7Х) при словных командах используется аргумент, прочитанный во время предвыборки, а в байтовых командах он снова читается. Весьма интересно услышать по этому поводу комментарии от Titus-а, но его в данный момент нет на форуме.
Кстати интересно посмотреть на CMPB, и CLR и CLRB.
Вот тест для CMPB: CMPB.SAV, а для однооперандных команд буду ещё делать отдельный тест с немного изменённым тестовым движком.
...
Скрытый текст
[свернуть]
В свете открывшихся обстоятельств весьма интересно, будут ли сильно отличаться по времени команды MOV @R1,R0 и MOV @PC,R0. Вроде бы аргумент будет прочитан по предвыборке, да и последовательность предвыборки не будет нарушена.
Да, в байтовых командах влияет только на способ адресации 27, на 6Х и 7Х не влияет, т.к. там индекс читается как словный аргумент.
После теста однооперандных команд я сделаю специальный тест MOVPC.SAV для команд типа:
Чтобы далеко не искать, можно будет добавить туда же и уже протестированные:Код:Mov R0, (PC) MovB R0, (PC) Mov (PC), R0 MovB (PC), R0 Mov (PC), (PC) MovB (PC), (PC) Mov (PC)+, (PC) MovB (PC)+, (PC) Mov (PC), (PC)+ MovB (PC), (PC)+
Код:Mov R0, (PC)+ MovB R0, (PC)+ Mov (PC)+, R0 MovB (PC)+, R0
Но даже такой точности достаточно, чтобы задаться несколькими вопросами.
Чем вызвано отличие таймингов следующих команд:
Из первого столбца однозначно следует, что чтение первого аргумента занимает в указанных командах строго одинаковое время.Код:R0 (R0) (R2)+ @(R2)+ -(R1) @-(R1) Addr (PC)+ @Tab(R0) Mov @(R2)+ 47 70 70 80 70 83 82 82 96 Mov Addr 47 66 66 82 66 82 80 80 96 MovB @(R2)+ 47 71 71 85 80 94 93 93 107 MovB Addr 47 80 80 93 80 93 85 85 106 Cmp @(R2)+ 47 60 60 80 66 82 82 70 96 Cmp Addr 47 66 66 80 66 80 80 66 94 CmpB @(R2)+ 47 60 60 80 66 82 82 82 96 CmpB Addr 47 66 66 80 66 80 80 80 94 Add @(R2)+ 47 72 72 85 80 94 93 93 107 Add Addr 47 79 79 93 79 93 85 85 106
Тогда как объяснить:
1. Почему Mov @(R2)+,(R2)+ выполняется медленнее, чем Mov nn(PC),(R2)+, но MovB @(R2)+,(R2)+ выполняется быстрее, чем MovB nn(PC),(R2)+, при том что у команд Cmp и CmpB таких отличий нет.
2. Почему команды Mov @(R2)+,(R0), MovB @(R2)+,(R0) и Add @(R2)+,(R0) почти не отличаются по продолжительности.
3. Почему команда Add @(R2)+,@(R2)+ выполняется значительно быстрее, чем Add @(R2)+,@-(R1), тогда как команды Add nn(PC),@(R2)+ и Add nn(PC),@-(R1) имеют одинаковую продолжительность ( играет роль использование одного и того же регистра и в источнике, и в приёмнике ? ).
...
P.S. Честно говоря - вручную переписывать числа из фоток довольно сложно ( иногда случаются ошибки и приходится постоянно перепроверять ).
Если перед запуском тестов загрузить монитор NC11SJ.SYS ( с любого носителя, не обязательно с HX ) и нажать в подключенном к COM-порту терминале кнопку [Лог] - результаты тестов сразу запишутся в текстовый файл на PC.
Последний раз редактировалось Patron; 23.02.2013 в 12:38.
Видно, что MovB выполняется с той же скоростью, что и Add, поэтому вопрос нужно ставить наоборот -
почему:
MOV (R2)+,(R0) выполняется на 10 тактов быстрее, чем BIS (R2)+,(R0) , но
MOV @(R2)+,(R0) выполняется только на один такт быстрее, чем BIS @(R2)+,(R0) , учитывая что
MOV (R2)+,R0 выполняется за то же время, что и BIS (R2)+,R0 , а
MOV @(R2)+,R0 выполняется за то же время, что и BIS @(R2)+,R0 !!!
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)