_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)
复制代码
|