嵌入式系统原理及应用题目要求程序代码

上传人:汽*** 文档编号:493936849 上传时间:2023-06-07 格式:DOC 页数:16 大小:73KB
返回 下载 相关 举报
嵌入式系统原理及应用题目要求程序代码_第1页
第1页 / 共16页
嵌入式系统原理及应用题目要求程序代码_第2页
第2页 / 共16页
嵌入式系统原理及应用题目要求程序代码_第3页
第3页 / 共16页
嵌入式系统原理及应用题目要求程序代码_第4页
第4页 / 共16页
嵌入式系统原理及应用题目要求程序代码_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《嵌入式系统原理及应用题目要求程序代码》由会员分享,可在线阅读,更多相关《嵌入式系统原理及应用题目要求程序代码(16页珍藏版)》请在金锄头文库上搜索。

1、. .嵌入式系统原理及应用 作业题目作业1一、调试下面的程序,并答复以下问题。.global _start.text_start: LDR SP,=src LDMFD SP!,R0-R6 STMFD SP!,R0-R6 LDMFD SP!,R3 LDMFD SP!,R4 LDMFD SP!,R5 LDMFD SP!,R6 LDMFD SP!,R0 LDMFD SP!,R1 LDMFD SP!,R2 stop: b stop.ltorg src: .long 1,2,3,4,5,6,7.end问:该程序完成了什么功能.答:该程序完成的功能:先把数据区堆栈中的17这七个数据送给R0R0存放器,然后

2、又把存放器列表中的R0R7存入堆栈,然后又依次把堆栈中的17这七个数送给R3R6,R0R2,然后程序就完毕了,在取数和存数的过程中。堆栈指针sp由0x0000变到0x8030再到0x804c,然后到0x8030,然后依次加4,最后到0x804c;程序计数器R15PC由0x8000地址依次加4 。二、LDMFD,STMFD伪代码实现的原理。答:指令STMFD和LDMFD分析:根据ATPCS规那么,我们一般使用FDFull Descending类型的数据栈!所以经常使用的指令就有STMFD和LDMFD,通过ARM对于栈操作和批量Load/Store指令寻址方式,可以知道指令STMFD和LDMFD的

3、地址计算方法:STMFD指令的寻址方式为事后递减方式(DB)而DB寻址方式实际存地址为:start_address = Rn - (Number_Of_Set_Bits_In(register_list)*4)end_address = Rn - 4STM指令操作的伪代码: if ConditionPassed(cond) then address = start_address for i = 0 to 15 if register_listi = 1 Memoryaddress = Ri address = address + 4有上面两个伪代码可以得出 STMFD SP!,R0-R7,L

4、R 的伪代码如下: SP SP 94; address =SP;for i = 0 to 7 Memoryaddress = Ri; address = address + 4;Memoryaddress = LR;LDMFD指令的寻址方式为事后递增方式(IA)IA存的实际地址的伪代码start_address = Rnend_address = Rn + (Number_of_set_bits_in(register_list)*4) - 4LDM指令操作的伪代码(未考虑PC存放器): if ConditionPassed(cond) then address = start_address

5、 for i = 0 to 15 if register_listi = 1 Ri Memoryaddress,4 address = address + 4所以LDMFD SP!,R0-R7,PC ;恢复现场,异常处理返回伪代码是: address = SP; for i = 0 to 7 Ri = Memoryaddress ,4 address = address + 4; SP = address;作业2一、用移位操作完成R0*10运算。参考程序:.text.global _start_start:mov R0,*10mov R1,R0,LSL *3mov R2,R0,LSL *1ad

6、d R3,R1,R2stop: B stop.end二、数据缓冲池中有两组数据x和y,每组中有3个数据例如x:90,60,30,y:60,40,20,将x中的数据减去y中的数据,最后将两组数相减得到的结果送回到x中去!参考代码:.text.global _start_start: LDR SP,=x LDMFD SP!,R0-R2 LDMFD SP!,R3-R5 sub R2,R2,R5 Sub R1,R1,R4 Sub R0,R0,R3 STMFD SP!,R0-R2stop: b stop.ltorg x: .long 80,90,100 y: .long 10,20,30.end作业3R

7、0和R1的值,要求保存R0的低16位,保存R1的高16位状态,最后将这两个值组成一个新的数送给R3.参考代码:.text.global _start_start:LDR R0,=0x12345678LDR R1,=0x87654321ldr R2,=0xffffLDR R4,=0xffff0000AND R0,R0,R2AND R1,R1,R4ORR R3,R0,R1stop: B stop.end作业4在ARM GNU环境下用ARM汇编语言编程序实现参考代码:.text.global _start_start: LDR R0,=x LDR R1,=y LDR R2,R0 CMP R2,*0

8、BEQ ZERO BGT ZHENG BLT FUZERO: MOV R3,*0 STR R3,R1 B stopZHENG: mov R3,R2 STR R3,R1 B stopFU: mvn R3,R2 mov R4,*0x1 add R3,R3,R4 STR R3,R1 B stop stop: B stop.ltorg x: .long-10 y:.long 0作业5求20的阶乘:64位结果放在【R9:R8】中,R9放高32位,R放低32位思路:每轮乘法操作中,低32位R8乘以XR0后,结果的低32位放在R8中,高32位放在R9中;高32位R1乘以XR0后再加上R9,得到64位结果的高

9、32位,存入R9参考程序:.global _start.text_start:MOVR8 , *20低32位初始化为20MOV R9 , *0高位初始化为0SUBR0,R8,*1初始化计数器Loop:MOVR1 , R9暂存高位值UMULLR8 , R9 , R0 , R8R9:R8=R0*R8MLAR9 , R1 , R0 , R9R9=R1*R0+R9SUBSR0 , R0 , *1计数器递减BNELoop计数器不为0继续循环Stop:B stop.end二、a=R0,b=R1.while(ab) doif(ab) thena=a-belsea=b-a end ifend whileres

10、ult=a根据以上代码写出对应的汇编代码:参考代码:CMP R0,R1CMPNE R0,R1SubGT R0,R0,R1SubLTR0,R1,R0.end作业61.将下面的ADS环境下的程序代码改写成GUN环境下的程序代码。调试时使用F11 step into,注意和F10 step over的区别AREA Jump, CODE, READONLY num EQU 4; 函数地址表容的个数 ENTRY CODE32start LDR R0, =choice; R0指向存储区的choice单元 LDR R0, R0; 设置第一个参数:选择执行哪一个函数 MOV R1, *16; 设置第1个操作数

11、 MOV R2, *2; 设置第2个操作数 BL arithfunc; 调用子程序arithfuncstop MOV R0, *0x18; 程序完毕返回编译器调试环境 LDR R1, =0x20026 SWI 0x123456arithfunc CMP R0, *num ; 比较R0的值是否超过函数地址表的个数 MOVHS PC, LR ; 如果大于,那么就返回到标号stop处 ADR R3, JumpTable; 将函数地址表的地址作为基地址 LDR PC, R3, R0, LSL *2; 根据R0参数进入对应的子程序JumpTable; 函数地址表的入口基地址 DCD DoAdd; 加法子

12、程序 DCDDoSub; 减法子程序 DCDDoMul; 乘法子程序 DCDDoDiv; 除法子程序DoAdd ADD R0, R1, R2 ; R0 = R1 + R2 MOV PC, LR; 返回DoSub SUB R0,R1, R2 ; R0 = R1 - R2 MOV PC,LR; 返回DoMul MOV R0, R1, LSL R2 ; R0 = R1 R2 MOV PC, LR ; 返回 AREA NUM, DATA, READWRITEchoiceDCD3 ; 0:表示选择加法子程序 1:表示选择减法子程序; 2:表示选择乘法子程序 3:表示选择除法子程序 END参考程序:.equ num,4 函数地址表容的个数.text.global _start_start: LDR R0,=choiceR0指向存储区的choice单元LDR R0,R0设置第一个参数:选择执行哪一个函数 MOV R1,*16设置第1个操作数 MOV R2,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号