文档详情

第九讲习题答案_ARM程序设计.ppt

发布:2017-05-29约4.87千字共14页下载文档
文本预览下载声明
作业 必做:9.2-9.5、 9.8、 9.15-9.18 选做:9.6、9.7、9.12、9.14 注意,除题目明确要求外,所有的程序均采用汇编语言编写 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 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 ;返回
显示全部
相似文档