搜索
bottom↓
回复: 7

C语言反汇编问题

[复制链接]

出0入0汤圆

发表于 2012-2-12 14:47:18 | 显示全部楼层 |阅读模式
一段纯延时的C程序,KEIL编译后,查看汇编窗口,发现P0口参与了运算,百思不解,贴出来求大家赐教:
    17: void delay(unsigned char x)      
    18: {
    19:         int i,j;
    20:         for(i=0;i<x;i++)
C:0x0E30    E4       CLR      A
C:0x0E31    FD       MOV      R5,A
C:0x0E32    FC       MOV      R4,A
C:0x0E33    EF       MOV      A,R7
C:0x0E34    FB       MOV      R3,A
C:0x0E35    C3       CLR      C
C:0x0E36    ED       MOV      A,R5
C:0x0E37    9B       SUBB     A,R3
C:0x0E38    7480     MOV      A,#P0(0x80)
C:0x0E3A    F8       MOV      R0,A
C:0x0E3B    6C       XRL      A,R4
C:0x0E3C    98       SUBB     A,R0
C:0x0E3D    5015     JNC      C:0E54
    21:         {
    22:                 for(j=0;j<110;j++);      
C:0x0E3F    E4       CLR      A
C:0x0E40    FB       MOV      R3,A
C:0x0E41    FA       MOV      R2,A
C:0x0E42    0B       INC      R3
C:0x0E43    BB0001   CJNE     R3,#0x00,C:0E47
C:0x0E46    0A       INC      R2
C:0x0E47    EB       MOV      A,R3
C:0x0E48    646E     XRL      A,#0x6E
C:0x0E4A    4A       ORL      A,R2
C:0x0E4B    70F5     JNZ      C:0E42
    23:         }
C:0x0E4D    0D       INC      R5
C:0x0E4E    BD0001   CJNE     R5,#0x00,C:0E52
C:0x0E51    0C       INC      R4
C:0x0E52    80DF     SJMP     C:0E33
    24: }
    25:  
C:0x0E54    22       RET   

其中C:0x0E38    7480     MOV      A,#P0(0x80) 这一行,读取P0口状态到ACC,这是何意?实在不理解。 求高手指点,不胜感激。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2012-2-12 14:56:38 | 显示全部楼层
带#号的是立即数吧,跟P0内容没啥关系,相当于MOV A, #0x80吧,不玩51,随便发表下评论。

出0入0汤圆

 楼主| 发表于 2012-2-12 15:03:49 | 显示全部楼层
回复【1楼】lcofjp  卡尔夫
-----------------------------------------------------------------------
多谢指点!是这么回事!这编译器干嘛不直接写#0x80呢?因为0x80跟P0口地址重复了,就顺便用#P0表示了?

出0入0汤圆

发表于 2012-2-12 15:46:45 | 显示全部楼层
回复【2楼】huststi 亮子
-----------------------------------------------------------------------

是反编译器干的。

出0入0汤圆

发表于 2012-2-12 20:19:45 | 显示全部楼层
记号

出0入0汤圆

发表于 2012-2-15 17:33:39 | 显示全部楼层
......

出0入0汤圆

发表于 2012-2-15 22:57:20 | 显示全部楼层
P0口的特殊功能寄存器地址就是(0x80),for循环的语言好像都是用那个寄存器地址保存for循环的次数的。可能是一种c语言实现方式吧

出0入0汤圆

发表于 2012-2-26 13:45:47 | 显示全部楼层
P0 在51里面貌似就是80H 80H以上必须要间接
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-19 23:43

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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