注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

III = Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

C51生成汇编代码剖析(4)  

2017-10-31 17:15:04|  分类: C51(C&ASM) |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
关于指针(2)
前面分析了char类型的指针,由于char类型只占一个字节,因此相对来说容易很多,对于其它类型的指针,又有什么表现呢?
测试了一下int类型,例如:
int* p=0x30;
*p=0x1234;
这两句会产生的汇编代码和前面char的有点差异。
int在C51中是两个字节,在赋值前,将0x1234的高位写入A,低位写入B,然后调用了一个C?ISTPTR的函数,表现形式和char里面调用的C?CSTPTR是类似的。
再看看float类型。
先给出一个浮点数123.456的表示:
C51生成汇编代码剖析(4) - Lemniscate - 信息 灵感 创新
可见123.456的十六进制表示是42 F6 E9 79。
C代码:
    float* p=0x30;
    *p=123.456;
执行的结果是:
C51生成汇编代码剖析(4) - Lemniscate - 信息 灵感 创新
  显然结果是一致的,检查一下汇编代码,看看是如何实现的。
C51生成汇编代码剖析(4) - Lemniscate - 信息 灵感 创新
调用了一个C?LSTKPTR的函数,不过在调用之前,并没有立即数123.456的信息。
跟踪进去,可以发现,又调用到了一个C?LSTKIDATA的函数:
C51生成汇编代码剖析(4) - Lemniscate - 信息 灵感 创新
可以观察到是和DPTR相关的,仔细看就知道,实际上是把代码段的数据移动到了存储器中:
观察ROM中的值:
C51生成汇编代码剖析(4) - Lemniscate - 信息 灵感 创新
由此可见,浮点数常量,实际上在编译的时候,已经生成了对应的字节,并放在了ROM中,有点类似code类型的数据,而不是像整型数据,是通过指令产生的。
  评论这张
 
阅读(88)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018