西华师范大学嵌入式测试题.docx
- 文档编号:15404614
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:11
- 大小:18.73KB
西华师范大学嵌入式测试题.docx
《西华师范大学嵌入式测试题.docx》由会员分享,可在线阅读,更多相关《西华师范大学嵌入式测试题.docx(11页珍藏版)》请在冰点文库上搜索。
西华师范大学嵌入式测试题
西华师范大学嵌入式测试题
一、填空题(每空2分,共24分)
1、ARM7采用的是三级流水技术,指令分为三个阶段执行取指、译码、执行。
2、ARM支持两个指令集,分别为ARM指令集、Thumb指令集,状态寄存器CPSR的IRQ、FIQ位反映了当前状态中断控制,状态寄存器CPSR的 T 位反映了处理器运行不同指令的当前状态
两种存储字数据,分别是大端格式小端格式
3、在用ARM汇编编程时,其寄存器有多个别名,通常PC是指R15、LR是指R14、SP是指R13。
4、计算机有CISC和RISC两种类型,以ARM微处理器为核心的计算机属于RISC类型,其指令长度为32位和16位支持字节,半字,字三种数据类型
二、指令题(每小题6分,共18分)
1、写一条ARM指令,完成操作R0=R1/16。
MOVR0,R1,LSR#4
2、实现了R0=[R1+R2*4]
ADDR0,R1,R2,LSL#2
3、对R0中的低8位清零,其他位保持不变
BICR0,R0,#0x000000FF
ANDR0,R0,#0xFFFFFF00
三、程序题(每小题10分,共40分)
1、实现1到100的累加,结果放到R3中
MOVR5,#99
MOVR3,#1
MOVR2,#2
LOOP:
ADDR3,R3,R2
ADDR2,R2,#1
SUBSR5,R5,#1
BNELOOP
2、写一段ARM汇编程序:
对地址0x1000开始的所有元素进行累加,直到碰上零值元素,结果放在r4中。
MOVR4,#0
MOVR0,#0x1000
LOOP:
LDRR1,[R0],#4
CMPR1,#0
BEQen
ADDR4,R4,R1
BNELOOP
enEND
3、有如下程序段,标注出每条指令的作用,并说明程序功能。
MOVR0,#0x3000
LDRR1,[R0]
LDRR2,[R0,#4]
CMPR1,R2
MOVGTR1,#1
MOVLTR1,#-1
MOVEQR1,#0
STRR1,[R0,#8]
4、地址0x21AB2000开始的15数据,分别与0xACB11100地址开始的15个字数据相减,记录大于零的个数存入R4,小于零的个数存入R5,等于零的个数存入R6.
MOVR4,#0
MOVR5,#0
MOVR6,#0
MOVR7,#15
MOVR0,#0x21AB2000
MOVR1,#0xACB11100
LOOP:
LDRR2,[R0]
LDRR3,[R1]
SUBSR8,R2,R3
ADDGTR4,R4,#1
ADDLTR5,R5,#1
ADDEQR6,R6,#1
SUBSR7,R7,#1
BNELOOP
用跳转比较R1,R2(R1>R2(R3-1))(R1 SU1: SUBR3,R3#1 MOVPC,LR SU2: R4,R4,#1 MOVPC,LR CMPR1,R2 BLGTSU1 BLLTSU2 END 或者 CMPR1,R2 SUBGTR3,R3,#1 SUBLTR4,R4,#1 四、简答题(每小题9,共18分) 1、R13—R15寄存器分别称为什么寄存器,各有何特殊用途? R13用作数据堆栈指针(SP),保证异常发生后程序的正常执行 R14称为链接寄存器(LR),它用于保存子程序的返回地址 R15是程序计数器(PC),从R15中读取的值正是处理器正要取指的地址 2、进入异常的处理方式及异常的返回? 进入异常: (1)将下一条指令地址存入相应的连接寄存器LR,以便程序在处理异常返回时能从正确的位置从新开始执行。 (2)将CPSR值复制到相应的SPSR中。 (3)根据异常类型,强制设置CPSR的运行模式位。 (4)强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。 退出异常: (1)将连接寄存器LR的值减去相应的偏移量后送到PC中。 (2)将SPSR复制回CPSR中。 (3)若在静茹异常处理时设置了中断禁止位,要在此清除。 3.ARM处理器的工作模式有哪几种? 答: 1)用户模式 2)快速中断模式 3)外部中断模式 4)管理模式 5)数据访问中止模式 6)系统模式 7)未定义指中止模式 4.Thumb指令与ARM指令性能比较,分别有什么优缺点。 答: Thumb代码所需的存储空间约为ARM代码的60%~70% Thumb代码使用的指令数比ARM代码多30%~40% 若使用32位的存储器,ARM代码比Thumb代码快约40% 若使用16位的存储器,Thumb代码比ARM代码快约40%~50% 在ARM代码相比较,使用Thumb代码,存储器的功耗会降低约30% 分类: ARM7系列ARM9 系列 ARM9E 系列 ARM10E 系列 ARM11系列 - Cortex 系列 - SecurCore 系列 2.地址0x2000开始的20数据,分别与0x1100比较,大于的乘2,小于乘3,等于乘4后存回原来的位置。 MOVR5,#20 MOVR2,#0x2000 MOVR4,#0x2000 LOOP: LDRR3,[R2],#4 CMPR3,#0x1100 MOVGTR3,R3,LSL,#1 ADDLTR3,R3,R3,LSL,#1 MOVEQR3,R3,LSL,#2 STRR3,[R4],#4 SUBSR,5,R5,#1 BNELOOP 3.写一段ARM汇编程序实现: 把以0x4000CB00地址开始10个32位数据减去以地址0x3000AC00地址开始的10个32位数据后,两组数据一对一互减后,比较与零的大小,记录非零的个数,存放到R8中 MOVR5,#10 MOVR8,#0 MOVR0,#0x4000CB00 MOVR1,#0x4000AC00 LOOP: LDRR2,[R0]#4 LDRR3,[R1]#4 CMPR2,R3 ADDNER8,R8,#1 SUBSR5,R5,#1 BNELOOP 4.编程实现: 把以0x1002AA10地址开始20个32位数据低5位清零后,把结果存放于以0x1022A230开始的地址空间 MOVR3,20 MOVR0,#0x1002AA10 MOVR1,#0x1022A230 LOOP: LDRR2,[R0]#4 BICR2,R2#0x0000001F/ANDR2,R2#0xFFFFFFF0 STRR2,[R1]#4 SUBSR3,R3,#1 BNELOOP END 5.用ARM汇编指令写出实现64位加法和64位减法的代码段,使用的寄存器请自行分配。 64位R1(高)R0(低) 64位R3(高)R2(低) 结果存放入R5,R4 加法: ADDSR4,R2,R0 ADCR5,R3,R1 减法: SUBSR4,R2,R0 SBCR5,R3,R1 6.使用LDR指令读取0x40003100上的数据,将数据加1,若结果小于10则使用STR指令把结果写回原地址,若结果大于等于10,则把0写回原地址。 然后再次读取0x40003100上的数据,将数据加1,判断结果是否小于10……周而复始循环 EQU 0x40003100 AREA Example2,CODE,READONLY ENTRY CODE32 START: LDR R1,=COUNT MOV R0,#0 STR R0,[R1] LOOP: LDR R1,=COUNT LDR R0,[R1] ADD R0,R0,#1 CMP R0,#10 MOVHS R0,#0 STR R0,[R1] B LOOP END 7.实现两个寄存器相加 AREA Example1,CODE,READONLY ENTRY CODE32 START: MOVR0,#0 MOVR1,#10 LOOP: BLADD_SUB BLOOP ADD_SUB: ADDSR0,R0,R1 MOVPL,LR END 7.定义一个全局数字变量count初始值为1,然后读取0xBC00AA00地址空间里的数据,把这些数据放入首地址0xCC001D00的空间中,当count的值等于10的时候,读取和存储结束,把字符串: “finish”存入变量STR中 打开IRQ和FIQ中断 MRSRO,CPSR ANDR0,R0,#0x3F MSRCPSR_C,R0 打开IRQ和FIQ中断开关 ;interruptcontroller ICMREQUOX40d00004 init_ICMREQUOX00000010 开启中断源,设置屏蔽寄存器ICMR; ldrr1,=ICMR ldrr2,=init_ICMR strr2,[r1] 在ICMR里,键盘中断位是第5位,设置1即可 ICMR[5]=1 ldrr11,=REG_ICPR ldrr4,[r11] movr5,#0x40000000 movr7,#0x5 handleidentifyloop andr6,r4,r5 cmpr6,#0x0 bneinterruptidentify movr5,r5,LSR#0x1 subr7,r7,#0x1 cmpr7,#0x0 bnehandleidentifyloop 由于OSTimer有4个定时器,所以这里假设只使用4号定时器,定义以下符号: osTimer_OSMR3EQU0x40a0000c osTimer_OSCREQU0x40a00010 osTimer_OSSREQU0x40a00014 osTimer_OIEREQU0x40a0001C int_ICPREQU0x40d00010 置定时时间,配置寄存器OSCR,OSMR3 ldrr1,=osTimer_OSCR ldrr2,=osTimer_OSMR3 ldrr0,[r1] addr0,r0,#0x100000 strr0,[r2] OSCR的值加上定时时间0x100000,存入OSMR3 开启4号定时器中断功能,配置寄存器OIER,OSSR ldrr1,=osTimer_OIER movr0,#0x8 strr0,[r1] ldrr10,=osTimer_OSSR ldrr0,[r10] strr0,[r10] 4号定时器中断事件是否发生。 ldrr11,=int_ICPR; ldrr4,[r11] movr5,#0x20000000 tstr4,r5 关闭4号定时中断 ldrr11,=osTimer_OIER ldrr4,[r11] andr4,r4,#07 strr4,[r11] ldrr11,=osTimer_OSSR ldrr4,[r11] orrr4,r4,#0x80 strr4,[r11] 变量赋值: LCLLLOOP LOOP: SET{TRUE}真 1.地址0x2000开始的20数据,分别与0x1100比较,大于的乘2,小于乘3,等于乘4后存回原来的位置。 2.写一段ARM汇编程序实现: 把以0x4000CB00地址开始10个32位数据减去以地址0x3000AC00地址开始的10个32位数据后,两组数据一对一互减后,比较与零的大小,记录非零的个数,存放到R8中 3编程实现: 把以0x1002AA10地址开始20个32位数据低5位清零后,把结果存放于以0x1022A230开始的地址空间 4用ARM汇编指令写出实现64位加法和64位减法的代码段,使用的寄存器请自行分配。 假定低32位数存放在r0和r1里面,高32位数存放在r2和r3里面。 5使用LDR指令读取0x40003100上的数据,将数据加1,若结果小于10则使用STR指令把结果写回原地址,若结果大于等于10,则把0写回原地址。 然后再次读取0x40003100上的数据,将数据加1,判断结果是否小于10……周而复始循环 6定义一个全局数字变量count初始值为1,然后读取0xBC00AA00地址空间里的数据,把这些数据放入首地址0xCC001D00的空间中,当count的值等于10的时候,读取和存储结束,把字符串: “finish”存入变量STR中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西华 师范大学 嵌入式 测试