- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ARM分析举例
ARM汇编语言是以段(section)为单位来组织源文件的。段是相对独立的、具有特定名称、不可分割的指令或者数据序列。段又可以分为代码段和数据段,代码段存放执行代码,数据段存放代码运行时需要用到的数据。一个ARM源程序至少需要一个代码段,大的程序可以包含多个代码段和数据段。 ARM汇编语言源程序经过汇编处理后生成一个可执行映像文件,它通常包括3部分:一个或多个代码段。代码段通常是只读的。0或多个包含初值的数据段。通常是可读/写的。0或多个不包含初值的数据段。初始化为0,通常是可读/写的。ARM汇编语言程序格式【例1】举例说明ARM汇编语言源程序的基本结构AREA Init , CODE, READONLY ENTRY Start LDR R0, =0x3FF5000 LDR R1, 0xFF STR R1, [R0] LDR R0, =0x3FF5008 LDR R1, 0x01 STR R1, [R0] ……END 在汇编语言程序中,用AREA伪指令定义一个段,并说明所定义段的相关属性,本例定义一个名为Init的代码段,属性为只读。 ENTRY伪指令标识程序的入口点,接下来是指令序列,程序的末尾是END伪指令,该伪指令告诉编译器源文件的结束,每一个汇编语言程序段都必须有一条END伪指令,指示代码段的结束。ARM汇编语言程序设【例1】两个32位数的相加,并将结果储存到存储器单元。解:两个32位数保存在内存Value1和Value2单元。先用伪指令LDR取出第一个操作数的地址,再通过间接寻址取出操作数。以后的操作数地址都是通过加法(加4)来取得,而不是通过伪指令LDR。这样的选择,使指令的执行会更快一些。最后用一条跳转指令结束程序。使用这段代码时,可以根据所使用的汇编环境,再行修改。 程序代码如下: AREA Add_2_32bits,CODE,READONLYENTRYMain LDR R0,=Value1 ;加载第一个操作数的地址LDR R1,[R0],#Ox4 ;第一个操作数存人R1,地址加4LDR R2,[R0],#0x4 ;第二个操作数存人R2,地址加4ADD R1,R1,R2 ;两个操作数的相加STR R1,[RO] ;保存结果Here B Here ;结束Valuel DCD 37E3C123 ;第一个操作数Value2 DCD 367402AA ;第二个操作数Result DCD 0 ;保存结果的单元END ;汇编结束【例2】将一个字节内的两个BCD码变为相应的ASCII码,并存入指定的存储单元。解:用DCB命令定义一个字节数,存放两个BCD码。先保存到Rl寄存器,将高4位右移到低4位,与0x30立即数进行逻辑或运算,转换为ASCII码,然后保存到R3寄存器。将R3左移8位,将已经转换后的ASCII码左移到高8位,再取出R1的低4位,转换为ASCII码后,和R3中已经保存的高8位ASCII码组合在一起。 程序代码如下:AREA BCD2ASCII,CODE,READONLY ENTRY Main LDR RO,=Valuel ;加载操作数的地址 LDR R1,[R0] ;加载两个要转换的BCD码 MOV R2,#Ox000F ;掩码存入R2 MOV R3,R1,LSR #0x4 ;高4位BCD码存入R3的低4位 ORR R3,#0x30 ;转换为ASCII码 MOV R3,R3,LSL #0x8 ;左移8位 AND R1, R1,R2 ; 取出R1的低4位ORR R1, #0x30 ;转换为ASCII码 ADD R1,R1,R3 ;两个ASCII码组合在一起 ADD R0,Ox4 ;Result单元的地址 STR R1,[R0] ;保存结果 Here B Here ;结束 Value DCB #0x59 ;要转换的两个BCD码 ALIGN ;字对齐 Result DCD 0 ;保存结果的单元 END 由于定义的数据是字节数(Value),为了保证字对齐,要使用ALIGN命令实现字对齐。字符’0’~’9’的ASCII码分别是0x30~0x39。一个4位的BCD码只要与0x30进行逻辑或运算(或者与0x30做加法),就转换为相应的ASCII码。【例3】统计一个字符串的长度。(统计以回车符为结束符的字符串长度) CR
原创力文档


文档评论(0)