嵌入式复习思考题答案
更新时间:2024-05-24 11:00:01 阅读量: 综合文库 文档下载
- 嵌入式实验思考推荐度:
- 相关推荐
嵌入式复习思考题及答案(1)
一、简答题
1、ARM9有哪几种工作模式?其中哪几种属于特权模式?哪几种属于几种异常模式?
答:有用户、系统、管理、中止、未定义、普通中断、快速中断。系统、管理、中止、未定义、普通中断、快速中断属于特权模式。管理、中止、未定义、普通中断、快速中断属于几种异常模式。 2、ARM9有哪2种工作状态?各自特点?实现状态切换指令的是什么?
答:ARM状态与Thumb状态。ARM状态指令是32位;Thumb状态指令是16位。切换指令是BX。 3、简述ARM9在不同工作模式下寄存器分布情况(用图表说明)。R13、R14、R15的固定用途; CPRS和SPRS名称及功能。
答:R13常作为堆栈指针SP、R14作为链接寄存器LR、R15作为程序计数器PC。CPRS是当前程序状态寄存器,包含条件代码、中断禁止位、当前处理器模式以及其他状态和控制信息。SPRS是程序状态保存寄存器,异常出现时用于保存CPRS的状态。
4、ARM920T处理器有哪7种异常?各自对应中断矢量、优先级如何排列? 复位 未定义指令 软件中断 指令预取中止 数据中止 普通中断 快速中断 0x00000000 0x00000004 0x00000008 0x0000000C 0x00000010 0x00000018 0x0000001C 1 6 6 5 2 4 3 5、ARM处理器对异常中断的响应及返回过程。 答:响应过程:1、将引起异常指令的下一条指令的地址保存到新的异常工作模式的R14中;
2、将CPSR的内容保存到将要执行的异常中断对应的SPSR中; 3、根据异常类型CPSR中的运行模式位;
4、将相应的矢量地址赋值给PC,开始执行异常处理程序。还可设中断禁止位。
返回过程: 1、将连接寄存器LR的值减去相应的偏移量后送到PC中;
2、将SPSR内容送回CPSR;
3、若在进入异常处理时设置了中断禁止位,要在此清除。
6、写出ARM9支持的寻址方式,各举一例。 答:略
7、写出指令LDRB/LDRH/LDR的区别。
答:LDRB将内存单元一个字节的数据扩展到32位装载到寄存器;
LDRH将内存单元半字(两个字节)的数据扩展到32位装载到寄存器; LDR 将内存单元一个字的数据装载到寄存器。
8、写出LDM、STM指令用于数据块拷贝时对应的4种后缀以及用于堆栈操作对应的4种后缀。 解释各自的执行过程。
答:数据块拷贝后缀:IA操作后指针增; DA操作后指针减; IB操作前指针增; DB操作前指针减。
堆栈操作后缀: FD满递减;ED空递减;FA满递增;EA空递增。
9、ARM和Thumb两种状态下各自堆栈的生成方式有何不同?写出各自对应的入栈、出栈指令。 答:ARM堆栈有4种生成方式满递增、满递减、空递增、空递减;
入栈指令:STM(FD\\ED\\FA\\EA 4种后缀之一) 出栈指令:LDM(FD\\ED\\FA\\EA 4种后缀之一) Thumb堆栈采用满递减的生成方式。 入栈指令:PUSH . 出栈指令:POP 10、写出条件代码NE、EQ的判断条件。 答:NE Z=0 (不相等); EQ Z=1 (相等)
11、B、BL及BX指令有何区别?写出无嵌套的子程序调用及返回指令。 答:B是简单的转移指令,实现向目的地址的简单的跳转;
BL是带链接的转移指令,将转移指令后的下一条指令抵制保存到链接寄存器LR; BX是带状态切换的转移指令。
子程序调用指令:BL DELAY; 无嵌套的子程序返回指令 MOV PC,LR 12、举例说明伪指令LDR的2个主要用途。
答:LDR R1, =0X30408020 加载32位立即数到寄存器; LDR R1, =SRC 加载一个地址值到寄存器。 13、什么是ATPCS?它有哪些规则?
答:ATPCS是ARM程序和Thumb程序中子程序调用的基本规则,使单独编译的C程序和汇编程序能相互调用。有数据栈规则、参数传递规则和子程序调用时寄存器使用规则。
二、程序阅读题(重点检测寻址方式及指令)
1、在每条语句后做简要注释,写出程序执行后R0、R1 、R2和C的值。 (知识点:算术、逻辑操作、影响标志位S)
AREA SUMM , CODE , READONLY X EQU 8 Y EQU 16 ENTRY
MOV R0 , #X MOV R1 , #Y ADD R2 , R0 , R1 AND R0 , R2 , #0X0F MOV R2 , #Y
ADDS R2 , R0 , R1 , LSR #1
STOP B STOP 程序执行后R0=8、R1=16 、R2=16和C=0。 END
2、分析程序,按照加“//”语句的要求解答。(知识点:堆栈操作) AREA STK , CODE , READONLY ENTRY
MOV R1 , #0X30 MOV R2 , #0X08
MOV SP , #0X400
STMFD SP!,{R1,R2};// ① 写出语句执行后SP和R2的值 SP= 0X3F8 ;R2=0X08
LDMFD SP!,{R5,R6};// ② 写出语句执行后SP、R5和R6的值 SP=0X400;R5=0X30;R6=0X08 LOOP B LOOP END
3、写出程序实现的功能,并在每条语句后做简要注释。 (知识点:寻址方式[Rn] , #immediate、循环体、数据拷贝)
AREA armcopy CODE, READONLY num EQU 16 ENTRY ADR r1, src ADR r3, dst
MOV r2, #num 程序实现了将内存src 处的16个字拷贝到dst处。 copy LDR R0 , [r1] , #4 STR R0 , [r3] , #4
SUBS r2 , r2 , #1 BNE copy
stop B stop
src DCD 1,2,3,4,1,2,3,4,5,6,1,2,3,4,1,2 dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
END
4、分析程序功能,并写出加序号语句的作用。 (知识点:状态切换)
程序实现了从ARM状态切换到Thumb状态实现4个字节数据的拷贝。
AREA thcopy, CODE, READONLY ENTRY
CODE32 ;伪操作,指示以下指令是32位的ARM指令 LDR r1, =src LDR r3, =dst MOV r2, #4
LDR r4, =copy+1 ;① ;伪指令,装载跳转地址以及最后的状态切换位 BX r4 ;② ;从ARM状态跳转到Thumb状态
CODE16 ;③ ;伪操作,指示以下指令是16位的Thumb指令 copy
LDRB r0,[r1] ADD r1,#1
STRB r0,[r3] ADD r3,#1
SUB r2, r2, #1 BNE copy stop B stop
src DCB 1,2,3,4 dst DCB 0,0,0,0 END
5、写出下列程序执行后r0的值,并写出加序号语句的作用。(知识点:跳转表、子程序的调用返回)
AREA Jump, CODE, READONLY ENTRY
Start MOV r0, #0 MOV r1, #8 MOV r2, #5
BL count ;① 调用子程序 stop B stop
count CMP r0, #2 ;② r0与2比较
MOVHS pc, lr ;③ 如果r0大于2则子程序返回 LDR r3, =JumpTable ;④ 否则将跳转表首地址送r3 LDR pc, [r3,r0,LSL#2] ;⑤ 将r3 +r0×4(即跳转地址)送pc JumpTable
DCD DoAdd DCD DoSub DoAdd
ADD r0, r1, r2
MOV pc, lr ;⑥子程序返回 DoSub
SUB r0, r1, r2
MOV pc,lr 程序执行后r0=13 END
6、分析下面这段混合程序回答: (1)、程序实现了什么功能? 在C中调用汇编函数实现字符串拷贝 (2)C语言程序和汇编代码如何传递参数? dststr R0; srcstr R1 (3)在每条语句后做简要注释。
(知识点:C和汇编混合编程框架、ATPCS规则、字节拷贝)
extern void strcpy(char *d,const char *s) ;声明外部函数 int main(void) {
const char *srcstr=”abcdefg”;
char *dststr=”jjjjjjjjjj”;
strcopy(dststr,srcstr) ;调用汇编函数(通过R0和R1实现参数传递) printf(“%s\\n%\\n”,srcstr,dststr); return(0); }
AREA SCopy, CODE, READONLY
EXPORT strcopy ;声明一个全局标号,可以在其他文件中引用
strcopy LDRB r2, [r1],#1 STRB r2, [r0],#1
CMP r2, #0 BNE strcpy
MOV pc,lr ;子程序返回 END
三、设计题
(掌握汇编及C语言简单程序设计。如数据拷贝、跳转表、混合编程。) 1、用汇编语言编写数据块或字符拷贝程序(如阅读程序题)。 2、用汇编语言编写含有2个分支的跳转表实现程序跳转。R2寄存器中存放的是跳转表的基地址。 R1中用于选择不同的子程序,子程序可以任意命名。R1的不同值选择不同的子程序。并做简单注释。(如阅读程序题)
3、编写一段C语言与汇编语言的混合编程代码,在C语言程序中调用汇编语言代码,完成字符串的拷贝。(如阅读程序题)
4、在汇编子程序中调用一个计算a、b、c三者之和的C语言函数add3 ( ) ,计算i+2i+3i, 假设i就在R0中。(要求说明汇编程序和C函数之间如何进行参数传递)。
int add3 (int a,int b,int c ) {
return a+b+c; }
AREA SADD, CODE, READONLY
IMPORT add3 ;声明该标号在其他源文件中,要在当前文件中引用
ADD R1, R0,R0 ADD R2, R0,R1
BL add3 ;调用子程序 END
正在阅读:
嵌入式复习思考题答案05-24
在人民政府公众网站开通仪式上的讲话10-08
健康教育培训记录12-10
职业素质培养中的体验式教学创新与实践价值07-19
马克思经典著作选读考试题06-03
九年级物理全册 21.3 广播、电视和移动通信教案(新版)新人教版11-24
年收入最优工资计算器-个税计算器08-10
上海汽车集团股份有限公司外部环境分析04-04
- 清真菜谱
- 我国国民经济和社会发展十二五规划纲要(全文)
- 高三物理机械振动和机械波复习2
- 浙江省公路山岭隧道机械化装备应用指导手册 doc - 图文
- 2018届高三数学文科二轮复习:专题检测(九) 导数的简单应用
- 2015年上海市公务员录用考试《行政职业能力测验》试卷(B类)
- 七年级道德与法制下册
- 大班户外游戏教案
- 病虫害预警 - 图文
- 某养鱼场为了提高经营管理水平
- 汉中市勉县尧柏余热汽机规程 10
- 烹饪试卷
- 事业单位考试公共基础知识专项分类题库训练
- 语文:第2课 走一步,再走一步 课堂导学案(人教版 七上)
- 天汉使用手册
- 人教版小学三年级数学下册教学计划
- 房地产销售管理完全操作手册122页
- 2009年评审通过具有中学高级教师专业技术资格人员名单...
- 《15秋公共关系学》作业1
- 2017最新版监理公司三标一体管理手册
- 思考题
- 嵌入式
- 复习
- 答案
- 《C语言程序设计》第10章在线测试
- 继电保护课程设计
- 七年级语文第一学期教学工作总结(精选2篇)
- 儿科学 第七版 第十章 感染性疾病
- 乙丙橡胶说明书
- 李璟“南唐中主”写词不输李煜 梦碎祖国统一大业
- 河南师范大学双学位及第二专业毕业论文格式(文科)
- 物流管理部绩效考核指标 - 图文
- 关于风景名胜区管理体制的思考 - 何明讲解
- 专业论文写作选修尔雅答案
- 基于消费群体研究的奢侈品营销策略分析---以爱马仕为例
- 重庆市巴蜀中学2017-2018学年高二上学期期末考试历史试题
- 金融衍生工具的课后习题
- 2017年天津市普通高中学业水平考试化学真题及答案
- 中国股票市场研究数据库使用指南
- 在公司干部调整集体谈话会上的讲话
- 网络公司员工个人发展计划
- 温旭民老师在青岛答疑汇总
- 四级词汇
- 2018届高考语文(通用版)专题复习(十八)成语+病句+语言应用