ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 марта
397904 Топик полностью
vmp (28.03.2013 16:26, просмотров: 268) ответил Vladimir Ljaschko на Да я статистику знаю, но тут повелся под общее настроение :)
Для поднятия общего настроения. Вот реальный пример бага компилятора. Техподдержка признала ошибку, в следуюшей версии она была исправлена. Сразу предупреждаю - история древняя. Исходник, Keil C51: #define C1 ((char code *)0x1FF4) extern char idata B1[128]; void Bug(void) { char idata *s; char code *p; s = B1; p = C1; do { *s = *p; p++; s++; } while (p != C1 + 4); } Листинг (обратите внимание на команду CJNE DPH,#01FH,?C0003)
C51 COMPILER V6.10  BUG                                                                    12/26/2000 10:59:48 PAGE 1   


C51 COMPILER V6.10, COMPILATION OF MODULE BUG
OBJECT MODULE PLACED IN .\Obj\Bug.obj
COMPILER INVOKED BY: C:\KEIL610A\C51\BIN\C51.EXE .\Bug.c ROM(COMPACT) OPTIMIZE(9,SIZE) REGFILE(.\Obj\mk.ORC) BROWSE ORDE
                    -R NOINTPROMOTE MODA2 DEBUG OBJECTEXTEND CODE PRINT(.\List\Bug.lst) OBJECT(.\Obj\Bug.obj) 

stmt level    source

   1          #define C1 ((char code *)0x1FF4)
   2          extern char idata B1[128];
   3          
   4          void Bug(void)
   5          {
   6   1       char idata *s;
   7   1       char code *p;
   8   1      
   9   1       s = B1;
  10   1       p = C1;
  11   1       do
  12   1        {
  13   2         *s = *p;
  14   2         p++;
  15   2         s++;
  16   2        } while (p != C1 + 4);
  17   1      }
  18          
C51 COMPILER V6.10  BUG                                                                    12/26/2000 10:59:48 PAGE 2   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION Bug (BEGIN)
                                           ; SOURCE LINE # 4
                                           ; SOURCE LINE # 5
                                           ; SOURCE LINE # 9
;---- Variable 's' assigned to Register 'R0' ----
0000 7800        E     MOV     R0,#LOW B1
                                           ; SOURCE LINE # 10
;---- Variable 'p' assigned to Register 'DPTR' ----
0002 901FF4            MOV     DPTR,#01FF4H
0005         ?C0003:
                                           ; SOURCE LINE # 12
                                           ; SOURCE LINE # 13
0005 E4                CLR     A
0006 93                MOVC    A,@A+DPTR
0007 F6                MOV     @R0,A
                                           ; SOURCE LINE # 14
0008 A3                INC     DPTR
                                           ; SOURCE LINE # 15
0009 08                INC     R0
                                           ; SOURCE LINE # 16
000A B81FF8            CJNE    DPH,#01FH,?C0003
000D B8F8F5            CJNE    DPL,#0F8H,?C0003
                                           ; SOURCE LINE # 17
0010 22                RET     
             ; FUNCTION Bug (END)



MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =     17    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)