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]