试把如下c函数改写成汇编语言函数,第4章arm程序设计.ppt

第4章 ARM4学时;本章教学要求 ;4.1 ARM工程; 用汇编语言或C/C++语言编写的程序叫做源程序,对应的文件叫做源文件。;汇编语言源文件; ARM提供的开发工具Code Warrior for ARM中包含的编译器如下:; 除了 C 和 C++ 编译器,Code Warrior for ARM 开发工具还提供了汇编器 ARMASM。;文件扩展名; 各种源文件先由 编译器 和 汇编器将它们分别编译或汇编成汇编语言文件及 目标文件。;(1)生成与地址相关的代码,把所有文件连接成一个可执行文件;;4.2 ARM汇编语言程序设计; 在ARM(Thumb)汇编语言程序中,通常以 段 为单位来组织代码。段 是具有特定名称且功能相对独立的 指令或数据序列。; 以下是一个汇编语言程序段的基本结构:;4.2.2 分支程序设计;例1:编写一个分支程序段,如果寄存器 R5 中的数据等于 10,就把 R5 中的数据存入寄存器 R1;否则把 R5 中的数据分别存入寄存器 R0 和 R1。;1、普通分支程序设计(续);(1)用 条件指令 实现的分支程序段;例2:编写一个程序段,当寄存器 R1 中的数据大于 R2 中数据时,将 R2 中的数据加 10 存入寄存器 R1;否则将 R2 中数据加 5 存入寄存器 R1。;1、普通分支程序设计(续); CMP R1,R2 ADDHI R1,R2,#10 ADDLS R1,R2,#5;例3:编写一个程序段,判断寄存器R1中数据是否为 10、15、12、22。如果是,则将 R0 中的数据加 1;否则将 R0 设置为 0XF。;2、多分支(散转)程序设计(续); MOV R0,#0 TEQ R1,#10 TEQNE R1,#15 TEQNE R1,#12 TEQNE R1,#22 ADDEQ R0,R0,#1 MOVNE R0,#0XF; 当多分支程序的每个分支所对应的是一个程序段时,常常把各个分支程序段的首地址依次存放在一个叫做跳转地址表的存储区域,然后在程序的分支点处使用一个可以将跳转表中的目标地址传送到 PC 的指令来实现分支。; 一个具有 3 个分支的跳转地址表示意图如下:; MOV R0,N ;N为表项序号0~2 ADR R5,JPTAB LDR PC,[R5,R0,LSL #2]JPTAB ;跳转表 DCD FUN0 DCD FUN1 ECD FUN2FUN0 ….. ;分支FUN0的程序段

FUN1 ….. ;分支FUN1的程序段 FUN2 ….. ;分支FUN2的程序段;3、带ARM/Thumb状态切换的分支程序设计;3、带ARM/Thumb??态切换的分支程序设计(续); 下面是一段从 ARM 指令程序段跳转到 Thumb 指令程序的状态切换例程。; 下面是一段从 Thumb 指令程序段跳转到 ARM 指令程序的状态切换例程。;4.2.3 循环程序设计;DO-WHILE结构; 在汇编语言程序设计中,常用的是DO-UNTIL 结构循环程序。; LDR R1,=DATA_SRC LDR R0,=DATA_DST MOV R10,#10LOOP LDMIA R1!,{R2-R9} STMIA R0!,{R2-R9} SUBS R10,R10,#1 BNE LOOP;1、子程序的调用与返回; 在 ARM 汇编语言程序中,主程序一般通过 BL 指令来调用子程序。该指令在执行时完成如下操作:将子程序的返回地址存放在连接寄存器LR中,同时将程序计数器PC指向子程序的入口点。; 在调用子程序的同时,也可以使用 R0~R3 来进行 参数的传递 和从子程序返回 运算结果。; 使用 B 指令实现返回的子程序。;例6:一个使用 BL 指令调用子程序的汇编语言源程序的基本结构。; PR …… MOV PC,LR …… END;4.2.5 汇编程序访问全局 C 变量;具体访问方法如下:(续);4.2.5 汇编程序访问全局 C 变量(续); 各数据类型及其对应的LDR/STR指令如下。(续) ; 各数据类型及其对应的LDR/STR指令如下。(续) ;例、下面是一个汇编代码的函数,它引用了一

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值