习题答案ARM程序设计.ppt_第1页
习题答案ARM程序设计.ppt_第2页
习题答案ARM程序设计.ppt_第3页
习题答案ARM程序设计.ppt_第4页
习题答案ARM程序设计.ppt_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微处理器系统结构与嵌入式系统设计,第九章 ARM程序设计,作业,必做:9.2-9.5、 9.8、 9.15-9.18 选做:9.6、9.7、9.12、9.14 注意,除题目明确要求外,所有的程序均采用汇编语言编写,9.2 汇编语言和C语言相比,各具有什么特点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。汇编语言依赖于机器硬件,不同CPU提供的汇编指令可能有很大的不同,因此汇编源程序几乎不具有移植性;但汇编语言程序主要优点是速度快、效率高,更能发挥机器硬件的长处; C语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种语言。缺点是占用资源较多,需要先将源程序通过编译成机器语言才能执行,执行效率不如汇编高。,3/52,9.3 试用汇编代码完成如下C语言代码完成的功能。 int gcd(int a, int b) while (a != b) if (a b) a = a-b; else b = b-a; return a; 汇编实现: AREA Sub1,CODE,READ ONLY EXPORT Sub1 CMP R0, R1 ;(R0)=a,(R1)=b MOVEQ PC,LR ;相等则返回 SUBGT R0, R0, R1 ;带符号数大于条件码为GT,无符号数为HI SUBLT R1, R1, R0 ;带符号数小于条件码为LT,无符号数为LO LDR R2,=a ;R2指向a STR R0,R2 ;更新变量a MOV PC,LR ;返回 END,9.4 宏的定义如下面的代码所示: MICRO $aa example $bb, $cc, $dd $aa CMP $cc, #0 B$dd $bb MEND 若在汇编程序中需要调用上面定义的宏example,则其程序代码如下。试写出下面程序被汇编后,宏展开后的结果。 lable example next, R3, NE next 宏展开后的代码为: label CMP R3 , #0 BNE next,9.5 编写一个程序段,当寄存器R3中数据大于R2中的数据时,将R2中的数据加10存入寄存器R3;否则将R2中的数据加100存入寄存器R3,并把这个程序段定义成一个代码段。 AREA ADDITION,CODE,READONLY ENTRY Loop CMP R3 , R2 BHI GREATER ADD R3 , R2 , #100 B STOP GREATER ADD R3 , R2 , #10 STOP END,9.6编写一个程序段,判断寄存器R5中数据是否为12, 18, 22, 29, 45或67,如果是则将R0中数据加1,否则将R0设置为0xF,并把这个程序段定义成一个代码段 AREA Comp,CODE,READONLY ENTRY LDR R0,=dat ;寄存器R0指向DataT表中的数据列表dat MOV R1, #7 ; dat表中的数据个数 MOV R2, #0 ;标志寄存器(R2)=0则R5中数据不在dat表中 SUB R0, R0, #4 ;调整比较指针 Loop SUB R1, R1, #1 ;调整比较次数 BEQ Handle CMP R5,R0,#4! BNE Loop MOVEQ R2,#1 Handle CMP R2,#0 ADDNE R0, R0, #1 MOVEQ R0,#0xF Stop AREA DataT,DATA,READWRITE dat DCD 12,18,22,29,45,67;需要比较的数据列表 END,8/52,9.8 试编写一个循环程序,实现从0开始10个偶数的累加。 AREA Foud,CODE,READONLY ENTRY MOV R0,#0 ;存放累加和 MOV R1,#0 ;存放加数 MOV R2,#9 ;累加次数 Loop ADD R1, R1, #2 ADD R0, R0, R1 SUB R2, R2, #1 ;调整累加次数 BNE Loop Stop END,9.12 试把如下C函数改写成汇编语言函数。 (1) int SubXY(int x, int y) return x-y; (2) void SubXY(int x, int y, int z) z = x-y; (1) AREA SubXY ,CODE,READONLY EXPORT SubXY SUB R0,R0,R1 ;结果通过R0返回 MOV PC,LR ;返回 END (2) AREA SubXY ,CODE,READONLY EXPORT SubXY SUB R2,R0,R1 LDR R3,=z ;R3执行变量z STR R2,R3 ;更新变量z MOV PC,LR ;返回 END,9.14 把如下汇编语言函数改写成C函数。 CMP R0, #1 CMPNE R1, #1 ADDEQ R2, R3, R4 C函数为: void mydo(int a, int b, int c, int d, int e) ; (R0)=a,(R1)=b,(R2)=c ; (R3)=d, R4)=e if (a!=1) if (b= =1) c=d+e; ,9.15 阅读程序,说明如下程序完成的功能。 llsearch CMP R0, #0 LDRNEB R2, R0 CMPNE R1, R2 LDRNE R0, R0, #4 BNE llsearch MOV PC, LR 该程序功能为: 若R00,则将R0指向的字节数据读入R2; 若R00且R1R2,则将R0+4指向的双字数据存入R0中; 循环,直至R0=R1退出子程序。,9.16 阅读程序,说明如下程序完成的功能。 strcmp LDRB R2, R0, #1 LDRB R3, R1, #1 CMP R2, #0 CMPNE R3, #0 BEQ return CMP R2, R3 BEQ strcmp return SUB R0, R2, R3 MOV PC, LR 程序功能为: R0指向数据串S1(的前一个字节单元),R1指向数据串S2(的前一个字节单元);依次比较字符串S1、S2中的字符,直至任一字符串结束;将S1,S2第一个不同字符(或最后一个字符)的差存入R0并返回;,9.17 阅读程序,说明如下程序完成的功能。 CMP R0, #maxindex LDRLO PC, PC, R0, LSL #2 B IndexOutOfRange DCD Handler0 DCD Handler1 DCD Handler2 DCD Handler3 程序功能为: 实现子程序散转:若R0在有效范围内(小于#maxindex)则跳转到Hander03所指的子程序之一。,9.18 阅读程序,说明如下程序完成的功能。 loop LDMIA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论