ARM嵌入式系统结构与编程习题答案 邱铁著
更新时间:2023-11-27 19:39:01 阅读量: 教育文库 文档下载
- Arm嵌入式推荐度:
- 相关推荐
第8章 ARM汇编语言与嵌入式C混合编程
1.严格按照嵌入式C语言的编程规范,写一个C语言程序,实现将一个二维数组内的数据行和列进行排序。 答:略
2.嵌入式C程序设计中常用的移位操作有哪几种,请说明每种运算所对应的ARM指令实现。 答:移位操作分为左移操作与右移操作
左移运算符―<<‖实现将―<<‖左边的操作数的各个二进制位向左移动―<<‖右边操作数所指定的位数,高位丢弃,低位补0。其值相当于乘以:2―左移位数‖次方。
右移运算符―>>‖实现将―>>‖左边的操作数的各个二进制位向右移动―<<‖右边操作数所指定的位数。
? 对于空位的补齐方式,无符号数与有符号数是有区别的。
? 对无符号数进行右移时,低位丢弃,高位用0补齐,其值相当于除以:2―右移位数‖
次方
? 对有符号数进行右移时,根据处理器的不同选择逻辑右移或算术右移
3.volatile限制符在程序中起到什么作用。请举例说明。
答:volatile的本意为 ―暂态的‖或.―易变的‖,该说明符起到抑制编译器优化的作用。
如果在声明时用―volatile‖关键进行修饰,遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供特殊地址的稳定访问。 ? 例:硬件端口寄存器读取 ? Char x=0,y=0,z=0;
? x=ReadChar(0x54000000);//读端口 ? y=x;
? x=ReadChar(0x54000000);//再读端口 ? z=x;
? 以上代码可能被编译器优化为 ? Char x=0,y=0,z=0;
? x=ReadChar(0x54000000);//读端口 ? y=x; ? z=x;
? 为了确保x的值从真实端口获取,声明时应该为 ? Volatile char x; ? Char y,z;
4.请分析下列程序代码的执行结果。 #include
printf(\}
答:程序输出结果为:****p4=4081
5.分析宏定义#define POWER(x) x*x 是否合理,举例说明。如果不合理,应如何更改? 答:#define POWER(x) x*x 不合理;对于带参数的宏,其参数应该用括号括起来。 例:如果按照下边方式使用该宏
POWER(2+3) 则宏展开后为 2+3*2+3
该宏应修改为:#define POWER(x) (x)*(x)
6.条件编译在程序设计中有哪些用途?
答:条件编译包括了6条预处理指令#ifdef, #ifndef. ##if, #elif, #else, #endif.。条件编译的功能在于对源程序中的一部分内容只有满足某种条件的情况下才进行编译。
7.何为可重入函数?如果使程序具有可重入性,在程序设计中应该注意哪些问题?
答:如果某个函数可以被多个任务并发使用,而不会造成数据错误,我们就说这个函数具有可重入性(reentrant) 。
可重入函数可以使用局部变量,也可以使用全局变量。
如果使用全局变量,则应通过关中断、信号量(即P、V操作)等手段对其加以保护,若不加以保护,则此函数就不具有可重入性,即当多个进程调用此函数时,很有可能使得此全局变量变为不可知状态。
8.现有模块module_1, module_2, module_3, 要求在模块module_1中提供可供模块module_2, module_3使用的int型变量xx,请写出模块化程序设计框架。 答:首先在module_1的.c文件中定义 int xx; /*module_1.c*/ int xx=0;
然后在module_1的.h 文件中声明xx为外部变量 /*module_1.h*/ extern int xx;
接下来在module_2源文件中包括module_1的 .h 文件 /*module_2.c*/
#include \
在module_3源文件中包括module_1的 .h 文件 /*module_3.c*/
#include \
这样在module_2, module_3中就可以使用module_1中提供的int型变量xx了。
9.ATPCS 与 AAPCS的全称是是什么,它们有什么差别?掌握子程序调用过程中寄存器的使用规则,数据栈的使用规则及参数的传递规则,在具体的函数中能够熟练应用。
答:过程调用标准ATPCS(ARM-Thumb Produce Call Standard)规定了子程序间相互调用的基本规则, ATPCS规定子程序调用过程中寄存器的使用规则、数据栈的使用规则及参数的传递规则。
2007年,ARM公司推出了新的过程调用标准AAPCS(ARM Architecture Produce Call
Standard),它只是改进了原有的ATPCS的二进制代码的兼容性。
10.内嵌式汇编有哪些局限性?编写一段代码采用C语言嵌入式汇编程序,在汇编程序中实现字符串的拷贝操作。 答:内嵌汇编的局限性
(1)操作数
? ARM开发工具编译环境下内嵌汇编语言,指令操作数可以是寄存器、常量或C语
言表达式。可以是char、short或int类型,而且是作为无符号数进行操作。 ? 当表达式过于复杂时需要使用较多的物理寄存器,有可能产生冲突。
? GNU ARM编译环境下内嵌汇编语言ARM开发工具稍有差别,不能直接引用C语
言中的变量。 (2)物理寄存器
不要直接向程序计数器PC赋值,程序的跳转只能通过B或BL指令实现。
一般将寄存器R0~R3、R12及R14用于子程序调用存放中间结果,因此在内嵌汇编指令中,一般不要将这些寄存器同时指定为指令中的物理寄存器。
在内嵌的汇编指令中使用物理寄存器时,如果有C语言变量使用了该物理寄存器,则编译器将在合适的时候保存并恢复该变量的值。需要注意的是,当寄存器SP、SL、FP以及SB用作特定的用途时,编译器不能恢复这些寄存器的值。
通常在内嵌汇编指令中不要指定物理寄存器,因为有可能会影响编译器分配寄存器,进而可能影响代码的效率。 (3)标号、常量及指令展开
? C语言程序中的标号可以被内嵌的汇编指令所使用。但是只有B指令可以使用C语
言程序中的标号,BL指令不能使用C语言程序中的标号。 (4)内存单元的分配
? 内嵌汇编器不支持汇编语言中用于内存分配的伪操作。所用的内存单元的分配都是
通过C语言程序完成的,分配的内存单元通过变量以供内嵌的汇编器使用。 ? (5)SWI和BL指令
? SWI和BL指令用于内嵌汇编时,除了正常的操作数域外,还必须增加如下3个可
选的寄存器列表:
? 用于存放输入的参数的寄存器列表。 ? 用于存放返回结果的寄存器列表。
? 用于保存被调用的子程序工作寄存器的寄存器列表。
《ARM嵌入式系统结构与编程》习题答案
第一章 绪论
1. 国内嵌入式系统行业对“嵌入式系统”的定义是什么?如何理解?
答:国内嵌入式行业一个普遍认同的定义是:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能,可靠性,成本,体积,功耗严格要求的专业计算机系统。 从这个定义可以看出嵌入式系统是与应用紧密结合的,它具有很强的专用性,必须结合实际系统需求进行合理的剪裁利用。因此有人把嵌入式系统比作是一个针对特定的应用而“量身定做”的专业计算机系统。
2.嵌入式系统是从何时产生的,简述其发展历程。 答:从20世纪70年代单片机的出现到目前各式各样的嵌入式微处理器,微控制器的大规模应用,嵌入式系统已经有了30多年的发展历史。
嵌入式系统的出现最初是基于单片机的。Intel公司1971年开发出第一片具有4位总线结构的微处理器4004,可以说是嵌入式系统的萌芽阶段。80年代初的8051是单片机历史上值得纪念的一页。20世纪80年代早期,出现了商业级的“实时操作系统内核”,在实时内核下编写应用软件可以使新产品的沿着更快,更节省资金。20世纪90年代实时内核发展为实时多任务操作系统。步入21世纪以来,嵌入式系统得到了极大的发展。在硬件上,MCU的性能得到了极大的提升,特别是ARM技术的出现与完善,为嵌入式操作系统提供了功能强大的硬件载体,将嵌入式系统推向了一个崭新的阶段。
3.当前最常用的源码开放的嵌入式操作系统有哪些,请举出两例,并分析其特点。 答:主要有嵌入式Linux和嵌入式实时操作内核uC/OS-II
嵌入式Linux操作系统是针对嵌入式微控制器的特点而量身定做的一种Linux操作系统,包括常用的嵌入式通信协议和常用驱动,支持多种文件系统。主要有以下特点:源码开放,易于移植,内核小,功能强大,运行稳定,效率高等。
uC/OS是源码工卡的实时嵌入式系统内核,主要有以下特点:源码公开,可移植性强,可固化,可剪裁,占先式,多任务,可确定性,提供系统服务等。
4.举例说明嵌入式设备在工控设备中的应用。 答:由于工业控制系统特别强调可靠性和实时性,“量身定做”的嵌入式控制系统恰能满足工业控制的需求。例如:工业过程控制,数字控制机床,电网设备监测,电力自动控制系统,石油化工监控等。
5.嵌入式技术的发展趋势有哪些?
答:未来嵌入式系统的发展趋势有:1.随着信息化与数字化的发展,嵌入式设备进行网络互联是未来发展的趋势。2.优化嵌入式系统软硬件内核,提高系统运行速度,降低功耗和硬件成本。3.指令集的并行计算技术将引入嵌入式微处理器。4.嵌入式微处理器将会向多核技术发展。5.嵌入式技术将引领信息时代。
第2章 ARM技术与ARM体系结构
1.简述ARM处理器内核调试结构原理
答:ARM处理器一般都带有嵌入式追踪宏单元ETM(Embedded Trace Macro),它是ARM公司自己推出的调试工具。ARM处理器都支持基于JTAG(Joint Test Action Group 联合测试行动小组)的调试方法。它利用芯片内部的Embedded ICE来控制ARM内核操作,可完成单步调试和断点调试等操作。当CPU处理单步执行完毕或到达断点处时,就可以在宿主机端查看处理器现场数据,但是它不能在CPU运行过程中对实时数据进行仿真。
ETM解决了上述问题,能够在CPU运行过程中实时扫描处理器的现场信息,并数据送往TAP(Test Access Port)控制器。上图中分为三条扫描链(图中的粗实线),分别用来监视ARM核,ETM,嵌入式ICE的状态。
2. 分析ARM7TDMI-S各字母所代表的含义。 答:ARM7 T D M I – S 中
ARM是Advanced RISC Machines的缩写 7是系列号;
T:支持高密度16位的Thumb指令集; D:支持JTAG片上调试;
M:支持用于长乘法操作(64位结果)ARM指令,包含快速乘法器;; I:带有嵌入式追踪宏单元ETM,用来设置断点和观察点的调试硬件;
S:可综合版本,意味着处理器内核是以源代码形式提供的。这种源代码形式又可以编译成一种易于EDA工具使用的形式。
3. ARM处理器的工作模式有哪几种,其中哪些为特权模式,哪些为异常模式,并指出处
理器在什么情况下进入相应的模式。
答:ARM技术的设计者将ARM处理器在应用中可能产生的状态进行了分类,并针对同一类型的异常状态设定了一个固定的入口点,当异常产生时,程序会自动跳转到对应异常入口处进行异常服务。
? 1.用户模式:非特权模式,也就是正常程序执行的模式,大部分任务在这种模式下
执行。在用户模式下,如果没异常发生,不允许应用程序自行改变处理器的工作模式,如果有异常发生,处理器会自动切换工作模式
? 2.FIQ模式:也称为快速中断模式,支持高速数据传输和通道处理,当一个高优先
级(fast)中断产生时将会进入这种模式。
? 3.IRQ模式:也称为普通中断模式,:当一个低优先级(normal)中断产生时将会进入
这种模式。在这模式下按中断的处理器方式又分为向量中断和非向量中断两种。通常的中断处理都在IRQ模式下进行。
? 4.SVC模式:称之为管理模式,它是一种操作系统保护模式。当复位或软中断指
令执行时处理器将进入这种模式。
? 5.中止模式:当存取异常时将会进入这种模式,用来处理存储器故障、实现虚拟存
储或存储保护。
? 6.未定义指令异常模式:当执行未定义指令时会进入这种模式,主要是用来处理未
定义的指令陷阱,支持硬件协处理器的软件仿真,因为未定义指令多发生在对协处理器的操作上。
? 7.系统模式:使用和User模式相同寄存器组的特权模式,用来运行特权级的操作
系统任务。
? 在这7种工作模式中,除了用户模式以外,其他6种处理器模式可以称为特权模式,
在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。
? 在这6种特权模式中,除了系统模式外的其他5种特权模式又称为异常模式,每种
异常都对应有自己的异常处理入口点。
4. 分析程序状态寄存器(PSR)各位的功能描述,并说明C,Z,N,V在什么情况下进行置位
和清零。 答:
? 条件位:
? N = 1-结果为负, 0-结果为正或0 ? Z = 1-结果为0, 0-结果不为0 ? C =1-进位, 0-借位
? V =1-结果溢出, 0结果没溢出
? Q 位:
? 仅ARM 5TE/J架构支持
? 指示增强型DSP指令是否溢出
? 中断禁止位:
? I = 1: 禁止 IRQ. ? F = 1: 禁止 FIQ.
? T Bit
? 仅ARM xT架构支持
? T = 0: 处理器处于 ARM 状态 ? T = 1: 处理器处于 Thumb 状态
? Mode位(处理器模式位):
? 0b10000 User ? 0b10001 FIQ ? 0b10010 IRQ
? 0b10011 Supervisor ? 0b10111 Abort ? 0b11011 Undefined ? 0b11111 System
5. 简述ARM处理器异常处理和程序返回的过程。 答:只要正常的程序流被暂时中止,处理器就进入异常模式。例如响应一个来自外设的中断。在处理异常之前,ARM7TDMI内核保存当前的处理器状态,这样当处理程序结束时可以恢复执行原来的程序。如果同时发生两个或更多异常,那么将按照固定的顺序来处理异常。
异常或入口 返回指令 处理器模式 优先级 BL SWI MOV PC,R14 6 6 5 3 4 2 1 0x00000008 0x00000004 0x0000000C 0x0000001C 0x00000018 0x00000010 0x00000000 向量表偏移 MOVS PC,R14_svc SVC 未定义的指令 MOVS PC,R14_und UND 预取指中止 快中断 中断 数据中止 复位 SUBS PC,R14_abt,#4 SUBS PC,R14_fiq,#4 SUBS PC,R14_irq,#4 SUBS PC,R14_abt,#8 无 ABT FIQ IRQ ABT SVC 在异常发生后,ARM7TDMI内核会作以下工作: 1.在适当的LR中保存下一条指令的地址 2.将CPSR复制到适当的SPSR中;
3. 将CPSR模式位强制设置为与异常类型相对应的值; 4.强制PC从相关的异常向量处取指。
ARM7TDMI内核在中断异常时置位中断禁止标志,这样可以防止不受控制的异常嵌套。 注:异常总是在ARM状态中进行处理。当处理器处于Thumb状态时发生了异常,在异常向量地址装入PC时,会自动切换到ARM状态。 当异常结束时,异常处理程序必须:
1.将LR中的值减去偏移量后存入PC,偏移量根据异常的类型而有所不同; 2.将SPSR的值复制回CPSR;
3.清零在入口置位的中断禁止标志。
注:恢复CPSR的动作会将T、F和I位自动恢复为异常发生前的值。
6. ARM处理器字数据的存储格式有哪两种?并指出这两种格式的区别。 答:ARM7TDMI处理器可以将存储器中的字以下列格式存储
? 大端格式(Big-endian) ? 小端格式(Little-endian) ? 小端存储器系统: 在小端格式中,高位数字存放在高位字节中。因此存储器系统字节0连接到数据线
7~0。
? 大端存储器系统: 在大端格式中,高位数字存放在低位字节中。因此存储器系统字节0连接到数据线31~24。
7. 分析带有存储器访问指令(LDR)的流水线运行情况,并用图示说明流水线的运行机制。 答:存储器访问指令LDR 流水线举例
取指的存储器访问和执行的数据路径占用都是不可同时共享的资源,对于多周期指令来说,如果指令复杂以至于不能在单个时钟周期内完成执行阶段,就会产生流水线阻塞。 对存储器的访问指令LDR是非单周期指令
LDR指令的执行,访问存储器,回写寄存器(占用了3个周期)。造成了MOV指令的执行被阻断。
8. 简述ARM9的5级流水线每一级所完成的功能和实现的操作。 答:ARM920在指令操作上采用5级流水线 .
取指:从指令Cache中读取指令。 译码:对指令进行译码,识别出是对哪个寄存器进行操作并从通用寄存器中读取操作数。 执行:进行ALU运算和移位操作,如果是对存储器操作的指令,则在ALU中计算出要访问的存储器地址。
存储器访问:如果是对存储器访问的指令,用来实现数据缓冲功能(通过数据Cache)。 寄存器回写:将指令运算或操作结果写回到目标寄存器中。
9. 什么叫流水线互锁?应如何来解决,举例说明。
答:互锁:当前指令的执行需要前面指令的执行结果,但前面的指令没有执行完毕,引起流水线的等待。互锁发生时,硬件会停止指令的执行,直到数据准备好。
上边程序中ORR指令执行时需要使用LDR指令加载后的R4寄存器,因此造成了ORR指令的等待。
编译器以及汇编程序员可以通过重新设计代码的顺序或者其他办法来减少互锁的数量。
第3章 ARM指令集寻址方式
1.在指令编码中,条件码占几位,最多有多少个条件,各个条件是如何形成的? 答:条件码占4位,最多有15个条件 操作码 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 条件助记符 标志 EQ NE CS/HS CC/LO MI PL VS VC HI LS GE LT GT LE AL NV Z=1 Z=0 C=1 C=0 N=1 N=0 V=1 V=0 C=1,Z=0 C=0,Z=1 N=V N!=V Z=0,N=V Z=1,N!=V 任何 任何 含义 相等 不相等 无符号数大于或等于 无符号数小于 负数 正数或零 溢出 没有溢出 无符号数大于 无符号数小于或等于 有符号数大于或等于 有符号数小于 有符号数大于 有符号数小于或等于 无条件执行 (指令默认条件) 从不执行(不要使用)
2. 指令条件码中,V标志位在什么情况下才能等于1? 答:V—溢出标志位 对于加减法运算指令,当操作数和运算结果为二进制补码表示的带符号数时,V=1表示符号
位溢出,其他指令通常不影响V位。
3. 在ARM指令中,什么是合法的立即数?判断下面各立即数是否合法,如果合法则写出在指令中的编码格式(也就是8位常数和4位移位数) 0x5430 0x108 0x304 0x501 0xfb10000 0x334000 0x3FC000 0x1FE0000 0x5580000 0x7F800 0x39C000 0x1FE80000
答:立即数必须由1个8位的常数通过进行32位循环右移偶数位得到,其中循环右移的位数由一个4位二进制的两倍表示。即一个8位的常数通过循环右移2*rotate_4位(即0,2,4,。。。30)得到 0X5430
0000,0000,0000,0000,0101,0100,0011,0000 非法立即数 0X108
0000,0000,0000,0000,0000,0001,0000,1000 0x42循环右移30位 (rotate_4=0xF) 0X304
0000,0000,0000,0000,0000,0011,0000,0100 0xC1循环右移30位 (rotate_4=0xF) 0x501
0000,0000,0000,0000,0000,0101,0000,0001 非法立即数 0xfb10000
0000,1111,1011,0001,0000,0000,0000,0000 非法立即数 0x334000
0000,0000,0011,0011,0100,0000,0000,0000 0Xcd 循环右移18位(rotate_4=0x9) 0x3FC000
0000,0000,0011,1111,1100,0000,0000,0000 0XFF 循环右移18位(rotate_4=0x9) 0x1FE0000
0000,0001,1111,1110,0000,0000,0000,0000 非法立即数 0x5580000
0000,0101,0101,1000,0000,0000,0000,0000 非法立即数 0x7F800
0000,0000,0000,0111,1111,1000,0000,0000 非法立即数 0x39C000
0000,0000,0011,1001,1100,0000,0000,0000 0XE7循环右移18位(rotate_4=0x9) 0x1FE80000
0001,1111,1110,1000,0000,0000,0000,0000 非法立即数
4.分析逻辑右移,算术右移,循环右移,带扩展的循环右移它们间的差别。 答:LSL逻辑左移 :
3100
LSR逻辑右移 :
3100
ASR算术右移 :
310
ROR循环右移 :
310
RRX带扩展的循环右移:
31C0
5.ARM数据处理指令具体的寻址方式有哪些,如果程序计数器PC作为目标寄存器,会产生什么结果?
答:数据处理指令寻址方式具体可分为5种类型:
1)第二操作数为立即数2)第二操作数为寄存器3)第二操作数为寄存器移位方式且移位的位数为一个5位立即数4)第二操作数为寄存器移位方式且移位数值放在寄存器中5)第二操作数位寄存器进行RRX移位得到。如果PC (R15)用作目标寄存器,指令会产生不可预知的结果。
6.在Load/Store指令寻址中,字,无符号字节的Load/Store指令寻址和半字,有符号字节寻址,试分析它们之间的差别。 答:在Load/Store指令寻址中,
字,无符号字节的Load/Store指令寻址中共有以下3种内存地址构成格式:
1)Addressing_mode 中的偏移量为立即数 2)Addressing_mode 中的偏移量为寄存器的值 3)Addressing_mode 中的偏移量通过寄存器移位得到
半字,有符号字节的Load/Store指令寻址中共有以下2种内存地址构成格式:
1)Addressing_mode 中的偏移量为立即数 2)Addressing_mode 中的偏移量为寄存器的值
7.块拷贝Load/Store指令在实现寄存器组合连续的内存单元中数据传递时,地址的变化方式有哪几种类型,并分析它们的地址变化情况。
答:批量Load/Store指令在实现寄存器组合连续的内存单元中数据传递时,地址的变化方式有以下4种类型:
? 后增IA (Increment After) :每次数据传送后地址加4; ? 先增IB (Increment Before) :每次数据传送前地址加4 ; ? 后减DA (Decrement After) :每次数据传送后地址减4 ; ? 先减DB (Decrement Before) :每次数据传送前地址减4 ;
8.栈操作指令地址的变化方式有哪几种类型,并分析它们的地址变化情况,从而得出栈操作指令寻址和块拷贝Load/Store指令之间的对应关系。
答:根据堆栈指针的指向位置不同和堆栈的生长方向不同,共有4种类型的堆栈工作方式: 满递增堆栈FA:堆栈指针指向最后压入的数据,且由低地址向高地址生成。 满递减堆栈FD:堆栈指针指向最后压入的数据,且由高地址向低地址生成。
空递增堆栈EA:堆栈指针指向下一个要放入数据的空位置,且由低地址向高地址生成。
空递减堆栈ED:堆栈指针指向下一个要放入数据的空位置,且由高地址向低地址生成。
9.分析协处理器加载/存储指令的寻址方式种的内存地址索引格式中不同的汇编语法格式下内存地址的计算方法。 答:协处理器加载/存储指令的寻址方式种的内存地址索引格式中,索引格式类似于LDR/STR指令寻址中的立即数作为地址偏移量的形式。Addressing_mode中的偏移量为8位立即数的汇编语法格式有以下3种:
? 前变址不回写形式:[
第一个内存地址编号为基地址寄存器Rn值加上/减去imm_offset8的4倍,后续的每一个地址是前一个内存地址加4,直到协处理器发出信号,结束本次数据传输为止。 ? 前变址回写形式: [
第一个内存地址编号为基地址寄存器Rn值加上/减去imm_offset8的4倍,后续的每一个地址是前一个内存地址加4,直到协处理器发出信号,结束本次数据传输为止。当指令执行时,生成的地址值将写入基址寄存器。
? 后变址回写形式: [
内存地址为基址寄存器Rn的值,当存储器操作完成后,将基地址寄存器Rn值加上/减去imm_offset8的4倍,后续的每一个地址是前一个内存地址加4,直到协处理器发出信号,结束本次数据传输为止。最后将Rn值加上/减去imm_offset8的4倍写回到基址寄存器Rn(更新基地址寄存器)。
10. 写出下列指令的机器码,并分析指令操作功能。 MOV R0,R1 MOV R1,,0X198
ADDEQS R1,R2,,0xAB CMP R2,#0Xab LDR R0,[R1,#4] STR R0,[R1,R1,LSL #2]! LDRH R0,[R1,#4] LDRSB R0,[R2,#-2]! STRB R1,[R2,#0Xa0]
LDMIA R0,{R1,R2,R8}
STMDB R0!,{R1-R5,R10,R11} STMED SP!{R0-R3,LR} 答:机器码部分略。
MOV R0,R1 ;R0《-----R1 MOV R1,,0X198 ;R0《----0X198
ADDEQS R1,R2,,0xAB ;当Z=1时,R1《---R2+0xAB 并影响标志位 CMP R2,#0Xab ;R2-0xAB,并影响标志位 LDR R0,[R1,#4] ;R0《---【R1+4】 STR R0,[R1,R1,LSL #2]! ;【R1+R1*4】《---R0,R1=R1+R1*4
LDRH R0,[R1,#4] ;R0《---【R1+4】半字,R0的高16位清零
LDRSB R0,[R2,#-2]! ;R0《---【R2-2】字节,R0有符号扩展为32位,R2=R2-2 STRB R1,[R2,#0Xa0] ;【R2+0Xa0】《----R1低8位, LDMIA R0,{R1,R2,R8}
;将内存单元【R0】~【R+11】以字为单位读取到R1,R2,R8中 STMDB R0!,{R1-R5,R10,R11}
将寄存器R1~R5,R10,R11的值以字为单位依次写入【R0】中,每写一个字之前R0=R0-4 STMED SP!{R0-R3,LR}
将寄存器R0~R3,LR的的值以字为单位依次写入【SP】中,每写一个字之后SP=SP-4
第4章 ARM指令集系统
1.ARM指令可分为哪几类?说出哪几条指令是无条件执行的。
答:ARM微处理器的指令集可以分为:数据处理指令,分支指令,加载/存储指令,批量加载/存储指令,交换指令,程序状态寄存器(PSR)处理指令,协处理器操作指令和异常产生指令八大类。
几乎所有的ARM指令都是可以有条件执行的。带链接和状态切换的跳转指令BLX,当目标地址由程序标号给出时,即:BLX
由于指令码中是没有条件编码位的,所以指令是无条件执行的。
2.如何实现两个64位数的加法操作,如何实现两个64位数的减法操作,如何求一个64位数的负数?
答:1)使用ADC实现64位加法,结果存于R1、R0中:
ADDS R0,R0,R2 ;R0等于低32位相加,并影响标志位 ADC R1,R1,R3 ;R1等于高32位相加,并加上低位进位
2)使用SBC实现64位减法,结果存于R1、R0中: SUBS R0,R0,R2 ; 低32位相减,并影响标志位 SBC R1,R1,R3 ;高32位相减,并减去低位借位
3)使用RSC指令实现求64位数值的负数 : RSBS R2,R0,#0 RSC R3,R1,#0
3.写出LDRB指令与LDRSB指令的二进制编码格式,并指出它们之间的区别。 答:LDRB指令的二进制编码格式:
LDRSB指令的二进制编码格式:
LDRB指令用于将内存中的一个8位字节数据读取到指令中的目标寄存器的低8位中,寄存器的高24位用零扩展。
LDRSB指令用于将内存中的一个8位字节数据读取到指令中的目标寄存器的低8位中,寄存器的高24位用符号位扩展。
4.分析下列每条语句的功能,并确定程序段所实现的操作。 CMP R0,,0 MOVEQ R1,,0 MOVGT R1,,1
答:CMP R0,,0 ;比较R0与0的大小
MOVEQ R1,,0 ;若R0==0,则R1=0 MOVGT R1,,1 ;若R0>0,则R1=1
5.请使用多种方法实现将字数据0xFFFFFFFF送入寄存器R0 答:1)MVN R0,#0 2)MOV R0,#1
RSB R0,R0,#0
6.写一条ARM指令,分别完成下列操作: (1)R0=16 (2)R0=R1/16 (3)R1=R2*3 (4)R0=-R0 答:
(1)R0=16 MOV R0,#16 (2)R0=R1/16 MOV R0,R1,LSR #4 (3)R1=R2*3 MOV R3,#3 MUL R1,R2,R3 (4)R0=-R0 RSB R0,R0,#0
7.编写一个ARM汇编程序,累加一个队列中的所有元素,碰到0时停止。结果放入R4。 答:假设队列为地址从R0开始递增的字队列: LOOP
LDR R1, [R0,#4]! MOVS R2, R1 BEQ END
ADD R4,R4,R2 B LOOP
END
8.写出实现下列操作的ARM指令:
当Z=1时,将存储器地址为R1的字数据读入寄存器R0. 当Z=1时,将存储器地址为R1+R2的字数据读入寄存器R0 将存储器地址为R1-4的字数据读入寄存器R0。
将存储器地址为R1+R6的字数据读入寄存器R0,并将新地址R1+R6写入R1。 答:1)LDREQ R0, [R1] 2)LDREQ R0, [R1,R2] 3)LDR R0, [R1,#-4] 4)LDR R0, [R1,R6]!
9.写出下列ARM指令所实现的操作: LDR R2,[R3,#-4]! LDR R0,[R0],R2 LDR R1,[R3,R2,LSL #2]! LDRSB R0,[R2,#-2]! STRB R1,[R2,,0xA0] LDMIA R0,{R1,R2,R8}
STMDB R0!,{R1-R5,R10,R11} 答:LDR R2,[R3,#-4]! ;R2<-[R3-4], R3=R3-4
LDR R0,[R0],R2 ;R0<-[R0], R0=R0+R2 LDR R1,[R3,R2,LSL #2]! ;R1<-[R3+R2*4], R3=R3+R2*4 LDRSB R0,[R2,#-2]!
;R0低8位<-[R2-2]字节数据,,R0高24位符号扩展,R2=R2-2 STRB R1,[R2,#0xA0] R1低8位->【R2+0xA0】 LDMIA R0,{R1,R2,R8}
从地址R0开始的内存中依次读取字数据,送入寄存器R1,R2,R8 STMDB R0!,{R1-R5,R10,R11}
将寄存器R11,R10,R5-R1的字数据,依次写入地址R0中,每次写入前R0=R0-4
10.SWP指令的优势是什么?
答:SWP指令支持原子操作,它能在一条指令中完成存储器和寄存器之间的数据交换。
11. 如何用带PSR操作的批量字数据加载指令实现IRQ中断的返回?
答:在进入IRQ中断处理程序时,首先计算返回地址,并保存相关的寄存器
? SUB R14,R14,#4 ;
? STMFD R13!, {R0-R3, R12, LR}
如果IRQ中断处理程序返回到被中断的进程则执行下面的指令。该指令从数据栈中恢复寄存器R0~R3及R12的值,将返回地址传送到PC中,并将SPSR_irq值复制到CPSR
正在阅读:
第四章 品牌资源发展策划07-20
高数(上)期末考试试题B卷(06-07学年秋季8k横排不分开)03-02
凤翔县西关街道路、排水工程施工组织设计04-28
选择求真目录04-16
国内外主观幸福感的研究现状12-22
雪的自述作文500字06-21
工作伤感02-17
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 习题
- 嵌入式
- 答案
- 编程
- 结构
- 系统
- 邱铁著
- ARM
- (新)湘教版八年级地理下册7.5《长株潭城市群内部的差异与联系》教案
- 国际金融计算题 精选含答案
- 主成分分析在STATA中的实现以及理论介绍
- 高三年级培优辅差方案
- “课外阅读导引单的设计与运用研究”结题报告 - 图文
- 江苏2014年对口单招语文试卷
- 高低压配电柜改造规范书 - -
- 公共卫生与预防医学导师简介
- 15秋东财《经济学》在线作业三
- 会计名词中英文对照表会计实务经验之谈
- “进村入户”大走访调研报告
- 部编人教版小学语文二年级上册全册单元试题2017年用 - 图文
- 显卡维修的一些心得体会
- quartus软件及modelsim仿真实验报告
- 香港中文大学校长毕业典礼讲话
- 五年级上数学单元教案小数加法和减法1 - 苏教版(2014秋)
- 国际私法学范围
- ATPDraw使用方法及心得
- 江苏省医院投诉管理实施细则(试行)
- 水工程经济课后习题答案1