《微机原理与嵌入式系统基础--练习_答案》1(3)

2019-06-05 00:23

opcode 指令助记符,用于指定指令的操作功能。 cond 执行条件,用于指定指令的执行条件。 S 用于指定指令的执行是否影响CPSR寄存器的值,书写时影响CPSR。 Rd 目标寄存器,用于存放运算的结果。 Rn 第1个操作数的寄存器。用于存放参与运算的操作数1。 operand2 第2个操作数。用于指定参与运算的操作数2。

4、 指出下列指令是否正确,若不正确请说明原因。 ⑴ MOV R1, #101 ⑵ MVN R1, #0x10F ⑶ LDMIA R11, {R2-R8} ⑷ ADD R0, R2, #4! ⑸ LDR R4, [R5]! ⑹ MRS PC, CPSR ⑺ LDMFD R0!, {R2, R5-R8} ⑻ ADD R3, [R3], R7 答: (1)对 (2)错,MVN指令中的源操作数不是8bit位图数据 (3)对 (4)错,立即数后不能附加!操作符 (5)对 (6)错:目标寄存器不能为R15,即PC (7)对 (8)错,ADD指令中的操作数不能用存储器访问寻址方式

(对于1和2两题,对于指令的可操作数的范围不明确,很大部分人都是凭借感觉判断,对于3,7两题,对于多寄存器的操作的规则掌握的不好,没有清晰的如何进行存取操作的思路)

5、 何谓ARM指令的条件码?默认的条件码是什么?举例说明ARM指令的条件码对指令执行的影

响。

答:所谓的ARM指令条件码分别对应了CPSR寄存器标志位(N、Z、C、V)的16个值组合状态,处理器根据CPSR中标志位N、Z、C和V的值来确定该指令是否执行,当CPSR中的条件码标志满足时,处理器执行本条指令,否则本条指令等价于空操作。

其中条件(AL) 是缺省条件,可以省略。如果指令不含有条件码时,就默认是该条件。

6、 解释“满堆栈”、“空堆栈”、“递增堆栈”和“递减堆栈”? ARM指令系统中是如何支持的? 答:满堆栈就是堆栈指针总是指向最后压入堆栈的数据的存储单元;

空堆栈就是堆栈指针总是指向下一个将要放入数据的存储单元; 递增堆栈就是堆栈底部位于低地址处,堆栈向高地址方向增长; 递减堆栈就是堆栈底部位于高地址处,堆栈向低地址方向递减;

ARM指令系统支持的是满递减堆栈,即堆栈底部位于高地址处,堆栈向低地址方向递减,且堆栈指针总是指向最后压入堆栈的数据的存储单元;

7、 请说明MOV指令与LDR加载指令的区别和用途。

答:MOV指令用于将8位位图立即数或寄存器数据传送到目标寄存器(Rd),也可用于移位运算等操作。

LDR指令用于从存储器中加载一个数据到寄存器中。用于访问存储器操作。

8、 什么是?文字池??它在ARM汇编程序中用和用途?

答:文字池是镶嵌在代码中的一段存储空间,可用来存放常量数据;这些常量可以是程序中的立即

数,也可以是存储单元地址。

ARM汇编语言中使用LDR加载指令附加文字池的方法,以实现对任意32bit立即数的访问。

9、 解释B指令、BL指令与BX指令的功能差别?简述它们的应用场合。 答:B指令跳转到标号指定的地址执行程序。

BL指令先将下一条指令的地址拷贝到R14中,然后跳转到标号指定地址运行程序。

BX指令跳转到Rm指定的地址处执行程序,若Rm[0]为1,则跳转时自动将CPSR中的标志T置位,即把目标地址的代码解释为Thumb代码;若Rm[0]为0,则跳转时自动将CPSR中的标志T清零,即把目标地址的代码解释为ARM代码。该指令用于处理器状态切换。

10、 ARM汇编指令条件码如下表,分析下两段程序片断的功能,写出其等价的类C语言功能描述:

条件助记符 EQ NE CS/HS CC/LO MI PL VS VC HI LS GE LT GT LE AL NV 程序片断1: CMP R0, R1 ADDHI R0 , R0 , #1 ADDLS R1 , R1 , #1

答:(1)if(R0 > R1) R0++; else R1++;

11、 使用ARM汇编指令的条件执行功能,翻译下面C代码语句。

标志 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: CMP R0 , #10 CMPNE R1 , #20 ADDNE R0 , R0 , R1

(2) if( (R0!=10)&&(R1!=20) ) R0 = R0 + R1;

⑴ if(x = = y) a = b + c;

else

a = b – c;

⑵ if(x = = y) && ( a = = b)

c = c * 2;

答:(1)MOV R0, x; (2) MOV R0, x; MOV R1, y; MOV R1, y; MOV R2, a; MOV R2, a MOV R3, b; MOV R3, b

MOV R4, c; MOV R4, c CMP R1, R2; CMP R0, R1 ADDEQ R2, R3, R4; CMPEQ R2, R3 SUBNE R2, R3, R4; MOV R4, R4, LSL #2

(从11题和12题结合来看,对于将汇编程序到C程序的转变掌握较好,反之则有一些欠缺,说明已经有了读汇编的能力,但是使用上还存在问题;汇编指令是针对寄存器的,不能在指令中同时使用两个数据,例如:CMP x,y,必须将数值首先存入寄存器中)

12、 下列代码段是实现开IRQ中断和关IRQ中断功能,试补齐空白处内容。 ⑴ ______ R0,CPSR ⑵ ______ R1,CPSR ORR R1, ________ BIC R1,R0,_______ ______ CPSR_c, R1 ______ CPSR_c, R1 答:(1) MRS R0, CPSR (2) MRS R1, CPSR BIC R1, R0,#0x80 ORR R1, #0x80 MSR CPSR_c, R1 MSR CPSR_c, R1

13、 若ARM CPU中各寄存器及存储单元参数如下图所示,试写出指令执行后,各寄存器及存储单

元中内容为多少。 ⑴ STMIA R13!,{R0-R3} ⑵LDMDB R13, { R0-R3}

存储地址0x000080000x00008004执行前R30x00000004R20x00000003R10x00000002R00x00000001R130x000080000x000080080x0000800C0x000080100x000080140x000080180x0000801C0x00008020执行后R3R2R1R0R13数据存储地址数据0x000080000x111111110x000080040x22222222执行前R30x00000004R20x00000003R10x00000002R00x00000001R130x0000800C0x000080080x333333330x0000800C0x444444440x000080100x555555550x000080140x666666660x000080180x777777770x0000801C0x888888880x000080200x99999999执行后R3R2R1R0R13STMIAR13!,{R0-R3}答:

LDMDBR13,{ R0-R3}

存储地址数据存储地址数据0x000080000x000000010x000080040x00000002执行前R30x00000004R20x00000003R10x00000002R00x00000001R130x000080000x000080080x000000030x0000800C0x000000040x000080100x000080140x000080180x0000801C0x00008020执行后0x00000004R30x00000003R20x00000002R10x00000001R00x000080000x111111110x000080040x22222222执行前R30x00000004R20x00000003R10x00000002R00x000000010x000080080x333333330x0000800C0x444444440x000080100x555555550x000080140x666666660x000080180x777777770x0000801C0x888888880x000080200x99999999执行后0x44444444R30x33333333R20x22222222R10x11111111R00x00008000R130x00008010R13R130x00008010STMIAR13!,{R0-R3}LDMDBR13,{ R0-R3}

(这道题同样的反映出了多寄存器的掌握不够熟练)

14、 使用ARM指令实现2个128bit数的减法的功能段(第一个数由高到低放在寄存器R3~R0,第

二个数由高到低放在寄存器R7~R4,结果差由高到低放在寄存器R11~R8中。) 答: SUBS R8, R0,R4 ;低32bit运算,可能产生借位 SBCS R9,R1,R5 ;带借位计算次低32bit SBCS R10,R2,R6 ;带借位计算次高32bit SBCS R11,R3,R7 ;带借位计算高32bit

练习题

1、 什么是计算机语言?

答:机器语言是一种用二进制代码表示指令和数据,能被机器直接识别的计算机语言。 2、 相对于高级语言,汇编语言有何特点?

答:汇编语言是一种面向物理层操作的计算机语言。不同的处理器类型,具有不同的汇编语言。使用汇编语言编写程序能够直接利用硬件系统的特性(如寄存器、标志、中断系统等),可直接对位、字节、字寄存器或存储单元、I/O端口进行处理,同时也能直接使用CPU指令系统提供的各种寻址方式,编制出高质量的程序,这样的程序不但占用内存空间少,而且执行速度快。当然,由于汇编语言不直接支持复杂的抽象数据类型,在描述目标系统数学模型时,还需要程序员在存储器单元组织各种抽象数据类型的存储方式,使得汇编语言程序设计较高级语言困难得多,需要较多的软件开发时间,也增加了程序设计过程中出错的可能性,程序维护也困难。

3、 如何在汇编程序中显示声明文字池?什么情况下需要显示声明文字池?一般应在程序的什么位置

显示声明文字池?为什么?

答:使用LTORG汇编器伪指令用于显示声明一个文字池(literal pool)。 实际应用中,如果ARM需要处理的操作数不符合8bit位图立即数的要求时,那么就需要使用文字池来存放这个常量。

在ARM汇编语言中,使用LDR加载指令相对寻址文字池中存放的任意32bit立即数。因为LDR指令的寻址范围是指令位置的前后4KB,所以如果LDR指令所在位置距离文字池超出4KB范围,那么需要在程序中的适当位置,使用LTORG伪指令显式声明文字池。

解决方法:一般总可以在LDR伪指令前后4KB的范围内找到分支指令,文字池可声明在分支(B)指令之后的紧邻位置,因为B指令总是会将程序的执行转移到其它地方的,所以这样做不会影响代码的正常执行。

4、 简述汇编程序设计的一般流程。

答:使用计算机通过编程序解决某一问题时,通常按以下步骤进行:

1分析问题,建立数学模型; ○

2确定算法; ○

3设计程序流程图; ○

4合理分配寄存器、存储空间和外设资源; ○

5编制程序; ○

6调试程序; ○

7形成文档; ○

5、 实现汇编程序分支的关键语句有哪几条?分别用于什么场合?

答:汇编程序分支结构的实现是通过在运行时由机器根据不同的条件自动作出判断,选择执行相应的处理程序段。分支指令主要有BL指令、B指令和BX指令,分别用于调用子程序、直接跳转和带状态的跳转场合。

6、 循环控制有哪几种方法?各有什么应用特点?

答:循环控制有两种方法。 ○1计数控制循环:通过计数循环次数,判断是否已达到预定次数,控制循环。适合已知循环次数的循环控制。

○2条件控制循环:通过判断循环终止条件是否已成立,控制循环。适合仅知道结束条件的循环控


《微机原理与嵌入式系统基础--练习_答案》1(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:青岛市2015年中考模拟试卷 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: