jingkaimori 发表于 2024-6-27 16:03:15

Keil C51编译器的固有指令

_cror_为什么非得放字节数参数?C89语言可不支持编译期常量,结果编译出来一个循环。

另外,如果移位运算的右操作数是小常数(比如2),Keil会把移位编译成ADD A,A; 有人试过用循环移位代替加法实现移位吗?

C51 COMPILER V9.02   TEST                                                                  06/27/2024 15:58:48 PAGE 1   


C51 COMPILER V9.02, COMPILATION OF MODULE TEST
OBJECT MODULE PLACED IN test.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE test.c BROWSE DEBUG OBJECTEXTEND CODE

line level    source

   1          #include "stc89c52rc.h"
   2          #include "INTRINS.H"
   3          void main()
   4          {                        
   5   1            P2 = _cror_(P2, 1);
   6   1      
   7   1            P2 = _cror_(P2, 2);
   8   1      }
C51 COMPILER V9.02   TEST                                                                  06/27/2024 15:58:48 PAGE 2   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION main (BEGIN)
                                           ; SOURCE LINE # 3
                                           ; SOURCE LINE # 4
                                           ; SOURCE LINE # 5
0000 AFA0            MOV   R7,P2
0002 7801            MOV   R0,#01H
0004 EF                MOV   A,R7
0005 08                INC   R0
0006 8001            SJMP    ?C0003
0008         ?C0002:
0008 03                RR      A
0009         ?C0003:
0009 D8FD            DJNZ    R0,?C0002
000B F5A0            MOV   P2,A
                                           ; SOURCE LINE # 7
000D AFA0            MOV   R7,P2
000F 7802            MOV   R0,#02H
0011 EF                MOV   A,R7
0012 08                INC   R0
0013 8001            SJMP    ?C0005
0015         ?C0004:
0015 03                RR      A
0016         ?C0005:
0016 D8FD            DJNZ    R0,?C0004
0018 F5A0            MOV   P2,A
                                           ; SOURCE LINE # 8
001A 22                RET   
             ; FUNCTION main (END)



MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE      =   27    ----
   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)
页: [1]
查看完整版本: Keil C51编译器的固有指令