找回密码
 立即注册
查看: 249|回复: 0

Keil C51编译器的固有指令

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:30
  • 最近打卡:2024-08-22 11:09:57

4

主题

4

回帖

219

积分

中级会员

积分
219
发表于 2024-6-27 16:03:15 | 显示全部楼层 |阅读模式
_cror_为什么非得放字节数参数?C89语言可不支持编译期常量,结果编译出来一个循环。

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

  1. C51 COMPILER V9.02   TEST                                                                  06/27/2024 15:58:48 PAGE 1   
  2. C51 COMPILER V9.02, COMPILATION OF MODULE TEST
  3. OBJECT MODULE PLACED IN test.OBJ
  4. COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE test.c BROWSE DEBUG OBJECTEXTEND CODE
  5. line level    source
  6.    1          #include "stc89c52rc.h"
  7.    2          #include "INTRINS.H"
  8.    3          void main()
  9.    4          {                        
  10.    5   1              P2 = _cror_(P2, 1);
  11.    6   1      
  12.    7   1              P2 = _cror_(P2, 2);
  13.    8   1      }
  14. C51 COMPILER V9.02   TEST                                                                  06/27/2024 15:58:48 PAGE 2   
  15. ASSEMBLY LISTING OF GENERATED OBJECT CODE
  16.              ; FUNCTION main (BEGIN)
  17.                                            ; SOURCE LINE # 3
  18.                                            ; SOURCE LINE # 4
  19.                                            ; SOURCE LINE # 5
  20. 0000 AFA0              MOV     R7,P2
  21. 0002 7801              MOV     R0,#01H
  22. 0004 EF                MOV     A,R7
  23. 0005 08                INC     R0
  24. 0006 8001              SJMP    ?C0003
  25. 0008         ?C0002:
  26. 0008 03                RR      A
  27. 0009         ?C0003:
  28. 0009 D8FD              DJNZ    R0,?C0002
  29. 000B F5A0              MOV     P2,A
  30.                                            ; SOURCE LINE # 7
  31. 000D AFA0              MOV     R7,P2
  32. 000F 7802              MOV     R0,#02H
  33. 0011 EF                MOV     A,R7
  34. 0012 08                INC     R0
  35. 0013 8001              SJMP    ?C0005
  36. 0015         ?C0004:
  37. 0015 03                RR      A
  38. 0016         ?C0005:
  39. 0016 D8FD              DJNZ    R0,?C0004
  40. 0018 F5A0              MOV     P2,A
  41.                                            ; SOURCE LINE # 8
  42. 001A 22                RET     
  43.              ; FUNCTION main (END)
  44. MODULE INFORMATION:   STATIC OVERLAYABLE
  45.    CODE SIZE        =     27    ----
  46.    CONSTANT SIZE    =   ----    ----
  47.    XDATA SIZE       =   ----    ----
  48.    PDATA SIZE       =   ----    ----
  49.    DATA SIZE        =   ----    ----
  50.    IDATA SIZE       =   ----    ----
  51.    BIT SIZE         =   ----    ----
  52. END OF MODULE INFORMATION.
  53. C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)
复制代码
打倒Keil私扩!打倒Unix暴政!自由属于光荣的中国51人!
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 06:10 , Processed in 0.177060 second(s), 46 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表