嵌入式系统设计与开发马文华课后答案.doc_第1页
嵌入式系统设计与开发马文华课后答案.doc_第2页
嵌入式系统设计与开发马文华课后答案.doc_第3页
嵌入式系统设计与开发马文华课后答案.doc_第4页
嵌入式系统设计与开发马文华课后答案.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章一.ARM处理器有什么特点?ARM处理器的三大特点是:耗电少功能强、16位/32位双指令集和合作伙伴众多。1、体积小、低功耗、低成本、高性能;2、支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件;3、大量使用寄存器,指令执行速度更快;4、大多数数据操作都在寄存器中完成;5、寻址方式灵活简单,执行效率高;6、指令长度固定。二.ARM的那个寄存器作为PC使用?哪个作为LR使用ARM的寄存器,全部共有37个32位长的寄存器。但ARM核心同时最多只可以有18个同时执行的寄存器:包含了16个通用寄存器和2个状态寄存器,16个通用寄存器中包含了3个专用寄存器,R13、R14和R15。R13 用作堆栈指针 SPR15用做程序计数器PC,R14用做子程序链接寄存器LR。三.ARM有几种运行模式?那些具有特权?如何改变处理器的模式?ARM有7中工作模式:用户模式、快速中断模式、外部中断模式、管理模式、数据访问中止模式、未定义指令中止模式、系统模式。除了用户模式以外,其余所有6种模式称之为特权模式,权限比用户模式高,其中特权模式中除去系统模式外的5种模式称之为异常模式,常用于处理中断或异常,以及需要访问受保护的系统资源等情况。处理器模式可以通过控制进行切换,也可以通过外部中断或异常处理过程进行切换。大多数的用户程序运行在用户模式下,这时,应用程序不能访问一些受操作系统保护的系统,应用程序也不能直接进行处理器模式切换。当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处理中进行处理器模式的切换。四.ARM有几种异常?其异常处理方式和x86有什么不同?1)复位(Reset)异常(管理模式);2)未定义指令(undefined instruction)异常(未定义模式);3)软件中断(SWI)异常(管理模式);4)指令预取中止(Prefech Abort)异常(中止模式);5)数据访问中止(Data Abort)(中止模式);6)快速中断请求(FIQ)(FIQ模式);7)外部中断请求(IRQ)(IRQ模式)。机制一样:申请中断、相应中断、中断处理、中断返回由于硬件不一样,细节上有很大区别,比如ARM的中断向量表:ARM:Vectors LDR PC, Reset_Addr ;0x00000000复位LDR PC, Undef_Addr ;0x00000004未定义异常LDR PC, SWI_Addr ;0x00000008软件中断LDR PC, PAbt_Addr ;0x0000000C预取指中止LDR PC, DAbt_Addr ;0x00000010数据中止NOP ;0x00000014保留 ;LDR PC, IRQ_AddrLDR PC, PC, #-0x0FF0 ;0x00000018中断LDR PC, FIQ_Addr ;0x0000001C快速中断X86:偏移量与段地址结合的方式五.试比较ARM和x86的I/O寻址方式有什么不同?ARM:立即数寻址:操作数本身直接在指令中给出,取出指令也就获得了操作数,这个操作数也是称为立即数。寄存器的值为操作数。ARM指令普遍采用此种寻址方式。寄存器偏移寻址:寄存器偏移寻址是ARM指令集特有的寻址方式。当第二作数是寄存器偏移方式时,第二寄存器操作数在与第一操作数结合之前,选择进行移位操作。 寄存器寻址:第二操作数的移位位数可以用立即数方式或者寄存器方式给出。寄存器间接寻址:寄存器中的值为操作数的物理地址,而实际的操作数存放在存储器中。 基址加偏址寻址:将寄存器的值与指令中给出的偏移地址址量相加,所得结果作为操作数的物理地址。堆栈寻址:堆栈寻址用于数据栈与寄存器组之间批量数据传输。当数据写好和读出内存的顺序不同时,使用堆栈寻址可以很好的解决这个问题。X86:立即数寻址:操作数包含在指令中,它作为指令的一部分,跟在操作码后存放在代码段。 寄存器寻址:操作数存放在CUP的内部寄存器中。直接寻址方式:操作数的存储器中,指令中直接包含有操作数的有效地址,默认的段地址在DS段寄存器。寄存器间接寻址:操作数在存储器中,操作数的有效地址在基址寄存器BX、BP或变址寄存器SI、DI中。可使用段超越前缀改变 。寄存器相对寻址:操作数在存储器中,操作数有效地址是一个基址寄存器BX、BP或变址寄存器SI、DI的内容加上指令中给出的位置量之和。相对基址变址寻址:操作数在存储器中,操作数的有效地址由基址寄存器的内容与变址寄存器的内容及指令中位置量相加得到,可用段超越前缀改变。六.若允许FIQ和IRQ中断,CPSR应该如何处置?当允许IRQ中断时,CPSR【7】=0即CPSR的I位置为0.当允许FIQ中断时,CPSR【6】=0即CPSR的F位为0。如果2个中断同时发生时,由于FIQ拥有最高中断优先级,而IRQ只有中等中断优先级,所以先执行FIQ中断(CPSR【7】=0),当中断结束后再执行IRQ中断(CPSR【6】=0)FIQ: CPSR4:0=0B10001 /进入FIQ模式IRQ: CPSR4:0=0B10010 /进入IRQ模式CPSR5=0 /在ARM状态执行CPSR6=0 / 允许FIQ中断CPSR7=0 /允许IRQ中断七.什么是ARM的E变种?E变种增加一些附加指令用于增强处理器对一些典型的DSP算法的处理性能,主要包括以下指令。几条新的实现16位数据乘法和乘加操作的指令实现饱和的带符号数的加减法操作的指令。进行双字数据操作的指令,包括双字读取指令LDRD,双字写入指令STRD和协处理器的寄存器传输指令MCRR/MRRC。cache予取指令PLD。E变种首先在ARM体系结构版本5T中使用,用字符E表示。在ARM体系结构版本5以前的版本中,以及在非M变种和非T变种的版本中,E是无效的。八.ARM的哪一种(或几种)模式使用的寄存器最少,使用的是哪些寄存器?由上图可知用户模式和系统模式使用的寄存器最少,使用的有31个通用寄存器和一个状态寄存器,分别是:未分组寄存器R0R7;分组寄存器R8R14;程序计数器R15;状态寄存器CPSR九.R13通常用来存储什么?通常用来作为堆栈指针第三章1.举例说明ARM的各种寻址方式(P61)答:1、立即寻址:2、寄存器寻址: ADD R0,R0,#3 ADD R0,R1,R2LER R0,R1ADD R3,R2,R1,LSL #2 3、寄存器间接寻址: 4、寄存器移位寻址:5、基址变址寻址:6、多寄存器寻址:7、堆栈寻址: LDR R0,R1,#-8 LDMIA R0,R1,R2,R3 LDMFD R13!,R0,R4-R12,PC8、拷贝寻址:9、相对寻址:LDMIA R0!,R2-R9 BL NEXT ? NEXT: ? MOV PC,LR2.R0和R1中有两个32位数,若R0R1,则R0=R0-R1;若R0R1,则R1=R1-R0;若R0=R1,则R1、R0保持不变。(1)请用CMP、B和SUB指令完成上述操作。答: CMP R0,R1BLT LESSBRT MORELESS:SUB R1,R1,R0 B EQ MORE:SUB R0,R0,R1EQ:或AREA StrCopy,CODE, READONLY ;程序起始定义ENTRY ;第一条指令的标识符startMOV R0,#5MOV R1,#4CMP R0,R1BLT LessBGT More END B EQB stopLessSUB R1,R1,R0 B stopMore SUB R0,R0,R1stop(2)请用条件SUB指令完成上述操作。答: CMP R0,R1SUBGT R0,R0,R1SUBLT R1,R1,R0或AREA StrCopy, CODE, READONLYENTRYstartMOV R0,#5MOV R1,#4CMP R0,R1SUBLT R1,R1,R0SUBGT R0,R0,R1stopEND3、用指令实现以下功能答:(1)R0=16MOV R0,#16(2)R1=R0 X 4MUL R1,R0,#4(3)R0=R1/16 ENDLSR R0,R1,#4或MOV R0,R1,LSR#4(4)R1=R2 X 7MUL R1,R2,#74、说明以下指令功能答:(1)、ADDS R0,R1,R1,LSL#2将R1加上4倍的R1赋值给R0。 或R0=R1+R1*4; 并根据运算结果更新标志位(2)、RSB R2,R1,#0R2=0-R1,即将R1求反赋值给R25、下列指令序列完成什么功能?答:(1)ADD R0,R1,R1,LSL #1将R1加上左移一位后的R1并将结果赋值给R0。(R0=R1+R1*2)(2)SUB R0,R0,R1,LSL #4将R0减去左移一位后的R1并将结果赋值给R0。(R0=R0 -R1x*16)(3)ADD R0,R0,R1,LSL #7将R0加上左移7位后的R1并将结果赋值给R0。(R0=R0+R1*128)第四章1、在ARM汇编语言程序设计中,语句一般是由指令,伪操作、宏指令和伪指令组成的。什么是伪操作、宏指令和伪指令呢?它们与指令由什么不同呢?各有什么优点? 答:1)定义:A.指令:每一条指令都对应一种CPU操作。B.伪操作又称为伪指令,它是在对源程序汇编期间由汇编程序处理的操作,它们可以完成如处理器选择、定义程序模式、定义数据、分配存储区、指示程序结束等功能。C.宏指令是由用户按照宏定义格式编写的一段程序,其中语句可以是指令、伪指令,甚至是已定义的宏指令。2)区别:a.每一条指令必须生成机器代码,然后在程序运行期间由CPU来执行其操作;而伪指令是在汇编期间由汇编程序执行的操作命令,除了数据定义及存储器分配伪指令分配存储器空间外,其它伪指令不生成目标码。b.宏指令的作用是把一个复杂的或者是不直观的语句或是组合用一个简单的、易记的形式表示,当编译器遇到源程序中的宏时,就把它定义的内容原封不动的copy过来。如果程序中使用100次宏,这段代码就被复制100次。3)特点:伪操作-成如数据定义、分配存储区、指示程序结束等功能;宏指令-简化程序代码的编写和提高程序的可读性。2、对比说明ADR、ADRL与LDR的区别与联系。(P353)答:1)定义:1)ADR:为小范围的地址读取伪指令,将基于PC相对偏移的地址值读取到寄存器中。2)ADRL:为中等范围的地址读取伪指令,将基于PC相对偏移的地址值读取到寄存器中。3)LDR:大范围的地址读取伪指令,用于加载32位的立即数或一个地址值到指定寄存器,在汇编编译源程序时,LDR伪指令被替换成一条合适的指令。如加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替该伪指令,否则汇编器将使用文字池。2)区别:1)ADR:指令格式:ADR cond register, expr其中 register 加载的目标寄存器expr 为地址表达式,当地址值是非字对齐时,取值范围-255255字节之间;当地址是字对齐是,取值范围-10201020字节之间。2) ADRL:指令格式ADRL cond register,expr其中 register 加载的目标寄存器expr 地址表达式,当地址值是非字对齐时,取值范围-64K64K字节之间;当地址是字对齐时,取值范围-256K256K字节之间。3) LDR:指令格式LDRcond register,=expr/label_expr其中 register 加载的目标寄存器expr 为32位的立即数;label_expr基于PC的地址表达式或外部表达式。3)联系:ADR、ADRL和LDR均为地址读取伪指令。3、编写一个汇编程序,在ARM程序代码中调用Thumb子程序,并返回ARM程序完成其功能。答:CODE32BLX TSUB1CODE16TSUB1BX R14或 ;转向ARM ;表明以下是Thumb指令 ;表明以下是ARM指令AREA EXAMPLE,CODE,READONLYENTRY ;程序入口处CODE16 ;thumb 代码ThumbADD R1,R1,R0 ;R1=R1+R0BX LR ;返回到arm状态CODE32 ;ARM 代码StartMOV R0,#1 ;及时数1赋值给R0MOV R1,#5 ;及时数5赋值给R1ADR R3,Thumb + 1 ;获取目标地址,末位1,MOV LR,PC ; 保存返回地址BX R3 ; 切换到thumb状态END4、编一段C语言与汇编语言的混合代码,在C语言程序中调用汇编语言代码,完成字符STR1,STR2内容的转换。答:unsigned char str1=A;unsigned char str2=B;printf(%c,str1);printf(%c,str2);_asm /嵌入汇编代码mov al,str1 /将str1的值赋给a1xchg al,str2 /交换al和str2的值,现 str2=str1mov str1,al /将a1的值赋给str1printf(%c,str1); /输出printf(%c,str2); /输出getchar();或#include stdio.hvoid main()unsigned char str1=A;/定义字符串str1的内容为Aunsigned char str2=B;/定义字符串str2的内容为Bprintf(str1和str2的初始值n);printf(%c ,str1); /输出str1的值printf(%cn,str2); /输出str2的值_asm /汇编交换子程序mov al,str1 /将str1的值赋给a1xchg al,str2 /将a1的值与str2交换mov str1,al /将a1的值赋给str1printf(str1和str2交换后的值n);printf(%c ,str1); /输出str1的值printf(%c,str2); /输出str2的值getchar();或Cfile.c#include extern void strcopy(char *d, const char *s);int main()const char *srcstr = abcde;char dststr32;printf(Before copying:n);printf( %sn %sn,srcstr,dststr);strcopy(dststr,srcstr);printf(After copying:n);printf( %sn %sn,srcstr,dststr);return 0;Asmfile.sAREA SCopy, CODE, READONLYEXPORT strcopystrcopy; r0 points to destination string; r1 points to source stringLDRB r2, r1,#1 ; load byte and update addressSTRB r2, r0,#1 ; store byte and update address;CMP r2, #0 ; check for zero terminatorBNE strcopy ; keep going if notMOV pc,lr ; ReturnEND这是一个c语言调用汇编的例子,功能是为了实现字符串的拷贝,其中汇编文件为字符串拷贝的功能子函数。5、下列语句中,那些是无效的汇编语言指令?并指出无效指令中的错误。1)ABC: MOV R1,R31)错“ABC:”不能用“:”号2) Count: LDR R0,#0X802)错Count 大小写必需一致3)LDMIA R5,R1,R3,R43)错Equ 大小写必需一致4)START LDR R0,=0x123456H4)对5)START LDR R0,=0x1234565)对6)对或答:(1)、(2)(3)是错误的。(4)(5)(6)是正确的。其中(1)中的冒号应去掉;(2)中的“Count”与(3)中的“Equ”大小写应统一。注意:symbol必须顶格书写。(ARM汇编其后不加“:”)(GUN汇编要加“:”)symbol命名规则:由字母,数字,下划线组成;除局部标号外,不能以数字开头。指令不能顶格书写。ARM指令,伪指令,伪操作,寄存器名可以全部为大写字母,也可全部为小写字母;不可大小写混用。如果语句太长,可以将一条语句分几行来书写,在行末用“”表示换行(即下一行与本行为同一语句)。“”后不能有任何字符,包含空格和制表符(Tab)。6、试编写程序,实现计算2468?+2N的值。答:MOV R5,#0MOV R3,#0MOV R4,#0LABLE EQU #0X2300000MOV LABLE,#300LKMADD R3,R3,#2ADD R4,R4,R3ADD R5,R5,#1CMP R5,#LABLEBLNE LKMEND或AREA Example,CODE,READONLYENTRY ;程序入口处CODE32 ;ARM 代码STARTMOV R0,#0 ;设定寄存器R0,R1,R2的值为0MOV R1,#0 ;其中RO代表每次加的值MOV R2,#0 ;R1代表每次计算的结果cs EQU 100 ;设定累加次数为100LJADD R0,R0,#2 ;R0=R0+2ADD R1,R1,R0 ;R1=R1+R0ADD R2,R2,#1 ;R2=R2+1CMP R2,#cs ;比较R2和cs的值,达到一百时停止程序,否则跳转到LJ继续执行BLNE LJEND或MOV R0,#0LDR R1,=2NMOV R2,#0LOOP ADD R0,R0,#2ADD R2,R2,R0CMP R1,R0BNE LOOP第五章1、简述S3C44B0X最小系统应包含哪些部分? (书P130)答:一个最小嵌入式系统包括如下部分:供电系统(电源)、时钟系统、调试测试接口、复位电路和存储器系统及嵌入式控制器。2、S3C44B0X可使用的外部晶振频率范围是多少?(使用/不使用PLL功能时) 答:20MHZ66MHZ若不使用PLL功能,则晶振频率范围为20-66MHz都能工作,在使用PLL或ISP功能的时候,则须为30-55MHz才能工作,太低或太高都不能工作。3、设一个基于S3C44B0X的系统使用的晶振为11.0592MHZ石英晶振,请计算出最大的系统时钟频率为多少MHZ?此时PLL的M值和P值为多少?答:锁相环输出Fpllo与锁相环输入Fin的关系S3C44B0X的PLL模块的输出时钟频率Fpllo和输入参考时钟频率Fin的关系由下式决定: Fpllo=(m x Fin)/(p x 2s)m=M+8,也就是分频器M的分配值+8p=P+2,也就是分频器P的分频值+2规定:Fpllo大于20MHz,并且小于66MHz又因为PLL的输入时钟是Fi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论