李广军《微处理器系统与嵌入式系统》习题解答

更新时间:2023-09-09 23:14:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第一章习题解答

1.1 什么是程序存储式计算机?

程序存储式计算机指采用存储程序原理工作的计算机。 存储程序原理又称“冯·诺依曼原理”,其核心思想包括: 程序由指令组成,并和数据一起存放在存储器中;

计算机启动后,能自动地按照程序指令的逻辑顺序逐条把指令从存储器中读出来,自动完成由程序所描述的处理工作。 1.2 通用计算机几个主要部件是什么? 主机(CPU、主板、内存);

外设(硬盘/光驱、显示器/显卡、键盘/鼠标、声卡/音箱); 1.3 以集成电路级别而言,计算机系统的三个主要组成部分是什么? 中央处理器、存储器芯片、总线接口芯片 1.4 阐述摩尔定律。

每18个月,芯片晶体管密度提高一倍,运算性能提高一倍,而价格下降一半。 1.5 讨论:摩尔定律有什么限制,可以使用哪些方式克服这些限制?摩尔定律还会持续多久?在摩尔定律之后电路将如何演化?

摩尔定律不能逾越的四个鸿沟:基本大小的限制、散热、电流泄露、热噪。具体问题如:晶体管体积继续缩小的物理极限,高主频导致的高温??

解决办法:采用纳米材料、变相材料等取代硅、光学互联、3D、加速器技术、多内核??

(为了降低功耗与制造成本,深度集成仍是目前半导体行业努力的方向,但这不可能永无止,因为工艺再先进也不可能将半导体做的比原子更小。用作绝缘材料的二氧化硅,已逼近极限,如继续缩小将导致漏电、散热等物理瓶颈,数量集成趋势终有终结的一天。一旦芯片上线条宽度达到纳米数量级时,相当于只有几个分子的大小,这种情况下材料的物理、化学性能将发生质的变化,致使采用现行工艺的半导体器件不能正常工作,摩尔定律也就要走到它的尽头了。业界专家预计,芯片性能的增长速度将在今后几年趋缓,一般认为摩尔定律能再适用10年左右,其制约的因素一是技术,二是经济。)

1.6 试以实例说明计算机系统结构、计算机组成与计算机实现之间的相互关系与相互影响。

计算机系统结构主要是指程序员关心的计算机概念结构与功能特性,而计算机组成原理则偏重从硬件角度关注物理机器的组织,更底层的器件技术和微组装技术则称为计算机实现。例如:确定指令集中是否有乘法指令属于计算机体系结构的内容,而乘法指令是由专门的乘法器实现还是用加法器实现则属于计算机组成原理的内容,乘法/加法器底层的物理器件类型及微组装技术则属于计算机实现的内容。

同一计算机制造商提供的不同系列的计算机通常采用不同的结构,而同系列的计算机则具有相同的结构和不同的组织,因此同一系列的不同型号计算机价格和性能特点也不相同。如某系列机都支持相同的指令系统,但其中的低档机可采用顺序方式对指令进行分析、处理,而高档机则可采用流水或其它并行处理方式;或某系列机都支持相同的数据形式(如16/32位的定点数、32/64/128位的浮点数),但其中的低档机可采用采用较窄的数据通路宽度(8位或16位),而高档机则可采用较宽的数据通路宽度(32位)。另一方面,显然计算机现阶段能达到的实现技术会直接制约其可采用的系统结构和组成方法。

1.7 区分微处理器的关键特征是什么?

微处理器可通过以下两个基本特征来区分:

字长:表示CPU一次传送或处理数据的最大二进制位数。通常与CPU的数据总线宽度、寄存器宽度以及ALU宽度一致。

主频:通常以MHz表示,决定CPU内的最小时钟速率,从而决定处理器每秒可执行的指令数目。

1.8 某测试程序在一个40 MHz处理器上运行,其目标代码有100 000条指令,由如下各类指令及其时钟周期计数混合组成,试确定这个程序的有效CPI、MIPS的值和执行时间。

指 令 类 型 整数算术 数据传送 浮点数 控制传送 1. Cycles Per Instruction(CPI)

=(45000/100000)*1+(32000/100000)*2+(15000/100000)*2+(8000/100000)*2 =0.45*1+0.32*2+0.15*2+0.08*2=1.55 2. Million Instructions Per Second(MIPS)

=40/1.55=25.8 3. 执行时间T

=(100000*1.55)*(1/(40*106) )=15.5/4*10-3= 3.875*10-3 s= 3.875ms

指 令 计 数 45 000 32 000 15 000 8000 时钟周期计数 1 2 2 2 1.9存储器分层结构是如何提高性能的?

常用的存储设备或技术有很多,通常来说速度越快则每位价格越高。因此现代计算机系统通常把不同容量、不同速度的存储设备按一定的层次结构组织起来,形成一个统一的存储系统,以解决存储容量、存取速度和价格之间的矛盾。

多层次存储系统要达到的目标是:整个存储系统速度接近M1(最靠近CPU的存储层)而价格和容量接近Mn(最远离CPU的存储层)。这就要求越靠近CPU的存储设备速度越快,当然每位价格也就越高,容量也就越小。由于绝大多数程序访问具有局部性原理,因此可以把近期CPU需要使用的程序和数据放在尽可能靠近CPU的存储器中。CPU访问存储器时,首先是访问M1,若M1“命中”则直接存取,若M1“失

效”则将M2中包含所需数据的块或页调入M1;若在M2中也找不到,就访问M3,依此类推。这样CPU对存储器的大部分访问操作都可以针对速度较快的存储层完成,整个系统的性能也就得到了提高。

1.10 说明RISC架构与CISC架构之间的区别 。

设计重点 指令集 流水线 寄存器 load-store结构 RISC CISC 降低指令执行的硬件复杂度,但对编译器有侧重指令执行的硬件功能性,控制更高的要求 器的硬件设计复杂 指令种类少,长度固定,且执行简单,可在指令复杂,长度通常不固定,执行单时钟周期完成 也需要多个周期 指令处理过程可被拆分成能够被流水线并行指令执行通常需要调用微程序 执行的规则步骤 有更多的通用寄存器 专用寄存器较多。 为避免耗时的访存操作,把访存与数据处理处理器能够直接处理内存中的数分开。 据。 RISC,CISC的一些看法误区: RISC指令都是简单指令

LDREQ R0,[R1,R2,LSR #16]!指令的强大,一般的CISC处理器望尘莫及。RISC的“简单”是指指令集的执行时间、指令长度、指令格式整齐划一。 CISC的复杂指令速度慢、执行效率很低

现代CISC处理器具有非常长的流水线(PIII采用了25级的流水线),执行速度快。但老的CPU执行速度可能较慢。但RISC不管是老的CPU,还是新的CPU,指令执行时间都是相同的,不需要在对指令执行作出优化。 RISC处理器比CISC处理器需要更多的寄存器

这不是一个需求问题,而是一个实现问题。所以有的CISC寄存器与RISC相当。一般情况RISC需要比较多的寄存器。 RISC都有流水线,ARM2没有采用流水线。

第三章习题

3.1什么是冯·诺伊曼计算机结构?其运行的基本原理如何?

冯.诺依曼计算机由运算器、控制器、存储器、输入设备和输出设备构成,采用二进制表示信息,以存储器为中心,按存储程序原理工作。

存储程序原理指编好的程序首先放入存储器,开始工作后,由控制器自动、高速依次从存储器中取出指令并执行。

3.2. 微处理器的体系结构可以分为几种?试分别说明各种体系结构的优缺点。

类型 优点 缺点 指令集设计与硬件电路设计紧密相关,设计过程复杂,难以实现复杂指令,设计难以重用。 微代码的开销大于硬件实现,微控制必须要比CPU运行速度更高。 处理器设计较为困难,在设计中需要解决数多种冲突问题 更多的硬件资源,设计极其复杂 随机逻辑 针对指令硬件做了专门的优化,所用的逻辑门数少,制造费用低。 微码体系结构 流水线体系结构 超标量体系结构 相比于硬件,微代码不容易出错,建立微代码比较省时,改动微代码更为容易,CPU版本升级简单。 并行的执行不同指令的不同阶段,提高了指令的吞吐率,增强了处理器性能。 实现了真正的并行执行,让MIPS可以大于时钟频率。 3.3 高级编程语言、汇编语言以及机器语言之间有哪些不同?

机器语言是直接用二进制代码表达的计算机语言。指令用“0”和“1”组成,并分成若干段,各段的编码表示不同的含义。机器语言面向硬件,是唯一可以由硬件直接执行的语言。

汇编语言采用符号代替机器语言中的二进制码:用助记符(Mnemonic)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。汇编语言与机器语言一一对应,因此不具有移植性,但更易于读写和理解。汇编语言源程序需要汇编成机器语言才能交给硬件执行。

高级编程语言语法和结构更类似普通英文,且由于远离对硬件的直接操作,因此移植性较好。高级语言源程序需要编译(或解释)成机器语言才能交给硬件执行。 3.5 什么是计算功能指令、数据传输指令以及控制流程指令?

计算功能指令:对数据进行处理完成算术运算或逻辑运算等的指令。

数据传输指令:负责把数据、地址或立即数传送到寄存器、I/O端口或存储单元中,或者反方向传送的指令。

控制流程指令:用来控制程序执行流程的指令,有测试、转移、跳转等子类。 3.6 解释跳转、分支、调用以及中断所需进行的操作。

跳转:根据“跳转”指令指计算目的地址,修改程序指针。

分支:根据“分支”指令判断执行条件,计算跳转地址,修改程序指针。

调用:保存断点,根据“调用”指令计算子程序入口地址,修改程序指针,执行完毕后恢复断点。

中断:保护断点及现场,查找中断向量表以确定中断程序入口地址,修改程序指针,执行完毕后恢复现场及断点。

3.7固定长度指令编码有什么优缺点?

可以简化硬件设计、减小指令译码的时间,但指令编码的效率不高,信息冗余度大,可扩展性差。

3.8 在处理器工作频率、CPI和处理器性能方面,哪些因素会增加流水线深度?

时钟周期越小,则要求组合电路的延迟越小,流水线级数越多,但过多的流水线无助于处理器工作频率的提高。

CPI越大,为了提高运算效率则流水级数需求越多。

处理器性能和流水线级数是一个动态平衡的关系,需要具体在设计流水线的同时考虑冲突。

3.9一个时钟频率为2.5 GHz的非流水式处理器,其平均CPI是4。此处理器的升级版本引入了5级流水。然而,由于如锁存延迟这样的流水线内部延迟,使新版处理器的时钟频率必须降低到2 GHz。

(1) 对一典型程序,新版所实现的加速比是多少? (2) 新、旧两版处理器的MIPS各是多少?

(1)对于一个有N条指令的程序来说:

非流水式处理器的总执行时间T0?(4?N)/(2.5?109)?1.6N?10?9s 5级流水处理器的总执行时间T1?(N?5?1)/(2?109)?2(N?4)?10?9s 加速比=

T03.2N,N很大时加速比≈3.2 ?T1N?4(2)非流水式处理器CPI=4,则其执行速度=2500MHz/4=625MIPS。

5级流水处理器CPI=1,则其执行速度=2000 MHz /1=2000 MIPS。

3.10随机逻辑体系结构的处理器的特点是什么?详细说明各部件的作用。

随机逻辑的特点是指令集设计与硬件的逻辑设计紧密相关,通过针对特定指令集进行硬件的优化设计来得到逻辑门最小化的处理器,以此减小电路规模并降低制造费用。

主要部件包括:产生程序地址的程序计数器,存储指令的指令寄存器,解释指令的控制逻辑,存放数据的通用寄存器堆,以及执行指令的ALU等几个主要部分构成。 3.11分别详细说明采用可变时钟周期与多时钟周期改进随机逻辑体系结构的原理。

CPU内部时序信号的定时方式可以分成同步控制、异步控制、联合控制三种方式。 其中同步控制指在任何情况下,所有指令在执行时所需的机器周期数和时钟周期数都固定不变。同步控制的一种实现方式就是可变时钟周期,指CPU根据当前指令的操作特性调整时钟周期,将大多数指令操作安排在一个较短的机器周期内完成,对某些复杂操作,则采取延长机器周期的办法来解决。

而异步控制的一种实现方式就是多时钟周期,指时钟周期不变,但CPU每条指令的执行周期可由多少不等的机器周期数组成。

3.12 什么是微代码体系结构?微指令的作用是什么?

在微码结构中,控制单元的输入和输出之间被视为一个内存系统。控制信号存放在一个微程序内存中,指令执行过程中的每一个时钟周期,处理器从微程序内存中读取一个控制字作为指令执行的控制信号并输出。

微指令只实现必要的基本操作,可以直接被硬件执行。通过编写由微指令构成的微代码,可以实现复杂的指令功能。微指令使处理器硬件设计与指令集设计相分离,有助于指令

集的修改与升级,并有助于实现复杂的指令。

3.13微码体系结构与随机逻辑体系结构有什么区别? (1) 指令集的改变导致不同的硬件设计开销。

在设计随机逻辑结构时,指令集和硬件必须同步设计和优化,因此设计随机逻辑的结构比设计微码结构复杂得多,而且硬件和指令集二者中任意一个变化,就会导致另外一个变化。

在微码结构中,指令设计通过为微码ROM编写微码程序来实现的,指令集的设计并不直接影响现有的硬件设计。因此,一旦修改了指令集,并不需要重新设计新的硬件。 (2) 从性能上比较

随机逻辑在指令集和硬件设计上都进行了优化,因此在二者采用相同指令集时随机逻辑结构要更快一些。但微码结构可以实现更复杂指令集,因此可以用较少的指令完成复杂的功能,尤其在存储器速度受限时,微码结构性能更优。

3.14说明流水线体系结构中4个阶段的操作。能把流水线结构分为5阶段?如果可能,试给出你的方案。

流水线若分为四个阶段应包括:取指,译码,执行,数据回写

流水线若分为五个阶段应包括:取指,译码,执行,存储器操作,数据回写 3.15 什么是超标量体系结构?

超标量是通过内置多条流水线或多个流水部件以实现多条指令的同时执行,其实质是以空间换取时间。

而超流水线是通过细化流水、提高主频,使得在一个机器周期内完成一步甚至多步操作,其实质是以时间换取空间。

3.16 指令乱序执行可以带来什么好处?

通过将指令执行顺序重新排序,让满足执行条件的指令尽早地执行,从而提高处理器性能。

指令的乱序执行可以减少流水线冲突,减轻流水操作时由于数据等待、控制等待、资源冲突等中断时,其他无关指令也必须等待的问题,从而提高了流水线的效率。 3.17 讨论:假设处理器速度和主存储器时延之间的差距不断增大,计算机性能是否可能决定于存储器访问时间?在这种情况下,哪些微处理器架构特性会提高处理器性能?哪些不会?如果计算机具有一个比现在快100倍的处理器,但是存储器速度仅仅是现在存储器的两倍,这样计算机和当前计算机设计方法上有什么区别?

可能。

如果出现这种情况,采用微码结构、流水线结构以及超标量结构(一次取多条指令)都可以提高处理器性能,尤其是微码结构。而随机逻辑结构则不合适。

如果出现一个比现在速度快100倍的处理器,而存储器速度仅快两倍,则设计计算机体系结构时首先应该考虑如何尽量减少访问存储器的次数。

第四章习题

4.1地址映像方法有哪几种?它们各有什么优缺点?

(1) 内存地址映射指内存虚拟地址空间到物理地址空间的转换。

分页技术:特点是页的大小固定;优点是程序不必连续存放,因此没有外碎片(每个内碎片不超过页大小);缺点是增加了硬件成本(如需要地址变换机构)和系统开销(如需要好的调页算法)。

分段技术:特点是段的大小可变;优点是每个段按内容独立,因此可以分别编写和编译,可以针对不同类型的段采取不同的保护,可以按段为单位来进行共享(包括通过动态链接进行代码共享);缺点是会导致碎片。

(2) I/O地址映射指系统中I/O端口的编址方式。

独立编址技术:优点是系统中存储单元和I/O端口的数量可达到最大;缺点是需专门信号来指示系统地址线上出现的是存储单元地址还是端口地址,I/O指令的功能比较弱。

存储器映像编址技术:优点是对端口操作和存储器单元操作完全一样,因此系统简单,并且对端口操作的指令比较多;缺点是CPU对存储单元和I/O单口的实际寻址空间都小于其最大寻址空间。

4.2 EPROM存储器芯片没有写入信息时,各个单元的内容是什么?某SRAM单元中存放一个数据(如5AH),CPU将它读取后,该单元的内容是什么?

EPROM存储器芯片在没有写入信息时,各个单元的内容均为全“1”。 SRAM为非破坏性读出,因此该单元的内容在读取后保持不变。 4.4下列ROM芯片各需多少地址输入端?多少数据输出端? (1) 16×4位

(2) 32×8位 (3) 256×4位

(4) 512×8位

(1)16×4位=24*4bit,因此有4个地址输入端和4个数据输出端。 (2)32×8位=25*4bit,因此有5个地址输入端,8个数据输出端。 (3)256×4=28*4bit,因此有8个地址输入端,4个数据输出端。 (4)512×8=29*4bit,因此有9个地址输入端,8个数据输出端。

4.7某计算机系统ROM为6K,最后一个单元的地址为9BFFH,RAM为3K。已知其地址为连续的,且ROM在前,RAM在后,求该存储器的首地址和末地址。

该存储器的首地址(第一个ROM单元地址)为:9BFFH-6K+1=9C00H-1800H=8400H 该存储器末地址(最后一个RAM单元地址)为:9BFFH+3K==9BFFH+0C00H=0A7FFH 4.8若某系统有16条地址线,现用SRAM 2114(1K×4)存储芯片组成存储系统,试问采用线选译码时,系统的存储容量最大为多少?需要多少个2114存储芯片?

每片2114需要10条地址线,剩余6条地址线进行线选译码最多可以区分6组12个芯片。这时系统的存储容量最大为(1K*4bit)*2片/组*6组=6KB。 4.10设有一个具有24位地址和8位字长的存储器,问:

(1) 该存储器能够存储多少字节的信息?

(2) 如果该存储器由4 M×1位的RAM芯片组成,需要多少片?

(3) 在此条件下,若数据总线为8位,需要多少位地址线用于芯片选择? (1)该存储器的存储容量=224 =16M字节 (2)需要4M*1的芯片数目:

16M?8?32片

4M?1(3)用于片内字选的地址线应满足:222 =4M,即字选需要22根地址线,片选需要2根地址线。

4.13试为某8位计算机系统设计一个具有8KB ROM和40KB RAM的存储器。要求ROM用EPROM芯片2732组成,从0000H地址开始;RAM用SRAM芯片6264组成,从4000H地址开始。

查阅资料可知,2732容量为4K×8(字选线12根),6264容量为8K×8(字选线13根),因此本系统中所需芯片数目及各芯片地址范围应如下表所示:

0000H~ 0FFFH 1000H~ 1FFFFH A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 1 0 1 1 1 0 0 1 0 0 1 0 1 1 0 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 第一片 共需2片2732构成系地址范围 统ROM 第二片 红色为片选 地址范围 第一片 4000H~ 地址范围 5FFFH 第二片 6000H~ 地址范围 7FFFFH 共需5片6264构成系第三片 8000H~ 统RAM 地址范围 9FFFFH 红色为片选 第四片 0A000H~ 地址范围 0BFFFFH 第五片 0C000H~ 1 1 0 地址范围 0DFFFFH 1 1 0

硬件连线方式之一如下图所示:

A15 A14 A13 A12 A0-A11 RD WR D0-D7 CS 38 6 EN 译C 2 码B 1 A 器 0 ?? 未用 ?? AB CS AB CS A0-A12 RD WR AB CS AB CS 2732 1 WR D0-7 2732 2 WR D0-7 6264 RD 1 WR D0-7 ?? 6264 RD 5 WR D0-7

说明:

①8位微机系统地址线一般为16位。采用全译码方式时,系统的A0~A12直接与6264的13根地址线相连,系统的A0~A11直接与2732的12根地址线相连。片选信号由74LS138译码器产生,系统的A15~A13作为译码器的输入。

②各芯片的数据总线(D0~D7)直接与系统的数据总线相连。

③各芯片的控制信号线(RD、WR)直接与系统的控制信号线相连。 4.18某计算机系统有8个I/O接口芯片,每个接口芯片占用8个端口地址。起始地址为9000H,8个接口芯片的地址连续分布,用74LS138作为译码器,画出端口译码电路,说明每个芯片的端口地址范围。

A15 A14 ? EA5AN C B A Y7 接A2~A0 接口 接?

接口编号 1 2 3 4 5 6 7 8

A15~A6 A5 0 0 0 0 1 1 1 1 A4 0 0 1 1 0 0 1 1 A3 0 1 0 1 0 1 0 1 A2~A0 000~111 000~111 000~111 000~111 000~111 000~111 000~111 000~111 地址空间 9000H~9007H 9008H~900FH 9010H~9017H 9018H~901FH 9020H~9027H 9028H~902FH 9030H~9037H 9038H~903FH 1001000000 4.19完成下面的RAM系统扩充图。假设系统已占用0000~27FFH段内存地址空间,并拟将后面的连续地址空间分配给该扩充RAM。

A15 A14 A13 A12 A11

系统 A10 译码器输出 A15~A14 A13 /Q0 /Q1 /Q2 /Q3 /Q4 /Q5 /Q6 /Q7 00 0 0 0 0 1 1 1 1 A12 0 0 1 1 0 A11 0 1 0 1 0 A10~A0 地址空间 0000H~07FFH 0800H~0FFFH 1000H~17FFH 1800H~1FFFH 2000H~27FFH 2800H~2BFFH 2C00H~2FFFH 0000000000~11111111111 0 1 1 1 0 1 0 000000000~1 1111111111 4.22假设一台打印机的数据输出I/O端口地址为378H,状态端口地址为379H,状态字节的D0位为状态位(D0 = 0,表示打印数据缓冲区空,CPU可以向它输出新数据;D0 = 1,表示打印数据缓冲区满)。试用查询方式从内存中以BUF为首址的单元处开始,将连续1 KB的数据传送给打印机,每次传送一个字节。给出接口的硬件结构,说明数据交换流程。

数据端口数据锁存器 Busy 状态缓冲器 状态端口 打 5D R / 印

(1) 初始化内存指针为BUF;

(2) CPU从379H端口读入状态字,并判断D0位(Busy),若D0=1则重复(1); (3) 若D0=0则CPU向378H数据端口写数据,同时Busy会变为高电平,并通知外

设数据已经准备好;

(4) 外设在适当时候取走数据,并发送/ACK信号将D触发器清零,使Busy=0,准

备下一次数据传送;

(5) 修改内存指针(加1),重复(2)至(5)1000次; 4.23试用无条件传输方式完成下列功能:将首地址为40000H的内存单元中1K个字数据从端口Output处输出,然后从端口Input处输入2KB数据到首地址为50000H的内存单元中。给出接口的硬件结构,说明数据交换流程。

(1) 初始化内存指针为40000H;

(2) CPU取一个字节数据输出到Output端口,并修改内存指针(加1); (3) 重复(2)2000次,完成2K个字节的传送; (4) 初始化内存指针为50000H;;

(5) CPU从Input端口读入一个字节数据写入内存单元,并修改内存指针(加1); (6) 重复(5)2000次,完成2K个字节的传送; DA/R/端数据输入 数据输出

4.28在某系统中,要求采用中断方式把一个长100字节的数据块从首址为AREA的存储区传送到端口地址为37FH的接口上,每次中断只传送一个字节。试给出数据交换流程。

主程序:

(1) 初始化内存指针为AREA(全局变量); (2) 初始化传送次数为100(全局变量);

(3) 允许传送中断;

(4) 启动传送:从内存取一个字节输出到37FH端口,并修改内存指针(加1); (5) 等待中断或处理其他事情; 中断服务程序:

(1) 修改传送次数(减1),并判断是否为0,若为0,退出中断,结束传送; (2) 若未传送完,则修改内存指针(加1); (3) 从内存取一个字节输出到37FH端口; (4) 返回;

4.31用8255A作为CPU与打印机的接口,8255A的A端口工作于方式0输出;C端口工作于方式0。8255A与打印机及CPU的连线如下图所示。试给出查询方式下将100个数据送打印机打印的数据交换流程。

(1) (2) (3) (4) (5)

CPU读C口并判断PC0(BUSY)电平,若PC0(BUSY)=1,则重复(1); 若PC0(BUSY)=0,表示打印机空闲,CPU即可向A口输出一个数据; CPU写C口令PC6=0(延时后再令PC6=1),通知打印机数据已准备好; 打印机取走数据后令BUSY=0; 重复(1)~(4)100次;

4.39若某8位A/D转换器的满度输入电压为10 V,则其量化误差为多少?

110?0.0196V 822?1

5.1 ARM支持的7种运行模式: 1) 用户模式 2) 快速中断模式 3) 外部中断模式 4) 管理模式 5) 终止模式 6) 未定义模式 7) 系统模式

运行模式的切换由

CPSR低8位中M4~M0控制位决定(1)10000 (2)10001(3)10010(4)10011(5)10111(6)11011(7)11111 5.4

1) ARM状态:处理器执行32位字时齐的ARM指令

2) Thumb状态:处理器执行16位的,半字对齐的Thumb指令 切换:

进入Thumb:1.当操作数寄存器的状态位(最低位)为1时执行BX指令

2.当在Thumb 发生异常,在异常处理后自动返回Thumb 进入ARM:1.当操作数寄存器的状态位为0时,执行BX指令 2.当进行异常处理时,把程序计数器的PC的值放入异常模式链接寄存器中,从

异常向量地址开始执行程序,自动进入ARM状态

5.7

1) 寄存器寻址

2) 寄存器寻址,立即寻址

3) 寄存器寻址,寄存器间接寻址 4) 寄存器寻址,基址变址寻址 5) 多寄存器寻址(堆栈寻址)

6) 寄存器寻址,寄存器寻址,寄存器移位寻址 7) 多寄存器寻址 8) 相对寻址 5.9

1) 改为ADD R1, R2,#4 2) 对

3) 不用“!”

4) 立即数 #02F100不符合规定

5) 既不是立即数,也不是寄存器数

6) 目的寄存器R2存放不能与操作数寄存器相同 7) 不能将立即数直接给CPSR 8) 正确 5.10

1) 比较R0与R1中的值,更新标志位,无符号数R0>无符号数R1,C置位,Z清零,R1?R1+1 2) 比较R1与R2中的值,更新标志位,若N置位,即(R1)<(R2),则R2?R2-0x08

第六章习题

6.3试用汇编代码完成如下C语言代码完成的功能。

int gcd(int a, int b) {while (a != b) if (a > b) a = a-b; else

b = b-a; return a; }

AREA Sub1,CODE,READONLY EXPORT Sub1 CMP

R0, R1

;(R0)=a,(R1)=b

MOVEQ PC,LR SUBGT R0, R0, R1 SUBLT R1, R1, R0 LDR STR MOV END

R2,=a R0,[R2] PC,LR

;相等则返回

;带符号数大于条件码为GT,无符号数为HI ;带符号数小于条件码为LT,无符号数为LO ;R2指向a ;更新变量a ;返回

6.4 宏的定义如下面的代码所示:

MICRO

$aa example $bb, $cc, $dd $aa CMP $cc, #0

B$dd $bb

MEND

若在汇编程序中需要调用上面定义的宏example,则其程序代码如下。试写出下面程序被汇编后,宏展开后的结果。

lable example next, R3, NE ? next ?

宏展开后的代码为: label

CMP R3 , #0

BNE next

6.6编写一个程序段,判断寄存器R5中数据是否为12, 18, 22, 29, 45或67,如果是则将R0中数据加1,否则将R0设置为0xF,并把这个程序段定义成一个代码段。

AREA Comp,CODE,READONLY ENTRY

LDR R0,=dat MOV R1,#6 MOV R2,#0 SUB

Loop

SUB CMP

R1,R1,#1 R5,[R0,#4]!

;调整比较次数

BEQ Handle BNE Loop MOVEQ R2,#1

Handle

CMP R2,#0

R0,R0,#4

;调整比较指针

;寄存器R0指向DataT表中的数据列表dat ; dat表中的数据个数

;标志寄存器(R2)=0则R5中数据不在dat表中

ADDNE R0, R0, #1

MOVEQ R0,#0xF

Stop

?? dat

DCD

12,18,22,29,45,67

;需要比较的数据列表

AREA DataT,DATA,READWRITE END

6.8 试编写一个循环程序,实现从0开始10个偶数的累加。

AREA Foud,CODE,READONLY ENTRY MOV MOV

Loop ADD

R1,R1,#2

R0,R0,R1 R1,R1,#1 Loop

;调整累加次数

ADD SUB

BNE ??

Stop END

R0,#0 R1,#0

;存放累加和 ;存放加数

;累加次数

MOV R2,#9

6.12 试把如下C函数改写成汇编语言函数。

(1) int SubXY(int x, int y)

{ }

return x-y;

(2) void SubXY(int x, int y, int z)

{ }

z = x-y;

(1)

AREA SubXY ,CODE,READONLY EXPORT SubXY SUB MOV END (2)

AREA SubXY ,CODE,READONLY EXPORT SubXY SUB LDR

R2,R0,R1 R3,=z

;R3执行变量z

R0,R0,R1 PC,LR

;结果通过R0返回 ;返回

本文来源:https://www.bwwdw.com/article/o1lh.html

Top