ARM嵌入式系统结构与编程习题答案 邱铁著.docx

上传人:夺命阿水 文档编号:499603 上传时间:2023-08-03 格式:DOCX 页数:28 大小:196.31KB
返回 下载 相关 举报
ARM嵌入式系统结构与编程习题答案 邱铁著.docx_第1页
第1页 / 共28页
ARM嵌入式系统结构与编程习题答案 邱铁著.docx_第2页
第2页 / 共28页
ARM嵌入式系统结构与编程习题答案 邱铁著.docx_第3页
第3页 / 共28页
ARM嵌入式系统结构与编程习题答案 邱铁著.docx_第4页
第4页 / 共28页
ARM嵌入式系统结构与编程习题答案 邱铁著.docx_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《ARM嵌入式系统结构与编程习题答案 邱铁著.docx》由会员分享,可在线阅读,更多相关《ARM嵌入式系统结构与编程习题答案 邱铁著.docx(28页珍藏版)》请在课桌文档上搜索。

1、第8章ARM汇编语言与嵌入式C混合编程1 .严格依据嵌入式C语言的编程规范,写一个C语言程序,实现将一个二维数组内的数据行和列进行排序。答:略2 .嵌入式C程序设计中常用的移位操作有哪几种,请说明每种运算所对应的ARM指令实现。答:移位操作分为左移操作与右移操作左移运算符“”实现将“”左边的操作数的各个二进制位向左移动“”实现将“”左边的操作数的各个二进制位向右移动“”右边操作数所指定的位数。 对于空位的补齐方式,无符号数与有符号数是有区分的。 对无符号数进行右移时,低位丢弃,高位用0补齐,其值相当于除以:2“右移位数”次方 对有符号数进行右移时,依据处理器的不同选择逻辑右移或算术右移3.vo

2、latile限制符在程序中起到什么作用。请举例说明。答:VolatiIe的本意为“暂态的”或.“易变的”,该说明符起到抑制编译器优化的作用。假如在声明时用“volatile”关键进行修饰,遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以供应特别地址的稳定访问。 例:硬件端口寄存器读取 Charx=0,y=0,z=0; X=Readehar(OX54000000);读端口 y=; X=ReadChar(OX54000000);再读端口 Z=X; 以上代码可能被编译器优化为 Charx=0,y=0,z=0; X=ReadChar(OX54000000);读端口 y=; Z

3、=X; 为了确保X的值从真实端口获得,声明时应当为 Volatilecharx; Chary,z;4 .请分析下列程序代码的执行结果。#includemain()intValue=OxFFl;int*pl,*p2,*p3,*p4;pl=&value;p2=&pl;p3=&p2;p4=&p3;printf(*p4=%dn,*p4);)答:程序输出结果为:*p4=40815 .分析宏定义#definePOWER(x)x*x是否合理,举例说明。假如不合理,应如何更改?答:#definePOWER(x)x*x不合理;对于带参数的宏,其参数应当用括号括起来。例:假如依据下边方式运用该宏POWER(2+3

4、)则宏绽开后为2+3*2+3该宏应修改为:#definePOWER(x)(x)*(x)6 .条件编译在程序设计中有哪些用途?答:条件编译包括了6条预处理指令#ifdef,#ifndef.#if,#elif,#else,#endif.o条件编译的功能在于对源程序中的一部分内容只有满足某种条件的状况下才进行编译。7 .何为可重入函数?假如使程序具有可重入性,在程序设计中应当留意哪些问题?答:假如某个函数可以被多个任务并发运用,而不会造成数据错误,我们就说这个函数具有可重入性(reentrant)。可重入函数可以运用局部变量,也可以运用全局变量。假如运用全局变量,则应通过关中断、信号量(即P、V操作

5、)等手段对其加以爱惜,若不加以爱惜,则此函数就不具有可重入性,即当多个进程调用此函数时,很有可能使得此全局变量变为不行知状态。8 .现有模块module_1,module_2,module_3,要求在模块module.I中供应可供模块module_2,module_3运用的int型变量xx,请写出模块化程序设计框架。答:首先在module的.c文件中定义intxx;/*module-l.c*/intxx=O;然后在module的.h文件中声明XX为外部变量*module-l.h*/externintxx;接下来在module_2源文件中包括module的.h文件/*module-2.c*/#i

6、ncludeHmodule_l.h在module_3源文件中包括module的.h文件/*module-3.c*/#includemodule.h这样在module_2,module_3中就可以运用module.1中供应的int型变量XX了。9 .ATPCS与AAPCS的全称是是什么,它们有什么差别?驾驭子程序调用过程中寄存器的运用规则,数据栈的运用规则及参数的传递规则,在具体的函数中能够娴熟应用。答:过程调用标准ATPCS(ARM-ThumbProduceCallStandard)规定了子程序间相互调用的基本规则,ATPCS规定子程序调用过程中寄存器的运用规则、数据栈的运用规则及参数的传递规

7、则。2023年,ARM公司推出了新的过程调用标准AAPCS(ARMArchitectureProduceCallStandard),它只是改进了原有的ATPCS的二进制代码的兼容性。10 .内嵌式汇编有哪些局限性?编写一段代码接受C语言嵌入式汇编程序,在汇编程序中实现字符串的拷贝操作。答:内嵌汇编的局限性(1)操作数 ARM开发工具编译环境下内嵌汇编语言,指令操作数可以是寄存器、常量或C语言表达式。可以是Char、Short或ini类型,而且是作为无符号数进行操作。 当表达式过于困难时须要运用较多的物理寄存器,有可能产生冲突。 GNUARM编译环境下内嵌汇编语言ARM开发工具稍有差别,不能干脆

8、引用C语言中的变量。(2)物理寄存器不要干脆向程序计数器PC赋值,程序的跳转只能通过B或BL指令实现。一般将寄存器ROR3、R12及R14用于子程序调用存放中间结果,因此在内嵌汇编指令中,一般不要将这些寄存器同时指定为指令中的物理寄存器。在内嵌的汇编指令中运用物理寄存器时,假如有C语言变量运用了该物理寄存器,则编译器将在合适的时候保存并更原该变量的值。须要留意的是,当寄存器SP、SL、FP以及SB用作特定的用途时,编译器不能复原这些寄存器的值。通常在内嵌汇编指令中不要指定物理寄存器,因为有可能会影响编译器支配寄存器,进而可能影响代码的效率。(3)标号、常量及指令绽开 C语言程序中的标号可以被内

9、嵌的汇编指令所运用。但是只有B指令可以运用C语言程序中的标号,BL指令不能运用C语言程序中的标号。(4)内存单元的支配 内嵌汇编器不支持汇编语言中用于内存支配的伪操作。所用的内存单元的支配都是通过C语言程序完成的,支配的内存单元通过变量以供内嵌的汇编器运用。 (5)SWl和BL指令 SWl和BL指令用于内嵌汇编时,除了正常的操作数域外,还必需增加如下3个可选的寄存器列表: 用于存放输入的参数的寄存器列表。 用于存放返回结果的寄存器列表。 用于保存被调用的子程序工作寄存器的寄存器列表。ARM嵌入式系统结构与编程习题答案第一章绪论1 .国内嵌入式系统行业对“嵌入式系统”的定义是什么?如何理解?答:

10、国内嵌入式行业一个普遍认同的定义是:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能,牢靠性,成本,体积,功耗严格要求的专业计算机系统。从这个定义可以看出嵌入式系统是与应用紧密结合的,它具有很强的专用性,必需结合实际系统需求进行合理的剪裁利用。因此有人把嵌入式系统比作是一个针对特定的应用而“量身定做”的专业计算机系统。2 .嵌入式系统是从何时产生的,简述其发展历程。答:从20世纪70年头单片机的出现到目前各种各样的嵌入式微处理器,微限制器的大规模应用,嵌入式系统己经有了30多年的发展历史。嵌入式系统的出现最初是基于单片机的。Intel公司1971年开发出第一片具有4位总线结构

11、的微处理器4004,可以说是嵌入式系统的萌芽阶段。80年头初的8051是单片机历史上值得纪念的一页。20世纪80年头早期,出现了商业级的“实时操作系统内核”,在实时内核下编写应用软件可以使新产品的沿着更快,更节约资金。20世纪90年头实时内核发展为实时多任务操作系统。步入21世纪以来,嵌入式系统得到了极大的发展。在硬件上,MCU的性能得到了极大的提升,特别是ARM技术的出现与完善,为嵌入式操作系统供应了功能强大的硬件载体,将嵌入式系统推向了一个崭新的阶段。3 .当前最常用的源码开放的嵌入式操作系统有哪些,请举出两例,并分析其特点。答:主要有嵌入式Linux和嵌入式实时操作内核uC/OS-Il嵌

12、入式Linux操作系统是针对嵌入式微限制器的特点而量身定做的一种Linux操作系统,包括常用的嵌入式通信协议和常用驱动,支持多种文件系统。主要有以下特点:源码开放,易于移植,内核小,功能强大,运行稳定,效率高等。uC/OS是源码工卡的实时嵌入式系统内核,主要有以下特点:源码公开,可移植性强,可固化,可剪裁,占先式,多任务,可确定性,供应系统服务等。4 .举例说明嵌入式设备在工控设备中的应用。答:由于工业限制系统特别强调牢靠性和实时性,“量身定做”的嵌入式限制系统恰能满足工业限制的需求。例如:工业过程限制,数字限制机床,电网设备监测,电力自动限制系统,石油化工监控等。5 .嵌入式技术的发展趋势有

13、哪些?答:将来嵌入式系统的发展趋势有:1.随着信息化与数字化的发展,嵌入式设备进行网络互联是将来发展的趋势。2.优化嵌入式系统软硬件内核,提高系统运行速度,降低功耗和硬件成本。3.指令集的并行计算技术将引入嵌入式微处理器。4.嵌入式微处理器将会向多核技术发展。5.嵌入式技术将引领信息时代。第2章ARM技术与ARM体系结构1 .简述ARM处理器内核调试结构原理答:ARM处理器一般都带有嵌入式追踪宏单元ETM(EmbeddedTraceMacro),它是ARM公司自己推出的调试工具。ARM处理器都支持基于JTAG(JointTestActionGroup联合测试行动小组)的调试方法。它利用芯片内部

14、的EmbeddedlCE来限制ARM内核操作,可完成单步调试和断点调试等操作。当CPU处理单步执行完毕或到达断点处时,就可以在宿主机端查看处理器现场数据,但是它不能在CPU运行过程中对实时数据进行仿真。宿主机仿真器/1NJTAG 接JL嵌入式ICEETMETM解决了上述问题,能够在CPU运行过程中实时扫描处理器的现场信息,并数据送往TAP(TestAccessPort)限制器。上图中分为三条扫描链(图中的粗实线),分别用来监视ARM核,ETM,嵌入式ICE的状态。2 .分析ARM7TDMI-S各字母所代表的含义。答:ARM7TDMI-S中ARM是AdvancedRISCMachines的缩写7

15、是系列号;T:支持高密度16位的Thumb指令集;D:支持JTAG片上调试;M:支持用于长乘法操作(64位结果)ARM指令,包含快速乘法器;;I:带有嵌入式追踪宏单元ETM,用来设置断点和视察点的调试硬件;S:可综合版本,意味着处理器内核是以源代码形式供应的。这种源代码形式又可以编译成一种易于EDA工具运用的形式。3 .ARM处理器的工作模式有哪几种,其中哪些为特权模式,哪些为异样模式,并指出处理器在什么状况下进入相应的模式。答:ARM技术的设计者将ARM处理器在应用中可能产生的状态进行了分类,并针对同一类型的异样状态设定了一个固定的入口点,当异样产生时,程序会自动跳转到对应异样入口处进行异样

16、服务。 1.用户模式:非特权模式,也就是正常程序执行的模式,大部分任务在这种模式下执行。在用户模式下,假如没异样发生,不允许应用程序自行变更处理器的工作模式,假如有异样发生,处理器会自动切换工作模式 2.FlQ模式:也称为快速中断模式,支持高速数据传输和通道处理,当一个高优先级(fast)中断产生时将会进入这种模式。 3.IRQ模式:也称为一般中断模式,:当一个低优先级(normal)中断产生时将会进入这种模式。在这模式下按中断的处理器方式又分为向量中断和非向量中断两种。通常的中断处理都在IRQ模式下进行。 4.SVC模式:称之为管理模式,它是一种操作系统爱惜模式。当复位或软中断指令执行时处理

17、器将进入这种模式。 5.中止模式:当存取异样时将会进入这种模式,用来处理存储器故障、实现虚拟存储或存储爱惜。 6.未定义指令异样模式:当执行未定义指令时会进入这种模式,主要是用来处理未定义的指令陷阱,支持硬件协处理器的软件仿真,因为未定义指令多发生在对协处理器的操作上。 7.系统模式:运用和USer模式相同寄存器组的特权模式,用来运行特权级的操作系统任务。 在这7种工作模式中,除了用户模式以外,其他6种处理器模式可以称为特权模式,在这些模式下,程序可以访问全部的系统资源,也可以随意地进行处理器模式的切换。 在这6种特权模式中,除了系统模式外的其他5种特权模式又称为异样模式,每种异样都对应有自己

18、的异样处理入口点。4 .分析程序状态寄存器(PSR)各位的功能描述,并说明C,Z,N,V在什么状况下进行置位和清零。答:条件代码林志保留控制住313029282726876543210NZCVIFTM4M3M2MlMO条件位:0-结果为正或0O-结果不为0O-借位0结果没溢出 N=I-结果为负, Z=I-结果为0, C=I-进位, V=I-结果溢出,Q位:仅ARM5TE/J架构支持指示增加型DSP指令是否溢出中断禁止位: I=1:禁止IRQ. F=I:禁止FIQ.TBit 仅ARMXT架构支持 T=O:处理器处于ARM状态 T=1:处理器处于Thumb状态MOde位(处理器模式位):Ob100

19、OOUserOblOOOlFIQOblOOlOIRQOblOOIlSupervisorOblOlllAbortObllOllUndefinedOblllllSystem5.简述ARM处理器异样处理和程序返回的过程。答:只要正常的程序流被短暂中止,处理器就进入异样模式。例如响应一个来自外设的中断。在处理异样之前,ARM7TDMI内核保存当前的处理器状态,这样当处理程序结束时可以复原执行原来的程序。假犹如时发生两个或更多异样,那么将依据固定的依次来处理异样。异样或入口返回指令向量表偏移处理器模式优先级BLMOVPC,R14SWIMOVSPC,R14_svcSVC60x00000008未定义的指令M

20、OVSPC,RI4.undUND60x00000004预取指中止SUBSPC,R14_abt,#4ABT50x0000000C快中断SUBSPC,RI4_fiq,#4FIQ30x000000IC中断SUBSPC,R14_irq,#4IRQ40x00000018数据中止SUBSPC,R14_abt,#8ABT20x00000010复位无SVC10x00000000在异样发生后,ARM7TDMI内核会作以下工作:1 .在适当的LR中保存下一条指令的地址2 .将CPSR复制到适当的SPSR中;3 .将CPSR模式位强制设置为与异样类型相对应的值;4 .强制PC从相关的异样向量处取指。ARM7TDMI

21、内核在中断异样时置位中断禁止标记,这样可以防止不受限制的异样嵌套。注:异样总是在ARM状态中进行处理。当处理器处于ThUmb状态时发生了异样,在异样向量地址装入PC时,会自动切换到ARM状态。当异样结束时,异样处理程序必需:1 .将LR中的值减去偏移量后存入PC,偏移量依据异样的类型而有所不同;2 .将SPSR的值复制回CPSR;3 .清零在入口置位的中断禁止标记。注:复原CPSR的动作会将T、F和I位自动复原为异样发生前的值。6. ARM处理器字数据的存储格式有哪两种?并指出这两种格式的区分。答:ARM7TDMI处理器可以将存储器中的字以下列格式存储 大端格式(Big-endian) 小端格

22、式(Little-endian) 小端存储器系统:在小端格式中,高位数字存放在高位字节中。因此存储器系统字节O连接到数据线7-0。 大端存储器系统:在大端格式中,高位数字存放在低位字节中。因此存储器系统字节0连接到数据线3124。7 .分析带有存储器访问指令(LDR)的流水线运行状况,并用图示说明流水线的运行机制。答:存储器访问指令LDR流水线举例周期123456ADD SUB LDR MOV AND ORRFetchDeCc)deFetchExecute DecodeExecuteFetchDecodeFetchDecodeFetchExecute回写ExecuteDecodeFetch取指

23、的存储器访问和执行的数据路径占用都是不行同时共享的资源,对于多周期指令来说,假如指令困难以至于不能在单个时钟周期内完成执行阶段,就会产生流水线堵塞。对存储器的访问指令LDR是非单周期指令1.DR指令的执行,访问存储器,回写寄存器(占用了3个周期)。造成了MoV指令的执行被阻断。8 .简述ARM9的5级流水线每一级所完成的功能和实现的操作。答:ARM920在指令操作上接受5级流水线.取指:从指令CaChe中读取指令。译码:对指令进行译码,识别出是对哪个寄存器进行操作并从通用寄存器中读取操作数。执行:进行ALU运算和移位操作,假如是对存储器操作的指令,则在ALU中计算出要访问的存储器地址。存储器访

24、问:假如是对存储器访问的指令,用来实现数据缓冲功能(通过数据CaChe)。寄存器回写:将指令运算或操作结果写回到目标寄存器中。9 .什么叫流水线互锁?应如何来解决,举例说明,答:互锁:当前指令的执行须要前面指令的执行结果,但前面的指令没有执行完毕,引起流水线的等待。互锁发生时,硬件会停止指令的执行,直到数据准备好。周期123456789掾作ADDR1,R1,R2FDEWSUBR3,R4,R1FDEWLDRR4,R7FDEMWORRR8,R3,R4FDIEWANDR6,R3,R1FIDEWEORR3,R1,R2FDEWF-取指(Fetch)D-蝌(Decode)E-执行(Execute)I-互银

25、(Interlock)M-存储器(Memory)W-写回(懒即*)上边程序中ORR指令执行时须要运用LDR指令加载后的R4寄存器,因此造成了ORR指令的等待。编译器以及汇编程序员可以通过重新设计代码的依次或者其他方法来削减互锁的数量。第3章ARM指令集寻址方式1 .在指令编码中,条件码占几位,最多有多少个条件,各个条件是如何形成的?答:条件码占4位,最多有15个条件操作码条件助记符标记含义0000EQZ=I相等OOOINEZ=O不相等OOlOCS/HSC=I无符号数大于或等于OOllCC/LOC=O无符号数小于OlOOMIN=I负数OlOIPLN=O正数或零OllOVSV=I溢出OlllVCV

26、=O没有溢出1000HIc=,z=o无符号数大于1001LSC=0,Z=I无符号数小于或等于1010GEN=V有符号数大于或等于IOIILTN!=V有符号数小于1100GTZ=O5N=V有符号数大于HOILEZ=l,Nf=V有符号数小于或等于HlOAL任何无条件执行(指令默认条件)HllNV任何从不执行(不要运用)2 .指令条件码中,V标记位在什么状况下才能等于1?答:V溢出标记位对于加减法运算指令,当操作数和运算结果为二进制补码表示的带符号数时,V=I表示符号位溢出,其他指令通常不影响V位。3 .在ARM指令中,什么是合法的立刻数?推断下面各立刻数是否合法,假如合法则写出在指令中的编码格式(

27、也就是8位常数和4位移位数)0x54300x1080x3040x501OxfblOOOO0x3340000x3FC000Ox1FE00000x55800000x7F8000x39C0000xlFE80000答:立刻数必需由I个8位的常数通过进行32位循环右移偶数位得到,其中循环右移的位数由一个4位二进制的两倍表示。即一个8位的常数通过循环右移2*rotate_4位(即0,2,4,。30)得到0X54300000,0000,0000,0000,0101,0100,0011,00000X1080000,0000,0000,0000,0000,0001,0000,1 (X)O0X3040000,00

28、00,0000,0000,0000,0011,0000,01000x5010000,0000,0000,0000,0000,0101,0000,0001OxfblOOOO0000,1111,1011,0001,0000,0000,0000,0000 0x3340000000,0000,0011,0011,0100,0000,0000,00000x3FC0000000,0000,0011,1111,1100,0000,0000,00000xlFE00000000,0001Jlll,lll 0,0000,0000,0000,0000 0x55800000000,0101,0101,1000,000

29、0,0000,0000,00000x7F8000000,0000,0000,0111,111 IJ 000,0000,00000x39C0000000,0000,0011,1001,1100,0000,0000,00000xlFE800000001,1111,1110,1000,0000,0000,0000,0000非法立刻数0x42循环右移30位OxCI循环右移30位非法立刻数非法立刻数OXcd循环右移18位OXFF循环右移18位非法立刻数非法立刻数非法立刻数0XE7循环右移18位非法立刻数(rotate_4=0xF)(rotate_4=0xF)(rotate_4=0x9)(rotate_4

30、=0x9)(rotate_4=0x9)4 .分析逻辑右移,算术右移,循环右移,带扩展的循环右移它们间的差别。答:LSL逻辑左移:31OVKlO1.SR逻辑右移:31OOOMASR算术右移:31O1JROR循环右移:310A-RRX带扩展的循环右移:3105 .ARM数据处理指令具体的寻址方式有哪些,假如程序计数器PC作为目标寄存器,会产生什么结果?答:数据处理指令寻址方式具体可分为5种类型:1)其次操作数为立刻数2)其次操作数为寄存器3)其次操作数为寄存器移位方式且移位的位数为一个5位立刻数4)其次操作数为寄存器移位方式且移位数值放在寄存器中5)其次操作数位寄存器进行RRX移位得到。假如PC(

31、RI5)用作目标寄存器,指令会产生不行预知的结果。6 .在LOad/Store指令寻址中,字,无符号字节的Load/Store指令寻址和半字,有符号字节寻址,试分析它们之间的差别。答:在Load/Store指令寻址中,字,无符号字节的LoadZStore指令寻址中共有以下3种内存地址构成格式:1)Addressing_mode中的偏移量为立刻数2)Addressingjnode中的偏移量为寄存器的值3)Addressing_mode中的偏移量通过寄存器移位得到半字,有符号字节的LOad/Store指令寻址中共有以下2种内存地址构成格式:1)Addressing_mode中的偏移量为立刻数2)A

32、ddressingjnode中的偏移量为寄存器的值7 .块拷贝LOad/Store指令在实现寄存器组合连续的内存单元中数据传递时,地址的变更方式有哪几种类型,并分析它们的地址变更状况。答:批量Load/Store指令在实现寄存器组合连续的内存单元中数据传递时,地址的变更方式有以下4种类型: 后增IA(IncrementAfter):每次数据传送后地址加4; 先增IB(IncrementBefore):每次数据传送前地址加4; 后减DA(DecrementAfter):每次数据传送后地址减4; 先减DB(DecrementBefore):每次数据传送前地址减4;8 .栈操作指令地址的变更方式有哪

33、几种类型,并分析它们的地址变更状况,从而得出栈操作指令寻址和块拷贝LOad/Store指令之间的对应关系。答:依据堆栈指针的指向位置不同和堆栈的生长方向不同,共有4种类型的堆栈工作方式:满递增堆栈FA:堆栈指针指向最终压入的数据,且由低地址向高地址生成。满递减堆栈FD:堆栈指针指向最终压入的数据,且由高地址向低地址生成。空递增堆栈EA:堆栈指针指向下一个要放入数据的空位置,且由低地址向高地址生成。栈操作好贝地址变化方向向上向下满空满空增减先STMIBSTMFALDMIB1.DMED后先STMIASTMEALIWBmiEALEMIALKlIFDSTM1SiMFD后LM)A1.WASTMDASTM

34、ED空递减堆栈ED:堆栈指针指向下一个要放入数据的空位置.,且由高地址向低地址生成。地址9 .分析协处理器加载/存储指令的寻址方式种的内存地址索引格式中不同的汇编语法格式下内存地址的计算方法。答:协处理器加载/存储指令的寻址方式种的内存地址索引格式中,索引格式类似于LDR/STR指令寻址中的立刻数作为地址偏移量的形式。AddreSsing_mode中的偏移量为8位立刻数的汇编语法格式有以下3种:,前变址不回写形式:,#+/-*4第一个内存地址编号为基地址寄存器Rn值加上/减去imm-ffset8的4倍,后续的每一个地址是前一个内存地址加4,直到协处理器发出信号,结束本次数据传输为止。,前变址回

35、写形式:,#+/-*4!第一个内存地址编号为基地址寄存器Rn值加上/减去imm_olfset8的4倍,后续的每一个地址是前一个内存地址加4,直到协处理器发出信号,结束本次数据传输为止。当指令执行时,生成的地址值将写入基址寄存器。,后变址回写形式:,#+/-*4内存地址为基址寄存器Rn的值,当存储器操作完成后,将基地址寄存器Rn值加上/减去imm-ffset8的4倍,后续的每一个地址是前一个内存地址加4,直到协处理器发出信号,结束本次数据传输为止。最终将Rn值加上/减去imm_offset8的4倍写回到基址寄存器Rn(更新基地址寄存器)。10 .写出下列指令的机器码,并分析指令操作功能。MOVR

36、O,RlMOVRl,0X198ADDEQSRl,R2,OxABCMPR2,M)Xab1.DRRO,R1,#4STRR(MRl,Rl,LSL#2!1.DRHRO,R1,#41.DRSBR0,R22!STRBRI,R2,#0Xa0JLDMlARO,R1,R2,R8)STMDBRO!JR1-R5,R1O,R11)STMEDSP!R0-R3,LR)答:机器码部分略。MOVRO,Rl;RO-RIMOVRl,0X198;RO-0X198ADDEQSRl,R2,OxAB;当Z=I时,Rl-R2+0xAB并影响标记位CMPR2,#OXab;R2-0xAB,并影响标记位LDRRO,IRl,#4;RO一R1+4S

37、TRROJRl,Rl,LSL#2!;R1+R1*4一RO,Rl=RHRlMLDRHROJRl,#4;RO一R1+4半字,Ro的高16位清零LDRSBR0,R2,#-2!;RO-R2-2字节,RO有符号扩展为32位,R2=R2-2STRBRl,lR2,#0Xa0J;R20Xa0-RI低8位,LDMlARO,R1,R2,R8);将内存单元【RO(R+111以字为单位读取到Rl,R2,R8中STMDBRO!,R1-R5,R1O,R11)将寄存器R1R5,RIO,RII的值以字为单位依次写入【RO】中,每写一个字之前RO=R0-4STMEDSP!R0-R3,LR)将寄存器R0R3,LR的的值以字为单位

38、依次写入【SP】中,每写一个字之后SP=SP-4第4章ARM指令集系统1.ARM指令可分为哪几类?说出哪几条指令是无条件执行的。答:ARM微处理器的指令集可以分为:数据处理指令,分支指令,加载/存储指令,批量加载/存储指令,交换指令,程序状态寄存器(PSR)处理指令,协处理器操作指令和异样产生指令八大类。几乎全部的ARM指令都是可以有条件执行的。带链接和状态切换的跳转指令BLX,当目标地址由程序标号给出时,即:BLX由于指令码中是没有条件编码位的,所以指令是无条件执行的。2 .如何实现两个64位数的加法操作,如何实现两个64位数的减法操作,如何求一个64位数的负数?答:1)运用ADC实现64位

39、加法,结果存于Rl、RO中:ADDSR0,R0,R2;RO等于低32位相加,并影响标记位ADCRI,R1,R3;Rl等于高32位相加,并加上低位进位2)运用SBC实现64位减法,结果存于Rl、RO中:SUBSR0,R0,R2;低32位相减,并影响标记位SBCR1,R1,R3;高32位相减,并减去低位借位3)运用RSC指令实现求64位数值的负数:RSBSR2,R0,#0RSCR3,R1,#O3 .写出LDRB指令与LDRSB指令的二进制编码格式,并指出它们之间的区分。答:LDRB指令的二进制编码格式:3128272625242322212019161512110cond01IPUBWLRnRda

40、ddressingJnode.specific1.DRSB指令的二进制编码格式:3128272625242322212019161512118765430cond000PUIWLRnRdaddr-mode1SH1addr_mode1.DRB指令用于将内存中的一个8位字节数据读取到指令中的目标寄存器的低8位中,寄存器的高24位用零扩展。1.DRSB指令用于将内存中的一个8位字节数据读取到指令中的目标寄存器的低8位中,寄存器的高24位用符号位扩展。4 .分析下列每条语句的功能,并确定程序段所实现的操作。CMPRO,0MOVEQRl,0MOVGTRl,1答:CMPRO,0;比较RO与0的大小MOVE

41、QRl,0;若RO=O,则RI=OMOVGTRI,1;若R00,则RI=I5 .请运用多种方法实现将字数据Oxffffffff送入寄存器RO答:1)MVNR0,#02)MOVRO,#1RSBRO,R0,#06 .写一条ARM指令,分别完成下列操作:(l)R0=16(2)RO=R116(3)RI=R2*3(4)R0=-R0答:MOV RO, #16MOV RO, RI, LSR #4MOV R3, #3 MULRl, R2, R3RSB RO, RO, #0(l)R0=16(2)RO=R116R1=R2*3(4)R0=-R0.编写一个ARM汇编程序,累加一个队列中的全部元素,遇到0时停止。结果放

42、入R4。答:假设队列为地址从RO起先递增的字队列:1.OOP1.DRRl,R0,#4!MOVSR2,RlBEQENDADDR4,R4,R2BLOOPEND7 .写出实现下列操作的ARM指令:当Z=I时,将存储器地址为Rl的字数据读入寄存器RO.当Z=I时,将存储器地址为R1+R2的字数据读入寄存器RO将存储器地址为R1-4的字数据读入寄存器RO0将存储器地址为R1+R6的字数据读入寄存器RO,并将新地址R1+R6写入Rl。答:1)LDREQR0,R12)LDREQR0,R1,R23)LDRROJRl,#44)LDRR0,R1,R6J!9.写出下列ARM指令所实现的操作:LDRR2,R3,#-4

43、!LDRR0,R0,R2LDRRl,R3,R2,LSL#2!LDRSBR0,R2,#-2!STRBRl,R2,OxAO1.DMIARO,R1,R2,R8)STMDBRO!,R1-R5,R1O,R11)答:LDRR2,R3,#-4!;R2-R3-4,R3=R3-4LDRR0,R0,R2;RO-IRO,R0=R0+R2LDRRI,R3,R2,LSL#2!;R1-R3+R2*4,R3=R3+R2*4LDRSBR0,R2,#-2!;RO低8位R2+0xA01.DMIARO,R1,R2,R8)从地址RO起先的内存中依次读取字数据,送入寄存器Rl,R2,R8STMDBRO!,R1-R5,R1O,R1I)将寄存器Rll,RIO,R5-R1的字数据,依次写入地址RO中,每次写入前Ro=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号