c51 похоже еще нет...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено O.L. 18 сентября 2003 г. 17:39
В ответ на: По поводу вчерашнего разговора про PIC и AVR. Предлагаю для сравнения функцию. Впрочем, очень интересно посмотреть на MSP и x51. отправлено Bill 18 сентября 2003 г. 08:49

а вот как у маленьких Сигналов это выглядит. Уровень оптимизации 8 :)

вызываем:
66: test = mean(ttt,10);
67:
C:0x0274 7B00 MOV R3,#0x00
C:0x0276 7A00 MOV R2,#0x00
C:0x0278 7925 MOV R1,#0x25
C:0x027A 7D0A MOV R5,#0x0A
C:0x027C 7C00 MOV R4,#0x00
C:0x027E 120549 LCALL mean(C:0549)
C:0x0281 8E10 MOV test(0x10),R6
C:0x0283 8F11 MOV 0x11,R7

работаем:
171: int mean(int *ap, unsigned count)
C:0x0549 8B3D MOV 0x3D,R3
C:0x054B 8A3E MOV 0x3E,R2
C:0x054D 893F MOV 0x3F,R1
C:0x054F 8C40 MOV 0x40,R4
C:0x0551 8D41 MOV 0x41,R5
172: {
173: unsigned _cnt = count; // Сохранить число данных
C:0x0553 854042 MOV 0x42,0x40
C:0x0556 854143 MOV 0x43,0x41
174: long sum = 0; // Обнулить сумму
C:0x0559 E4 CLR A
C:0x055A F547 MOV 0x47,A
C:0x055C F546 MOV 0x46,A
C:0x055E F545 MOV 0x45,A
C:0x0560 F544 MOV 0x44,A
175: do { // Суммирование
176: sum += *ap++; //
C:0x0562 AB3D MOV R3,0x3D
C:0x0564 E53F MOV A,0x3F
C:0x0566 F9 MOV R1,A
C:0x0567 2402 ADD A,#0x02
C:0x0569 F53F MOV 0x3F,A
C:0x056B E53E MOV A,0x3E
C:0x056D FA MOV R2,A
C:0x056E 3400 ADDC A,#0x00
C:0x0570 F53E MOV 0x3E,A
C:0x0572 120157 LCALL C?ILDPTR(C:0157)
C:0x0575 FF MOV R7,A
C:0x0576 AEF0 MOV R6,B(0xF0)
C:0x0578 EE MOV A,R6
C:0x0579 33 RLC A
C:0x057A 95E0 SUBB A,ACC(0xE0)
C:0x057C FD MOV R5,A
C:0x057D FC MOV R4,A
C:0x057E E547 MOV A,0x47
C:0x0580 2F ADD A,R7
C:0x0581 F547 MOV 0x47,A
C:0x0583 E546 MOV A,0x46
C:0x0585 3E ADDC A,R6
C:0x0586 F546 MOV 0x46,A
C:0x0588 E545 MOV A,0x45
C:0x058A 3D ADDC A,R5
C:0x058B F545 MOV 0x45,A
C:0x058D E544 MOV A,0x44
C:0x058F 3C ADDC A,R4
C:0x0590 F544 MOV 0x44,A
177: } //
178: while (--count); //
C:0x0592 E541 MOV A,0x41
C:0x0594 1541 DEC 0x41
C:0x0596 7002 JNZ C:059A
C:0x0598 1540 DEC 0x40
C:0x059A 14 DEC A
C:0x059B 4540 ORL A,0x40
C:0x059D 70C3 JNZ C:0562
179: return sum / _cnt; // Вернуть среднее значение
C:0x059F AE42 MOV R6,0x42
C:0x05A1 AF43 MOV R7,0x43
C:0x05A3 AB07 MOV R3,0x07
C:0x05A5 AA06 MOV R2,0x06
C:0x05A7 F9 MOV R1,A
C:0x05A8 F8 MOV R0,A
C:0x05A9 AF47 MOV R7,0x47
C:0x05AB AE46 MOV R6,0x46
C:0x05AD AD45 MOV R5,0x45
C:0x05AF AC44 MOV R4,0x44
C:0x05B1 120608 LCALL C?SLDIV(C:0608)
180: }
C:0x05B4 22 RET

C?ILDPTR(C:0157) и C?SLDIV(C:0608) не покажу. Пухлые они, по понятным причинам :).

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru