С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Прогнал тесты, сделал их несколько: холостой ход (пустой цикл), копирование командой MOV (R2)+,(R3)+, чтение командой TST (R2)+, запись командой CLR (R2)+. Соответственно варианты по одной команде в цикле, 8 команд, 64 команды, 512 команд. Измерялось время в тиках сетевого таймера. В УКНЦ частота равна 50,08 Гц. В первых двух тестах цикл обеспечивался командами SOB, для третьего пришлось перейти на DEC/BNE, а для четвёртого на DEC/BEQ/JMP.
Результаты в тиках сетевого таймера/секундах:
Холостой ход MOV (R2)+,(R3)+ TST (R2)+ CLR (R2)+ 1 команда 809/16,15 2130/42,53 1545/30,85 1550/30,95 8 команд 103/2,06 1398/27,92 933/18,63 1004/20,05 64 команды 17/0,34 1320/26,36 866/17,29 941/18,79 512 команд 6/0,12 1308/26,12 855/17,07 930/18,57
По самому лучшему показателю скорость копирования 8 Мб составляет 313,62 кб/сек. Наиболее плохо у цикла с одной командой, который обычно и используется - 192,61 кб/сек. Уже в цикле из 8 команд ситуация значительно лучше - 293,41 кб/сек.
Radon17(04.07.2023)
Если нам на УКНЦ нужно быстро скопировать килобайт, то просто тупо пишем килобайт кода, 512 инструкций MOV (R1)+,(R2)+. А на РС используем для этого 512 инструкций MOVSW, которыe, однако, только на полкило. На Амиге можно 256 MOVE.L (A1)+,(A2)+ на полкило, а вот на Z80 уже получится целых 2 кило, как минимум. А некоторые для 8080 и Z80 4 К кода в таких ситуациях пишут.
Вы правы, отдельные MOVSW медленнее. В теме про PDP стал думать по пидипишному.Внес коррекции, по 8088 данные были завышены, а по 80286 занижены. К сожалению, в некоторых источниках тайминги указывают неточно. Сейчас брал из фирменных мануалов.
EDIT: для 8088 брал 9+25n для копии n слов, для 80286 - 6+4n.
Последний раз редактировалось litwr; 07.07.2023 в 19:11.
В официальной документации по 80286 команда MOVSW исполняется за 5 тактов, а REP MOVSW за 5+4*CX тактов. Так что REP MOVSW должна быть быстрее, когда CX>5. Интересен вариант, когда адрес нечётный. В этом случае будут читаться и записываться два байта вместо одного слова.
А ещё вы написали, что брали тайминги из официальный мануалов, соответственно вопрос - а реальный тест был?
Последний раз редактировалось Alex_K; 07.07.2023 в 19:26.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)