1、第一章习题解答1.1 什么是程序存储式计算机?程序存储式计算机指采用存储程序原理工作的计算机。存储程序原理又称“冯诺依曼原理”,其核心思想包括:程序由指令组成,并和数据一起存放在存储器中;计算机启动后,能自动地按照程序指令的逻辑顺序逐条把指令从存储器中读出来,自动完成由程序所描述的处理工作。1.2 通用计算机几个主要部件是什么?主机(CPU、主板、内存);外设(硬盘/光驱、显示器/显卡、键盘/鼠标、声卡/音箱);1.3 以集成电路级别而言,计算机系统的三个主要组成部分是什么?中央处理器、存储器芯片、总线接口芯片1.4 阐述摩尔定律。每18个月,芯片晶体管密度提高一倍,运算性能提高一倍,而价格下
2、降一半。1.5 讨论:摩尔定律有什么限制,可以使用哪些方式克服这些限制?摩尔定律还会持续多久?在摩尔定律之后电路将如何演化?摩尔定律不能逾越的四个鸿沟:基本大小的限制、散热、电流泄露、热噪。具体问题如:晶体管体积继续缩小的物理极限,高主频导致的高温解决办法:采用纳米材料、变相材料等取代硅、光学互联、3D、加速器技术、多内核(为了降低功耗与制造成本,深度集成仍是目前半导体行业努力的方向,但这不可能永无止,因为工艺再先进也不可能将半导体做的比原子更小。用作绝缘材料的二氧化硅,已逼近极限,如继续缩小将导致漏电、散热等物理瓶颈,数量集成趋势终有终结的一天。一旦芯片上线条宽度达到纳米数量级时,相当于只有
3、几个分子的大小,这种情况下材料的物理、化学性能将发生质的变化,致使采用现行工艺的半导体器件不能正常工作,摩尔定律也就要走到它的尽头了。业界专家预计,芯片性能的增长速度将在今后几年趋缓,一般认为摩尔定律能再适用10年左右,其制约的因素一是技术,二是经济。)1.6 试以实例说明计算机系统结构、计算机组成与计算机实现之间的相互关系与相互影响。计算机系统结构主要是指程序员关心的计算机概念结构与功能特性,而计算机组成原理则偏重从硬件角度关注物理机器的组织,更底层的器件技术和微组装技术则称为计算机实现。例如:确定指令集中是否有乘法指令属于计算机体系结构的内容,而乘法指令是由专门的乘法器实现还是用加法器实现
4、则属于计算机组成原理的内容,乘法/加法器底层的物理器件类型及微组装技术则属于计算机实现的内容。同一计算机制造商提供的不同系列的计算机通常采用不同的结构,而同系列的计算机则具有相同的结构和不同的组织,因此同一系列的不同型号计算机价格和性能特点也不相同。如某系列机都支持相同的指令系统,但其中的低档机可采用顺序方式对指令进行分析、处理,而高档机则可采用流水或其它并行处理方式;或某系列机都支持相同的数据形式(如16/32位的定点数、32/64/128位的浮点数),但其中的低档机可采用采用较窄的数据通路宽度(8位或16位),而高档机则可采用较宽的数据通路宽度(32位)。另一方面,显然计算机现阶段能达到的
5、实现技术会直接制约其可采用的系统结构和组成方法。1.7 区分微处理器的关键特征是什么?微处理器可通过以下两个基本特征来区分: 字长:表示CPU一次传送或处理数据的最大二进制位数。通常与CPU的数据总线宽度、寄存器宽度以及ALU宽度一致。主频:通常以MHz表示,决定CPU内的最小时钟速率,从而决定处理器每秒可执行的指令数目。1.8 某测试程序在一个40 MHz处理器上运行,其目标代码有100 000条指令,由如下各类指令及其时钟周期计数混合组成,试确定这个程序的有效CPI、MIPS的值和执行时间。指 令 类 型指 令 计 数时钟周期计数整数算术45 0001数据传送32 0002浮点数15 00
6、02控制传送800021. 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.552. Million Instructions Per Second(MIPS)=40/1.55=25.83. 执行时间T=(100000*1.55)*(1/(40*106) )=15.5/4*10-3= 3.875*10-3 s= 3.875ms1.9存储器分层结构是如何提高性能的?常用的存储设备或技术有很多,通
7、常来说速度越快则每位价格越高。因此现代计算机系统通常把不同容量、不同速度的存储设备按一定的层次结构组织起来,形成一个统一的存储系统,以解决存储容量、存取速度和价格之间的矛盾。多层次存储系统要达到的目标是:整个存储系统速度接近M1(最靠近CPU的存储层)而价格和容量接近Mn(最远离CPU的存储层)。这就要求越靠近CPU的存储设备速度越快,当然每位价格也就越高,容量也就越小。由于绝大多数程序访问具有局部性原理,因此可以把近期CPU需要使用的程序和数据放在尽可能靠近CPU的存储器中。CPU访问存储器时,首先是访问M1,若M1“命中”则直接存取,若M1“失效”则将M2中包含所需数据的块或页调入M1;若
8、在M2中也找不到,就访问M3,依此类推。这样CPU对存储器的大部分访问操作都可以针对速度较快的存储层完成,整个系统的性能也就得到了提高。1.10 说明RISC架构与CISC架构之间的区别 。RISCCISC设计重点降低指令执行的硬件复杂度,但对编译器有更高的要求侧重指令执行的硬件功能性,控制器的硬件设计复杂指令集指令种类少,长度固定,且执行简单,可在单时钟周期完成指令复杂,长度通常不固定,执行也需要多个周期流水线指令处理过程可被拆分成能够被流水线并行执行的规则步骤指令执行通常需要调用微程序寄存器有更多的通用寄存器专用寄存器较多。load-store结构为避免耗时的访存操作,把访存与数据处理分开
9、。处理器能够直接处理内存中的数据。RISC,CISC的一些看法误区:RISC指令都是简单指令LDREQ R0,R1,R2,LSR #16!指令的强大,一般的CISC处理器望尘莫及。RISC的“简单”是指指令集的执行时间、指令长度、指令格式整齐划一。CISC的复杂指令速度慢、执行效率很低现代CISC处理器具有非常长的流水线(PIII采用了25级的流水线),执行速度快。但老的CPU执行速度可能较慢。但RISC不管是老的CPU,还是新的CPU,指令执行时间都是相同的,不需要在对指令执行作出优化。RISC处理器比CISC处理器需要更多的寄存器这不是一个需求问题,而是一个实现问题。所以有的CISC寄存器
10、与RISC相当。一般情况RISC需要比较多的寄存器。RISC都有流水线,ARM2没有采用流水线。第三章习题3.1什么是冯诺伊曼计算机结构?其运行的基本原理如何?冯.诺依曼计算机由运算器、控制器、存储器、输入设备和输出设备构成,采用二进制表示信息,以存储器为中心,按存储程序原理工作。存储程序原理指编好的程序首先放入存储器,开始工作后,由控制器自动、高速依次从存储器中取出指令并执行。3.2. 微处理器的体系结构可以分为几种?试分别说明各种体系结构的优缺点。类型优点缺点随机逻辑针对指令硬件做了专门的优化,所用的逻辑门数少,制造费用低。指令集设计与硬件电路设计紧密相关,设计过程复杂,难以实现复杂指令,
11、设计难以重用。微码体系结构相比于硬件,微代码不容易出错,建立微代码比较省时,改动微代码更为容易,CPU版本升级简单。微代码的开销大于硬件实现,微控制必须要比CPU运行速度更高。 流水线体系结构并行的执行不同指令的不同阶段,提高了指令的吞吐率,增强了处理器性能。处理器设计较为困难,在设计中需要解决数多种冲突问题超标量体系结构实现了真正的并行执行,让MIPS可以大于时钟频率。更多的硬件资源,设计极其复杂3.3 高级编程语言、汇编语言以及机器语言之间有哪些不同?机器语言是直接用二进制代码表达的计算机语言。指令用“0”和“1”组成,并分成若干段,各段的编码表示不同的含义。机器语言面向硬件,是唯一可以由
12、硬件直接执行的语言。汇编语言采用符号代替机器语言中的二进制码:用助记符(Mnemonic)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。汇编语言与机器语言一一对应,因此不具有移植性,但更易于读写和理解。汇编语言源程序需要汇编成机器语言才能交给硬件执行。高级编程语言语法和结构更类似普通英文,且由于远离对硬件的直接操作,因此移植性较好。高级语言源程序需要编译(或解释)成机器语言才能交给硬件执行。3.5 什么是计算功能指令、数据传输指令以及控制流程指令?计算功能指令:对数据进行处理完成算术运算或逻辑运算等的指令。数据传输指令:负责把数据、地址或立即数传送到寄存器、I/O端口或
13、存储单元中,或者反方向传送的指令。控制流程指令:用来控制程序执行流程的指令,有测试、转移、跳转等子类。 3.6 解释跳转、分支、调用以及中断所需进行的操作。跳转:根据“跳转”指令指计算目的地址,修改程序指针。分支:根据“分支”指令判断执行条件,计算跳转地址,修改程序指针。调用:保存断点,根据“调用”指令计算子程序入口地址,修改程序指针,执行完毕后恢复断点。 中断:保护断点及现场,查找中断向量表以确定中断程序入口地址,修改程序指针,执行完毕后恢复现场及断点。3.7固定长度指令编码有什么优缺点?可以简化硬件设计、减小指令译码的时间,但指令编码的效率不高,信息冗余度大,可扩展性差。3.8 在处理器工
14、作频率、CPI和处理器性能方面,哪些因素会增加流水线深度?时钟周期越小,则要求组合电路的延迟越小,流水线级数越多,但过多的流水线无助于处理器工作频率的提高。CPI越大,为了提高运算效率则流水级数需求越多。处理器性能和流水线级数是一个动态平衡的关系,需要具体在设计流水线的同时考虑冲突。3.9一个时钟频率为2.5 GHz的非流水式处理器,其平均CPI是4。此处理器的升级版本引入了5级流水。然而,由于如锁存延迟这样的流水线内部延迟,使新版处理器的时钟频率必须降低到2 GHz。(1) 对一典型程序,新版所实现的加速比是多少?(2) 新、旧两版处理器的MIPS各是多少?(1)对于一个有N条指令的程序来说
15、:非流水式处理器的总执行时间5级流水处理器的总执行时间 加速比=,N很大时加速比3.2(2)非流水式处理器CPI=4,则其执行速度=2500MHz/4=625MIPS。5级流水处理器CPI=1,则其执行速度=2000 MHz /1=2000 MIPS。3.10随机逻辑体系结构的处理器的特点是什么?详细说明各部件的作用。随机逻辑的特点是指令集设计与硬件的逻辑设计紧密相关,通过针对特定指令集进行硬件的优化设计来得到逻辑门最小化的处理器,以此减小电路规模并降低制造费用。主要部件包括:产生程序地址的程序计数器,存储指令的指令寄存器,解释指令的控制逻辑,存放数据的通用寄存器堆,以及执行指令的ALU等几个
16、主要部分构成。 3.11分别详细说明采用可变时钟周期与多时钟周期改进随机逻辑体系结构的原理。CPU内部时序信号的定时方式可以分成同步控制、异步控制、联合控制三种方式。其中同步控制指在任何情况下,所有指令在执行时所需的机器周期数和时钟周期数都固定不变。同步控制的一种实现方式就是可变时钟周期,指CPU根据当前指令的操作特性调整时钟周期,将大多数指令操作安排在一个较短的机器周期内完成,对某些复杂操作,则采取延长机器周期的办法来解决。而异步控制的一种实现方式就是多时钟周期,指时钟周期不变,但CPU每条指令的执行周期可由多少不等的机器周期数组成。3.12 什么是微代码体系结构?微指令的作用是什么?在微码
17、结构中,控制单元的输入和输出之间被视为一个内存系统。控制信号存放在一个微程序内存中,指令执行过程中的每一个时钟周期,处理器从微程序内存中读取一个控制字作为指令执行的控制信号并输出。微指令只实现必要的基本操作,可以直接被硬件执行。通过编写由微指令构成的微代码,可以实现复杂的指令功能。微指令使处理器硬件设计与指令集设计相分离,有助于指令集的修改与升级,并有助于实现复杂的指令。3.13微码体系结构与随机逻辑体系结构有什么区别?(1) 指令集的改变导致不同的硬件设计开销。在设计随机逻辑结构时,指令集和硬件必须同步设计和优化,因此设计随机逻辑的结构比设计微码结构复杂得多,而且硬件和指令集二者中任意一个变
18、化,就会导致另外一个变化。在微码结构中,指令设计通过为微码ROM编写微码程序来实现的,指令集的设计并不直接影响现有的硬件设计。因此,一旦修改了指令集,并不需要重新设计新的硬件。(2) 从性能上比较随机逻辑在指令集和硬件设计上都进行了优化,因此在二者采用相同指令集时随机逻辑结构要更快一些。但微码结构可以实现更复杂指令集,因此可以用较少的指令完成复杂的功能,尤其在存储器速度受限时,微码结构性能更优。3.14说明流水线体系结构中4个阶段的操作。能把流水线结构分为5阶段?如果可能,试给出你的方案。流水线若分为四个阶段应包括:取指,译码,执行,数据回写 流水线若分为五个阶段应包括:取指,译码,执行,存储
19、器操作,数据回写3.15 什么是超标量体系结构?超标量是通过内置多条流水线或多个流水部件以实现多条指令的同时执行,其实质是以空间换取时间。而超流水线是通过细化流水、提高主频,使得在一个机器周期内完成一步甚至多步操作,其实质是以时间换取空间。3.16 指令乱序执行可以带来什么好处?通过将指令执行顺序重新排序,让满足执行条件的指令尽早地执行,从而提高处理器性能。指令的乱序执行可以减少流水线冲突,减轻流水操作时由于数据等待、控制等待、资源冲突等中断时,其他无关指令也必须等待的问题,从而提高了流水线的效率。3.17 讨论:假设处理器速度和主存储器时延之间的差距不断增大,计算机性能是否可能决定于存储器访
20、问时间?在这种情况下,哪些微处理器架构特性会提高处理器性能?哪些不会?如果计算机具有一个比现在快100倍的处理器,但是存储器速度仅仅是现在存储器的两倍,这样计算机和当前计算机设计方法上有什么区别?可能。如果出现这种情况,采用微码结构、流水线结构以及超标量结构(一次取多条指令)都可以提高处理器性能,尤其是微码结构。而随机逻辑结构则不合适。如果出现一个比现在速度快100倍的处理器,而存储器速度仅快两倍,则设计计算机体系结构时首先应该考虑如何尽量减少访问存储器的次数。 第四章习题4.1地址映像方法有哪几种?它们各有什么优缺点?(1) 内存地址映射指内存虚拟地址空间到物理地址空间的转换。分页技术:特点
21、是页的大小固定;优点是程序不必连续存放,因此没有外碎片(每个内碎片不超过页大小);缺点是增加了硬件成本(如需要地址变换机构)和系统开销(如需要好的调页算法)。分段技术:特点是段的大小可变;优点是每个段按内容独立,因此可以分别编写和编译,可以针对不同类型的段采取不同的保护,可以按段为单位来进行共享(包括通过动态链接进行代码共享);缺点是会导致碎片。 (2) I/O地址映射指系统中I/O端口的编址方式。独立编址技术:优点是系统中存储单元和I/O端口的数量可达到最大;缺点是需专门信号来指示系统地址线上出现的是存储单元地址还是端口地址,I/O指令的功能比较弱。存储器映像编址技术:优点是对端口操作和存储
22、器单元操作完全一样,因此系统简单,并且对端口操作的指令比较多;缺点是CPU对存储单元和I/O单口的实际寻址空间都小于其最大寻址空间。4.2 EPROM存储器芯片没有写入信息时,各个单元的内容是什么?某SRAM单元中存放一个数据(如5AH),CPU将它读取后,该单元的内容是什么?EPROM存储器芯片在没有写入信息时,各个单元的内容均为全“1”。SRAM为非破坏性读出,因此该单元的内容在读取后保持不变。4.4下列ROM芯片各需多少地址输入端?多少数据输出端?(1) 164位 (2) 328位 (3) 2564位(4) 5128位(1)164位=24*4bit,因此有4个地址输入端和4个数据输出端。
23、(2)328位=25*4bit,因此有5个地址输入端,8个数据输出端。(3)2564=28*4bit,因此有8个地址输入端,4个数据输出端。(4)5128=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=0A7FFH4.8若某系统有16条地址线,现用SRA
24、M 2114(1K4)存储芯片组成存储系统,试问采用线选译码时,系统的存储容量最大为多少?需要多少个2114存储芯片?每片2114需要10条地址线,剩余6条地址线进行线选译码最多可以区分6组12个芯片。这时系统的存储容量最大为(1K*4bit)*2片/组*6组=6KB。4.10设有一个具有24位地址和8位字长的存储器,问:(1) 该存储器能够存储多少字节的信息?(2) 如果该存储器由4 M1位的RAM芯片组成,需要多少片?(3) 在此条件下,若数据总线为8位,需要多少位地址线用于芯片选择?(1)该存储器的存储容量=224 =16M字节(2)需要4M*1的芯片数目:片(3)用于片内字选的地址线应
25、满足:222 =4M,即字选需要22根地址线,片选需要2根地址线。4.13试为某8位计算机系统设计一个具有8KB ROM和40KB RAM的存储器。要求ROM用EPROM芯片2732组成,从0000H地址开始;RAM用SRAM芯片6264组成,从4000H地址开始。查阅资料可知,2732容量为4K8(字选线12根),6264容量为8K8(字选线13根),因此本系统中所需芯片数目及各芯片地址范围应如下表所示:A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1共需2片2732构成系统ROM红色为片选第一片地址范围0000H0FFFH0000000000000000000111
26、11111111第二片地址范围1000H1FFFFH000100000000000000111111111111共需5片6264构成系统RAM红色为片选第一片地址范围4000H5FFFH010000000000000010111111111111第二片地址范围6000H7FFFFH011000000000000011111111111111第三片地址范围8000H9FFFFH100000000000000100111111111111第四片地址范围0A000H0BFFFFH101000000000000101111111111111第五片地址范围0C000H0DFFFFH11000000000
27、0000110111111111111硬件连线方式之一如下图所示:A14CS 6EN C 2B 1A 0A0-A11RDWRD0-D7AB CS2732WRD0-7AB CS2732WRD0-7AB CS6264RDWRD0-7A12A13A1538译码器A0-A12RDWRAB CS6264RDWRD0-7未用1215说明:8位微机系统地址线一般为16位。采用全译码方式时,系统的A0A12直接与6264的13根地址线相连,系统的A0A11直接与2732的12根地址线相连。片选信号由74LS138译码器产生,系统的A15A13作为译码器的输入。各芯片的数据总线(D0D7)直接与系统的数据总线相
28、连。各芯片的控制信号线(RD、WR)直接与系统的控制信号线相连。4.18某计算机系统有8个I/O接口芯片,每个接口芯片占用8个端口地址。起始地址为9000H,8个接口芯片的地址连续分布,用74LS138作为译码器,画出端口译码电路,说明每个芯片的端口地址范围。A5A4A3接口2接口8接口1Y7.Y1Y0A2A0CBAEN A15A14A7A6接口编号A15A6A5A4A3A2A0地址空间110010000000000001119000H9007H20010001119008H900FH30100001119010H9017H40110001119018H901FH51000001119020H
29、9027H61010001119028H902FH71100001119030H9037H81110001119038H903FH4.19完成下面的RAM系统扩充图。假设系统已占用000027FFH段内存地址空间,并拟将后面的连续地址空间分配给该扩充RAM。A10A15A14A12A13A11系统译码器输出A15A14A13A12A11A10A0地址空间/Q0000000000000000111111111110000H07FFH/Q10010800H0FFFH/Q20101000H17FFH/Q30111800H1FFFH/Q41002000H27FFH/Q51010000000000111
30、11111112800H2BFFH12C00H2FFFH/Q6110/Q71114.22假设一台打印机的数据输出I/O端口地址为378H,状态端口地址为379H,状态字节的D0位为状态位(D0 = 0,表示打印数据缓冲区空,CPU可以向它输出新数据;D0 = 1,表示打印数据缓冲区满)。试用查询方式从内存中以BUF为首址的单元处开始,将连续1 KB的数据传送给打印机,每次传送一个字节。给出接口的硬件结构,说明数据交换流程。打印机数据锁存器(输出端口)状态缓冲器(输入端口)Busy1bit5VR QD/ACK状态端口读选通数据端口选通(1) 初始化内存指针为BUF;(2) CPU从379H端口读
31、入状态字,并判断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) C
32、PU取一个字节数据输出到Output端口,并修改内存指针(加1);(3) 重复(2)2000次,完成2K个字节的传送;(4) 初始化内存指针为50000H;(5) CPU从Input端口读入一个字节数据写入内存单元,并修改内存指针(加1);(6) 重复(5)2000次,完成2K个字节的传送;数据输入缓冲器端口数据输出缓冲器端口端口译码器DBAB/RD/WR4.28在某系统中,要求采用中断方式把一个长100字节的数据块从首址为AREA的存储区传送到端口地址为37FH的接口上,每次中断只传送一个字节。试给出数据交换流程。主程序:(1) 初始化内存指针为AREA(全局变量);(2) 初始化传送次数为
33、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) CPU读C口并判断PC0(BUSY)电平,若P
34、C0(BUSY)=1,则重复(1);(2) 若PC0(BUSY)=0,表示打印机空闲,CPU即可向A口输出一个数据;(3) CPU写C口令PC6=0(延时后再令PC6=1),通知打印机数据已准备好;(4) 打印机取走数据后令BUSY=0;(5) 重复(1)(4)100次;4.39若某8位A/D转换器的满度输入电压为10 V,则其量化误差为多少?5.1 ARM支持的7种运行模式:1) 用户模式2) 快速中断模式3) 外部中断模式4) 管理模式5) 终止模式6) 未定义模式7) 系统模式运行模式的切换由CPSR低8位中M4M0控制位决定(1)10000 (2)10001(3)10010(4)100
35、11(5)10111(6)11011(7)111115.41) ARM状态:处理器执行32位字时齐的ARM指令2) Thumb状态:处理器执行16位的,半字对齐的Thumb指令切换:进入Thumb:1.当操作数寄存器的状态位(最低位)为1时执行BX指令 2.当在Thumb 发生异常,在异常处理后自动返回Thumb进入ARM:1.当操作数寄存器的状态位为0时,执行BX指令 2.当进行异常处理时,把程序计数器的PC的值放入异常模式链接寄存器中,从异常向量地址开始执行程序,自动进入ARM状态5.71) 寄存器寻址2) 寄存器寻址,立即寻址3) 寄存器寻址,寄存器间接寻址4) 寄存器寻址,基址变址寻址
36、5) 多寄存器寻址(堆栈寻址)6) 寄存器寻址,寄存器寻址,寄存器移位寻址7) 多寄存器寻址8) 相对寻址5.91) 改为ADD R1, R2,#42) 对3) 不用“!”4) 立即数 #02F100不符合规定5) 既不是立即数,也不是寄存器数6) 目的寄存器R2存放不能与操作数寄存器相同7) 不能将立即数直接给CPSR8) 正确5.101) 比较R0与R1中的值,更新标志位,无符号数R0无符号数R1,C置位,Z清零,R1R1+12) 比较R1与R2中的值,更新标志位,若N置位,即(R1) b) a = a-b; else b = b-a;return a;AREA Sub1,CODE,REA
37、DONLYEXPORT Sub1CMP R0, R1;(R0)=a,(R1)=b MOVEQ PC,LR;相等则返回SUBGT R0, R0, R1;带符号数大于条件码为GT,无符号数为HI SUBLT R1, R1, R0;带符号数小于条件码为LT,无符号数为LOLDR R2,=a;R2指向a STRR0,R2;更新变量a MOV PC,LR;返回END6.4 宏的定义如下面的代码所示:MICRO $aa example $bb, $cc, $dd $aa CMP $cc, #0 B$dd $bbMEND 若在汇编程序中需要调用上面定义的宏example,则其程序代码如下。试写出下面程序被汇
38、编后,宏展开后的结果。lable example next, R3, NEnext宏展开后的代码为: label CMP R3 , #0 BNE next6.6编写一个程序段,判断寄存器R5中数据是否为12, 18, 22, 29, 45或67,如果是则将R0中数据加1,否则将R0设置为0xF,并把这个程序段定义成一个代码段。AREA Comp,CODE,READONLYENTRYLDR R0,=dat;寄存器R0指向DataT表中的数据列表datMOVR1,#6; dat表中的数据个数MOVR2,#0;标志寄存器(R2)=0则R5中数据不在dat表中SUBR0,R0,#4;调整比较指针Loo
39、pSUBR1,R1,#1;调整比较次数BEQHandleCMP R5,R0,#4!BNELoopMOVEQ R2,#1HandleCMPR2,#0 ADDNE R0, R0, #1MOVEQ R0,#0xFStopAREA DataT,DATA,READWRITEdatDCD 12,18,22,29,45,67;需要比较的数据列表END6.8 试编写一个循环程序,实现从0开始10个偶数的累加。AREA Foud,CODE,READONLYENTRY MOV R0,#0;存放累加和 MOV R1,#0;存放加数MOVR2,#9;累加次数Loop ADD R1,R1,#2ADD R0,R0,R1S
40、UBR1,R1,#1;调整累加次数BNE LoopStopEND6.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,READONLYEXPORT SubXYSUB R0,R0,R1;结果通过R0返回 MOV PC,LR;返回END(2) AREA SubXY ,CODE,READONLYEXPORT SubXYSUB R2,R0,R1LDRR3,=z;R3执行变量zSTR R2,R3;更新变量
41、z MOV PC,LR;返回END6.14 把如下汇编语言函数改写成C函数。CMP R0, #1CMPNE R1, #1ADDEQ R2, R3, R4void mydo(int a, int b, int c, int d, int e); (R0)=a,(R1)=b,(R2)=c, (R3)=d, (R4)=e,if (a!=1) if (b= =1) c=d+e;6.15 阅读程序,说明如下程序完成的功能。llsearchCMP R0, #0LDRNEB R2, R0CMPNE R1, R2LDRNE R0, R0, #4BNE llsearchMOV PC, LR若R00,则将R0指向
42、的字节数据读入R2;若R00且R1R2,则将R0+4指向的双字数据存入R0中;循环,直至R0=R2退出子程序。6.16 阅读程序,说明如下程序完成的功能。strcmpLDRB R2, R0, #1LDRB R3, R1, #1CMP R2, #0CMPNE R3, #0BEQ returnCMP R2, R3BEQ strcmpreturnSUB R0, R2, R3MOV PC, LRR0指向数据串S1(的前一个字节单元),R1指向数据串S2(的前一个字节单元);依次比较字符串S1、S2中的字符,直至任一字符串结束;将S1,S2第一个不同字符(或最后一个字符)的差存入R0并返回;6.17 阅读程序,说明如下程序完成的功能。CMP R0, #maxindexLDRLO PC, PC, R0, LSL #2B IndexOutOfRa