习题答案ARM程序设计.ppt

上传人:xin****828 文档编号:15502532 上传时间:2020-08-13 格式:PPT 页数:14 大小:218KB
返回 下载 相关 举报
习题答案ARM程序设计.ppt_第1页
第1页 / 共14页
习题答案ARM程序设计.ppt_第2页
第2页 / 共14页
习题答案ARM程序设计.ppt_第3页
第3页 / 共14页
点击查看更多>>
资源描述
微处理器系统结构与嵌入式系统设计,第九章 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 STRR0,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 CMPR3 , R2 BHIGREATER ADDR3 , R2 , #100 BSTOP GREATER ADD R3 , R2 , #10 STOP END,9.6编写一个程序段,判断寄存器R5中数据是否为12, 18, 22, 29, 45或67,如果是则将R0中数据加1,否则将R0设置为0 xF,并把这个程序段定义成一个代码段 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! BNELoop MOVEQ R2,#1 Handle CMP R2,#0 ADDNE R0, R0, #1 MOVEQ R0,#0 xF 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;存放加数 MOVR2,#9;累加次数 Loop ADD R1,R1,#2 ADD R0,R0,R1 SUBR2,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 LDRR3,=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 R12!, (R0-R11) STMIA R13!, (R0-R11) CMP R12, R14 BLO loop 程序功能为: 将R12开始向大地址方向所指的12个数据压入向上生成的堆栈(R13开始向大地址方向所指的12个单元)中;比较R12和R14的值,若R12小于R14则循环,否则退出程序;,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!