編译器对RW和ZI的处理.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
編译器对RW和ZI的处理

课题名称: 编译器对RW和ZI的处理 姓 名: 安 钢 学 号: 103229 一、 实验目的: C编译器在编译连接C程序时,一般是将程序分成代码段,初始化数据段,未初始化数据段,这三个段通常是在存储器中分开放置,但又有一些规律,即代码段放在一个位置,未初始化数据段是紧接着初始化数据段之后。本实验的目的主要就是为了验证编译器的这种处理方式。 二、 实验步骤 2.1实验程序设计 为了研究程序在储存器中存储位置的规律,设计了一个简单的函数如下,函数有如下特点,(1)为了便于跟踪反汇编,以说明问题更深层次的方面,main函数里使用了内嵌汇编,(2)对编译器设置了code地址和数据地址,具体设置如下图(3)设置了几个简单变量,例子简单但能够更深入的分析问题的本质。以上特点都是为了说清楚反汇编的处理。 上图重点在RO BASE=0X8000 RW BASE=0X10000 后面将会看到此设置的意义。 实验程序如下: #includestdio.h int SPACE , WI , LO=15 , WI1=6 , WI2=10 ; void main(void) { __asm { add WI,WI1,WI2 mul SPACE,LO,WI } // return(SPACE); } 如示,设置了未定义的SPACE , WI 和定义了的 LO=15 , WI1=6 , WI2=10 后面的反汇编将说明每一个变量在存储器中应存放的精确地址。 2.2 反汇编的处理 为了方便说明,主要分析放在代码的注释部分,结论性的分析将放在代码后面, ; 编译器自动的预先处理 ;注意 此处是从0始执行 对照上面所作设置。。。 __main [0xe28f8090] add r8,pc,#0x90 ; #0x8098 ;跳到 _region_table ;那里放了4个编译器系统设置的4个常量[0xe898000f] ldmia r8,{r0-r3} ;将4个量放入R0--R3,[0xe0800008] add r0,r0,r8 0000800c [0xe0811008] add r1,r1,r8[0xe0822008] add r2,r2,r8[0xe0833008] add r3,r3,r8[0xe240b001] sub r11,r0,#1 ;R11=R0--1 0000801c [0xe242c001] sub r12,r2,#1 ;R12=R2--1 _move_region [0xe1500001] cmp r0,r1 [0x0a00000e] beq _zero_region ;R0=R1时跳到_zero_region [0xe8b00070] ldmia r0!,{r4-r6} ;若R0!=R1 将R0指向的内容放入 ;r4-r6 同时R0指针更新 0000802c [0xe1540005] cmp r4,r5 ;若R4=R5,跳回到 _move_region[0x0afffffa] beq _move_region[0xe3140001] tst r4,#1 ;测试R4第0位是否为1 0000803

文档评论(0)

d47fv82b5hI + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档