ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
4 декабря
1427052 Топик полностью
AlexBi (16.04.2024 15:13, просмотров: 146) ответил pavel2000 на А можно предметнее, на что именно вы жалуетесь? что наблюдаете и как по-вашему должно быть? К примеру, при простых умножениях я вполне вижу в листинге наличие инструкции MUL.
У меня MUL получается только при u8*u8 все остальные варианты приводят к вызову библиотечной функции умножения. Вот пример: 

Мне кажется тут компилятор мог бы догадаться, что выполняется u16*u8 для которго надо всего два вызова MUL. Да даже u16*u16 делается через 3 MUL, вызов библиотечной функции выглядит не оправданным из-за накладных расходов на подготовку исходных данных и получения результата

   1          unsigned int x1;
   2          unsigned int x2;
   3          unsigned long s;
   4          unsigned char c1;
   5          
   6          void f()
   7          {
   8   1        s+=x1*c1 + x2*20u;
   9   1      }
C51 COMPILER V9.60.0.0   TEST                                                              04/16/2024 15:10:23 PAGE 2   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION f (BEGIN)
                                           ; SOURCE LINE # 6
                                           ; SOURCE LINE # 7
                                           ; SOURCE LINE # 8
0000 AF00        R     MOV     R7,c1
0002 7E00              MOV     R6,#00H
0004 AC00        R     MOV     R4,x1
0006 AD00        R     MOV     R5,x1+01H
0008 120000      E     LCALL   ?C?IMUL
000B AA06              MOV     R2,AR6
000D AB07              MOV     R3,AR7
000F AE00        R     MOV     R6,x2
0011 AF00        R     MOV     R7,x2+01H
0013 7C00              MOV     R4,#00H
0015 7D14              MOV     R5,#014H
0017 120000      E     LCALL   ?C?IMUL
001A EB                MOV     A,R3
001B 2F                ADD     A,R7
001C FF                MOV     R7,A
001D EA                MOV     A,R2
001E 3E                ADDC    A,R6
001F FE                MOV     R6,A
0020 E4                CLR     A
0021 FD                MOV     R5,A
0022 E500        R     MOV     A,s+03H
0024 2F                ADD     A,R7
0025 F500        R     MOV     s+03H,A
0027 E500        R     MOV     A,s+02H
0029 3E                ADDC    A,R6
002A F500        R     MOV     s+02H,A
002C ED                MOV     A,R5
002D 3500        R     ADDC    A,s+01H
002F F500        R     MOV     s+01H,A
0031 EC                MOV     A,R4
0032 3500        R     ADDC    A,s
0034 F500        R     MOV     s,A
                                           ; SOURCE LINE # 9
0036 22                RET