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

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

Отправлено ShiphT 29 июня 2003 г. 09:17
В ответ на: To All. Ув. коллеги. Большая просьба к пользователям X51, PIC и MSP430. отправлено Bill 28 июня 2003 г. 22:35

На самом деле Elektronik правильно заметил. 8-ми и 16-ти разрядные контроллеры в операциях с int сравнивать бессмысленно.

MSP430 IAR v1.26, 2.10 любая оптимизация:
12 char Bits1(unsigned int word)
13 {
\ 0000 4E43 MOV.B #0,R14
14 char count = 0;
\ 0002 0C93 CMP #0,R12
\ 0004 0524 JEQ (?0002)
\ 0006 ?0000:
15 if (word)
16 do{
\ 0006 5E53 ADD.B #1,R14
17 ++count;
18 }
\ 0008 0D4C MOV R12,R13
\ 000A 3D53 ADD #65535,R13
\ 000C 0CFD AND R13,R12
\ 000E FB23 JNE (?0000)
\ 0010 ?0002:
19 while (word &= word-1);
\ 0010 4C4E MOV.B R14,R12
20 return count;
\ 0012 3041 RET
----------------------------------------------------------------------------
AVR IAR v 2.28 оптимизация выключена:

10 char Bits1(unsigned int word)
11 {
12 char count = 0;
\ __nearfunc char Bits1(unsigned int);
\ Bits1:
\ 00000000 E020 LDI R18,0
13 if (word)
\ 00000002 2F30 MOV R19,R16
\ 00000004 2B31 OR R19,R17
\ 00000006 F059 BREQ ??Bits1_0
14 do{
15 ++count;
\ ??Bits1_1:
\ 00000008 9523 INC R18
16 }
17 while (word &= word-1);
\ 0000000A 2F40 MOV R20,R16
\ 0000000C 2F51 MOV R21,R17
\ 0000000E 5041 SUBI R20,1
\ 00000010 4050 SBCI R21,0
\ 00000012 2304 AND R16,R20
\ 00000014 2315 AND R17,R21
\ 00000016 2F40 MOV R20,R16
\ 00000018 2F51 MOV R21,R17
\ 0000001A 2B45 OR R20,R21
\ 0000001C F7A9 BRNE ??Bits1_1
18 return count;
\ ??Bits1_0:
\ 0000001E 2F02 MOV R16,R18
\ 00000020 9508 RET
19 }

-----------------------------------------------------------------------------
Он же но оптимизация по размеру full
10 char Bits1(unsigned int word)
11 {
12 char count = 0;
\ __nearfunc char Bits1(unsigned int);
\ Bits1:
\ 00000000 E020 LDI R18,0
13 if (word)
\ 00000002 2F30 MOV R19,R16
\ 00000004 2B31 OR R19,R17
\ 00000006 F051 BREQ ??Bits1_0
14 do{
15 ++count;
\ ??Bits1_1:
\ 00000008 9523 INC R18
16 }
17 while (word &= word-1);
\ 0000000A 2F40 MOV R20,R16
\ 0000000C 2F51 MOV R21,R17
\ 0000000E 5041 SUBI R20,1
\ 00000010 4050 SBCI R21,0
\ 00000012 2304 AND R16,R20
\ 00000014 2315 AND R17,R21
\ 00000016 2F30 MOV R19,R16
\ 00000018 2B31 OR R19,R17
\ 0000001A F7B1 BRNE ??Bits1_1
18 return count;
\ ??Bits1_0:
\ 0000001C 2F02 MOV R16,R18
\ 0000001E 9508 RET
19 }


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

Ответы



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

E-mail: info@telesys.ru