• 249.00 KB
  • 2022-04-29 13:55:04 发布

微机接口技术 习题答案.doc

  • 39页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'第1章绪论  1.计算机分那几类?各有什么特点?  答:传统上分为三类:大型主机、小型机、微型机。大型主机一般为高性能的并行处理系统,存储容量大,事物处理能力强,可为众多用户提供服务。小型机具有一定的数据处理能力,提供一定用户规模的信息服务,作为部门的信息服务中心。微型机一般指在办公室或家庭的桌面或可移动的计算系统,体积小、价格低、具有工业化标准体系结构,兼容性好。  2.简述微处理器、微计算机及微计算机系统三个术语的内涵。  答:微处理器是微计算机系统的核心硬件部件,对系统的性能起决定性的影响。微计算机包括微处理器、存储器、I/O接口电路及系统总线。微计算机系统是在微计算机的基础上配上相应的外部设备和各种软件,形成一个完整的、独立的信息处理系统。  3.80X86微处理器有几代?各代的名称是什么?  答:从体系结构上可分为4代:①8080/8085:8位机。②8086/8088/80286:16位机。③80386/80486:32位机。④奔腾机系列。第2章微处理器结构及微计算机的组成  1.8086是多少位的微处理器?为什么?  答:8086是16位的微处理器,其内部数据通路为16位,对外的数据总线也是16位。  2.EU与BIU各自的功能是什么?如何协同工作?  答:EU是执行部件,主要的功能是执行指令。BIU是总线接口部件,与片外存储器及I/O接口电路传输数据。EU经过BIU进行片外操作数的访问,BIU为EU提供将要执行的指令。EU与BIU可分别独立工作,当EU不需BIU提供服务时,BIU可进行填充指令队列的操作。  3.8086/8088与其前一代微处理器8085相比,内部操作有什么改进?  答:8085为8位机,在执行指令过程中,取指令与执行执令都是串行的。8086/8088由于内部有EU和BIU两个功能部件,可重叠操作,提高了处理器的性能。  4.8086/8088微处理器内部有那些寄存器,它们的主要作用是什么?  答:执行部件有8个16位寄存器,AX、BX、CX、DX、SP、BP、DI、SI。AX、BX、CX、DX一般作为通用数据寄存器。SP为堆栈指针存器,BP、DI、SI在间接寻址时作为地址寄存器或变址寄存器。总线接口部件设有段寄存器CS、DS、SS、ES和指令指针寄存器IP。段寄存器存放段地址,与偏移地址共同形成存储器的物理地址。IP的内容为下一条将要执行指令的偏移地址,与CS共同形成下一条指令的物理地址。  5.8086对存储器的管理为什么采用分段的办法?   答:8086是一个16位的结构,采用分段管理办法可形成超过16位的存储器物理地址,扩大对存储器的寻址范围(1MB,20位地址)。若不用分段方法,16位地址只能寻址64KB空间。  6.在8086中,逻辑地址、偏移地址、物理地址分别指的是什么?具体说明。  答:逻辑地址是在程序中对存储器地址的一种表示方法,由段地址和段内偏移地址两部分组成,如1234H:0088H。偏移地址是指段内某个存储单元相对该段首地址的差值,是一个16位的二进制代码。物理地址是8086芯片引线送出的20位地址码,用来指出一个特定的存储单元。  7.给定一个存放数据的内存单元的偏移地址是20C0H,(DS)=0C00EH,的物理地址。  答:物理地址:0C21A0H。  8.8086/8088为什么采用地址/数据引线复用技术?  答:考虑到芯片成本,8086/8088采用40条引线的封装结构。40条引线引出8086/8088的所有信号是不够用的,采用地址/数据线复用引线方法可以解决这一矛盾,从逻辑角度,地址与数据信号不会同时出现,二者可以分时复用同一组引线。  9.8086与8088的主要区别是什么?  答:8086有16条数据信号引线,8088只有8条;8086片内指令预取缓冲器深度为6字节,8088只有4字节。  10.怎样确定8086的最大或最小工作模式?最大、最小模式产生控制信号的方法有何不同  答:引线MN/MX#的逻辑状态决定8086的工作模式,MN/MX#引线接高电平,8086被设定为最小模式,MN/MX#引线接低电平,8086被设定为最大模式。  最小模式下的控制信号由相关引线直接提供;最大模式下控制信号由8288专用芯片译码后提供,8288的输入为8086的S2#~S0#三条状态信号引线提供。  11.8086被复位以后,有关寄存器的状态是什么?微处理器从何处开始执行程序?  答:标志寄存器、IP、DS、SS、ES和指令队列置0,CS置全1。处理器从FFFFOH存储单元取指令并开始执行。  12.8086基本总线周期是如何组成的?各状态中完成什么基本操作?  答:基本总线周期由4个时钟(CLK)周期组成,按时间顺序定义为T1、T2、T3、T4。在T1期间8086发出访问目的地的地址信号和地址锁存选通信号ALE;T2期间发出读写命令信号RD#、WR#及其它相关信号;T3期间完成数据的访问;T4结束该总线周期。   13.结合8086最小模式下总线操作时序图,说明ALE、M/IO#、DT/R#、RD#、READY信号的功能。  答:ALE为外部地址锁存器的选通脉冲,在T1期间输出;M/IO#确定总线操作的对象是存储器还是I/O接口电路,在T1输出;DT/R#为数据总线缓冲器的方向控制信号,在T1输出;RD#为读命令信号;在T2输出;READY信号为存储器或I/O接口“准备好”信号,在T3期间给出,否则8086要在T3与T4间插入Tw等待状态。  14.8086中断分哪两类?8086可处理多少种中断?  答:8086中断可分为硬件中断和软件中断两类。8086可处理256种类型的中断。  15.8086可屏蔽中断请求输入线是什么?“可屏蔽”的涵义是什么?  答:可屏蔽中断请求输入线为INTR;“可屏蔽”是指该中断请求可经软件清除标志寄存器中IF位而被禁止。  16.8086的中断向量表如何组成?作用是什么?  答:把内存0段中0~3FFH区域作为中断向量表的专用存储区。该区域存放256种中断的处理程序的入口地址,每个入口地址占用4个存储单元,分别存放入口的段地址与偏移地址。  17.8086如何响应一个可屏蔽中断请求?简述响应过程。  答:当8086收到INTR的高电平信号时,在当前指令执行完且IF=1的条件下,8086在两个总线周期中分别发出INTA#有效信号;在第二个INTA#期间,8086收到中断源发来的一字节中断类型码;8086完成保护现场的操作,CS、IP内容进入堆栈,请除IF、TF;8086将类型码乘4后得到中断向量表的入口地址,从此地址开始读取4字节的中断处理程序的入口地址,8086从此地址开始执行程序,完成了INTR中断请求的响应过程。  18.什么是总线请求?8086在最小工作模式下,有关总线请求的信号引脚是什么?  答:系统中若存在多个可控制总线的主模块时,其中之一若要使用总线进行数据传输时,需向系统请求总线的控制权,这就是一个总线请求的过程。8086在最小工作模式下有关总线请求的信号引脚是HOLD与HLDA。  19.简述在最小工作模式下,8086如何响应一个总线请求?  答:外部总线主控模块经HOLD引线向8086发出总线请求信号;8086在每个时钟周期的上升沿采样HOLD引线;若发现HOLD=1则在当前总线周期结束时(T4结束)发出总线请求的响应信号HLDA;8086使地址、数据及控制总线进入高阻状态,让出总线控制权,完成响应过程。  20.在基于8086的微计算机系统中,存储器是如何组织的?是如何与处理器总线连接的?BHE#信号起什么作用?   答:8086为16位处理器,可访问1M字节的存储器空间;1M字节的存储器分为两个512K字节的存储体,命名为偶字节体和奇字节体;偶体的数据线连接D7~D0,“体选”信号接地址线A0;奇体的数据线连接D15~D8,“体选”信号接BHE#信号;BHE#信号有效时允许访问奇体中的高字节存储单元,实现8086的低字节访问、高字节访问及字访问。  21.“80386是一个32位微处理器”,这句话的涵义主要指的是什么?  答:指80386的数据总线为32位,片内寄存器和主要功能部件均为32位,片内数据通路为32位。  22.80X86系列微处理器采取与先前的微处理器兼容的技术路线,有什么好处?有什么不足?  答:好处是先前开发的软件可以在新处理器组成的系统中运行,保护了软件投资。缺点是处理器的结构发展受到兼容的约束,为了保持兼容性增加了硅资源的开销,增加了结构的复杂性。  23.80386内部结构由哪几部分组成?简述各部分的作用。  答:80386内部结构由执行部件(EU)、存储器管理部件(MMU)和总线接口部件(BIU)三部分组成。EU包括指令预取部件、指令译码部件、控制部件、运算部件及保护检测部件,主要功能是执行指令。存储器管理部件包括分段部件、分页部件,实现对存储器的分段分页式的管理,将逻辑地址转换成物理地址。总线接口部件作用是进行片外访问:对存储器及I/O接口的访问、预取指令;另外的作用是进行总线及中断请求的控制  24.80386有几种存储器管理模式?都是什么?  答:80386有三种存储器管理模式,分别是实地址方式、保护方式和虚拟8086方式  25.在不同的存储器管理模式下,80386的段寄存器的作用是什么?  答:在实地址方式下,段寄存器与8086相同,存放段基地址。在保护方式下,每个段寄存器还有一个对应的64位段描述符寄存器,段寄存器作为选择器存放选择符。在虚拟8086方式下,段寄存器的作用与8086相同。  26.试说明虚拟存储器的涵义,它与物理存储器有什么区别?80386虚拟地址空间有多大?  答:虚拟存储器是程序员面对的一个巨大的、可寻址的存储空间,这个空间是内存与外存联合形成的,在操作系统的管理下,程序可象访问内存一样去访问外存而获得所需数据。物理存储器是指机器实际拥有的内存储器,不包括外存。80386的虚拟地址空间为64TB大。  27.试说明描述符的分类及各描述符的作用。   答:描述符分为三类:存储器段描述符、系统段描述符、门描述符。存储器段描述符由8字节组成,它用来说明一个段中保存信息的情况。32位段基地址和20位段界限值定位了该段在存储空间中的位置,其它有关位决定访问权限及段的长度单位。系统段描述符与存储器段描述符大多数字节段相同,有关访问权及属性字节段有些不同。门描述符用来改变程序的特权级别、切换任务的执行以及指出中断服务程序的入口。  28.描述符表的作用是什么?有几类描述符表?  答:描述符表顺序存放一系列描述符,描述符表定义了在80386系统中被使用的全部存储器段。有3类描述符表,即全局描述符表、局部描述符表及中断描述符表。  29.80386的分段部件是如何将逻辑地址变为线性地址的?  答:分段部件根据段选择符从全局描述符表或局部描述符表中取出对应的段描述符。把段描述符32位段基地址与逻辑地址中的32位偏移量相加就形成了线性地址。  30.80386中如何把线性地址变为物理地址?  答:分段部件形成的32位线性地址中高10位作为寻址页目录表的偏移量,与控制寄存器CR3中页目录表基地址共同形成一个32位的地址指向页表中的一个页项,即为一个页面描述符。该页面项中高20位作为页面基地址,线性地址的低12位为偏移量,相加后形成指向某一存储单元的32位物理地址。若禁止分页功能,线性地址就是物理地址。  31.80386对中断如何分类?  答:80386把中断分为外部中断和内部中断两大类,外部中断经NMI和INTR引线输入请求信号。内部中断也叫内部异常中断,分为陷阱中断、内部故障异常中断、异常终止中断。  32.80386在保护方式下中断描述符表与8086的中断向量表有什么不同?  答:8086工作在实地址方式,向量表是在存储器的0段中最低1024字节内存中。80386在保护方式下要通过中断描述符表中的描述符访问虚拟空间的中断向量,中断描述符表的位置不是固定的,要由IDTR寄存器实现在虚拟空间的定位。  33.简述80386在保护方式下的中断处理过程。答:80386响应中断后,接收由中断源提供的类型码并将其乘8,与IDTR寄存器中基地址相加,指出中断描述符的位置,读出中断描述符,依其中的段选择符及条件决定从两个描述符表LDT或GDT中的一个得到段描述符,形成中断服务程序入口所在存储器单元的线性地址。第3章8086指令系统及寻址方式1.根据下列要求编写一个汇编语言程序::(1)代码段的段名为COD_SG(2)数据段的段名为DAT_SG(3)堆栈段的段名为STK_SG(4)变量HIGH_DAT所包含的数据为95 (1)将变量HIGH_DAT装入寄存器AH,BH和DL(2)程序运行的入口地址为START答案:DAT_SGSEGEMNTHIGH_DATDB95DAT_SGENDS;STK_SGSEGMENTDW64DUP(?)STK_SGENDS;COD_SGSEGMENTMAINPROCFARASSUMECS:COD_SG,DS:DAT_SG,SS:STK_SGSTART:MOVAX,DAT-SGMOVDS,AXMOVAH,HIGH_DATMOVBH,AHMOVDL,AHMOVAH,4CHINT21HMAINENDPCOD_SGENDSENDSTART2.指出下列程序中的错误:STAKSGSEGMENTDB100DUP(?)STA_SGENDSDTSEGSEGMENTDATA1DB?DTSEGENDCDSEGSEGMENTMAINPROCFARSTART:MOVDS,DATSEGMOVAL,34HADDAL,4FHMOVDATA,ALSTARTENDPCDSEGENDSEND答案:改正后:STAKSGSEGMENTDB100DUP(?)STAKSGENDS DTSEGSEGMENTDATA1DB?DTSEGENDSCDSEGSEGMENTMAINPROCFARASSUMECS:CDSEG,DS:DTSEG,SS:STAKSGSTART:MOVAX,DTSEGMOVDS,AXMOVAL,34HADDAL,4FHMOVDATA1,ALMOVAH,4CHINT21HMAINENDPCDSEGENDSENDS3.将下列文件类型填入空格:(1).obj(2).exe(3).crf(4).asm(5).lst(6).map编辑程序输出的文件有______________________________________;汇编程序输出的文件有______________________________________;连接程序输出的文件有______________________________________。答案:编辑程序输出文件:(4)汇编程序输出文件:(1),(3),(5)连接程序输出文件:(2),(6)4.下列标号为什么是非法的?(1)GET.DATA(2)1_NUM(3)TEST-DATA(4)RET(5)NEWITEM答案:非法标号:(1)因为‘.’只允许是标号的第一个字符(2)第一个字符不能为数字(3)不允许出现‘-’(4)不能是保留字,如助记符(5)不能有空格5.下面的数据项定义了多少个字节?DATA_1DB6DUP(4DUP(0FFH))答案:24字节6.对于下面两个数据段,偏移地址为10H和11H的两个字节中的数据是一样的吗?为什么? DTSEGSEGMENT|DTSEGSEGMENTORG10H|ORG10HDATA1DB72H|DATA1DW7204HDB04H|DTSEGENDSDTSEGENDS|答案:不一样.分别是72H,04H和04H,72H.存储字时低8位存在低字节,高8位存在高字节.7.下面的数据项设置了多少个字节?(1)ASC_DATADB‘1234’(2)HEX_DATADB1234H答案:(1)设置了4个字节(2)设置了2个字节8.执行下列指令后,AX寄存器中的内容是什么?TABLEDW10,20,30,40,50ENTRYDW3..MOVBX,OFFSETTABLEADDBX,ENTRYMOVAX,[BX]答案:(AX)=409.指出下列指令的错误:(1)MOVAH,BX(2)MOV[SI],[BX](3)MOVAX,[SI][DI](4)MOVAX,[BX][BP](5)MOV[BX],ES:AX(6)MOVBYTEPTR[BX],1000(7)MOVAX,OFFSET[SI](8)MOVCS,AX(9)MOVDS,BP答案:(1)源、目的字长不一致(2)源、目的不能同时为存贮器寻址方式(3)基址变址方式不能有SI和DI的组合(4)基址变址方式不能有BX和BP的组合(5)在8086寻址方式中,AX不能作为基址寄存器使用,而且源、目的不能同时为存贮器寻址方式(6)1000超出一个字节的表数范围(7)OFFSET只用于简单变量,应去掉(8)CS不能作为目的寄存器(9)段地址不能直接送入数据段寄存器10.DATASEGMENTTABLE_ADDRDW1234HDATAENDS..MOVBX,TABLE_ADDRLEABX,TABLE_ADDR请写出上述两条指令执行后,BX寄存器中的内容。答案: MOVBX,TABLE_ADDR;执行后(BX)=1234HLEABX,TABLE_ADDR;执行后(BX)=OFFSETTABLE_ADDR11.设(DS)=1B00H,(ES)=2B00H,有关存储器地址及其内容如右图所示,请用两条指令把X装入AX寄存器。1B00:2000H8000H1B00:2002H2B00H..2B00:8000HX答案:LESBX,[2000H]MOVAX,ES:[BX]12.变量DATAX和DATAY定义如下:DATAXDW0148HDW2316HDATAYDW0237HDW4052H按下述要求写出指令序列:(1)DATAX和DATAY中的两个字数据相加,和存放在DATAY和DATAY+2中。(2)DATAX和DATAY中的两个双字数据相加,和存放在DATAY开始的字单元中。(3)DATAX和DATAY两个字数据相乘(用MUL)。(4)DATAX和DATAY两个双字数据相乘(用MUL)。(5)DATAX除以23(用DIV)。(6)DATAX双字除以字DATAY(用DIV)。答案:(1)MOVAX,DATAXADDAX,DATAYMOVBX,DATAX+2ADDBX,DATAY+2MOVDATAY,AXMOVDATAY+2,BX(2)MOVAX,DATAXADDDATAY,AXMOVAX,DATAX+2ADCDATAY+2,AX(3)MOVAX,DATAXMULDATAYMOVDATAY,AXMOVDATAY+2,DX(4)MOVAX,WORDPTRDATAXMOVBX,WORDPTRDATAY MULBXMOVRESULT,AXMOVRESULT+2,DXMOVAX,WORDPTRDATAXMOVAX,WORDPTRDATAY+2MULBXADDRESULT+2,AXADCRESULT+4,DXMOVAX,WORDPTRDATAX+2MOVBX,WORDPTRDATAYMULBXADDRESULT+2,AXADCRESULT+4,DXMOVAX,WORDPTRDATAX+2MOVBX,WORDPTRDATAY+2MULBXADDRESULT+4,AXADCRESULT+6,DX(5)MOVAX,DATAXMOVBL,23DIVBLMOVBL,AHMOVAH,0MOVDATAY,AX;存放商MOVAL,BLMOVDATAY+2,AX;存放余数(6)MOVAX,DATAXMOVDX,DATAX+2DIVDATAYMOVDATAY,AXMOVDATAY+2,DX13.试分析下面的程序段完成什么操作?MOVCL,04SHLDX,CLMOVBL,AHSHLAX,CLSHRBL,CLORDL,BL答案:将DX:AX中的双字左移4位(乘16)14.用其他指令完成和下列指令一样的功能:(1)REPMOVSB(2)REPLODSB(3)REPSTOSB(4)REPSCASB 答案:(1)LOOP1:MOVAL,BYTEPTR[SI]MOVES:BYTEPTR[DI],ALINCSI或:DECSIINCDI或:DECDILOOPLOOP1(2)LOOP1:MOVAL,BYTEPTR[SI]INCSI或:DECSILOOPLOOP1(3)LOOP1:MOVES:BYTEPTR[DI],ALINCDI或:DECDILOOPLOOP1(4)LOOP1:CMPAL,ES:BYTEPTR[DI]JEEXITINCDI或:DECDILOOPLOOP1EXIT:15.编写程序段,比较两个5字节的字符串OLDS和NEWS,如果OLDS字符串与NEWS不同,则执行NEW_LESS,否则顺序执行程序。答案:LEASI,OLDSLEADI,NEWSMOVCX,5CLDREPZCMPSBJNZNEW_LESS16.假定AX和BX中的内容为带符号数,CX和DX中的内容为无符号数,请用比较指令和条件转移指令实现以下判断:(1)若DX的值超过CX的值,则转去执行EXCEED(2)若BX的值大于AX的值,则转去执行EXCEED(3)CX中的值为0吗?若是则转去执行ZERO(4)BX的值与AX的值相减,会产生溢出吗?若溢出则转OVERFLOW(5)若BX的值小于AX的值,则转去执行EQ_SMA(6)若DX的值低于CX的值,则转去执行EQ_SMA答案:(1)CMPDX,CXJAEXCEED (2)CMPBX,AXJGEXCEED(3)CMPCX,0JEZERO(4)SUBBX,AXJOOVERFLOW(5)CMPBX,AXJLEQ_SMA(6)CMPDX,CXJBEQ_SMA17.假如在程序的括号中分别填入指令:(1)LOOPL20(2)LOOPNEL20(3)LOOPEL20试说明在三种情况下,当程序执行完后,AX、BX、CX、DX四个寄存器的内容分别是什么?TITLEEXLOOP.COMCODESGSEGMENTASSUMECS:CODESG,DS:CODESG.SS:CODESGORG100HBEGIN:MOVAX,01MOVBX,02MOVDX,03MOVCX,04L20:INCAXADDBX,AXSHRDX,1()RETCODESGENDSENDBEGIN答案:(1)(AX)=5(BX)=16(CX)=0(DX)=0(2)(AX)=2(BX)=4(CX)=3(DX)=1(3)(AX)=3(BX)=7(CX)=2(DX)=018.变量N1和N2均为2字节的非压缩BCD数码,请写出计算N1与N2之差的指令序列。答案:MOVAX,0MOVAL,N1+1SUBAL,N2+1AASMOVDL,ALMOVAL,N1SBBAL,N2AASMOVDH,AL 19.有两个3位的ASCII数串ASC1和ASC2定义如下:ASC1DB‘578’ASC2DB‘694’ASC3DB‘0000’请编写程序计算ASC3←ASC1+ASC2。答案:CLCMOVCX,3MOVBX,2BACK:MOVAL,ASC1[BX]ADCAL,ASC2[BX]AAAORASC3[BX+1],ALDECBXLOOPBACKRCLCX,1ORASC3[BX],CL20.假设(CS)=3000H,(DS)=4000H,(ES)=2000H,(SS)=5000H,(AX)=2060H,(BX)=3000H,(CX)=5,(DX)=0,(SI)=2060H,(DI)=3000H,(43000H)=0A006H,(23000H)=0B116H,(33000H)=0F802H,(25060)=00B0H,.(SP)=0FFFEH,(CF)=1,(DF)=1,请写出下列各条指令单独执行完后,有关寄存器及存储单元的内容,若影响条件码请给出条件码SF、ZF、OF、CF的值。(1)SBBAX,BX(2)CMPAX,WORDPTR[SI+0FA0H](3)MULBYTEPTR[BX](4)AAM(5)DIVBH(6)SARAX,CL(7)XORAX,0FFE7H(8)REPSTOSB(9)JMPWORDPYR[BX](10)XCHGAX,ES:[BX+SI]答案:(1)(AX)=0F05FH,(SF)=1,(ZF)=0,(OF)=0,(CF)=1(2)(SF)=1,(ZF)=0,(OF)=1,(CF)=1(3)(AX)=0240H,(OF)=1,(CF)=1(4)(AX)=0906H,(SF)=0,(ZF)=0(5)(AX)=20ACH(6)(AX)=0103H,(CF)=0(7)(AX)=0DF87H,(CF)=0,(OF)=0,(SF)=1,(ZF)=0(8)(23000H)~(23004H)=60H,不影响标志位(9)(IP)=0A006H,不影响标志位(10)(AX)=00B0H,(25060)=2060H,不影响标志位第4章汇编语言程序设计基础 1.试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。答案:abc:movah,1int21hcmpal,’a’jbstopcmpal,’z’jastopsubal,20hmovdl,almovah,2int21hjmpabcstop:ret2.编写程序,比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示“MATCH”,若不同则显示“NOMATCH”。答案:datareasegmentstring1db‘asfioa’string2db‘xcviyoaf’mess1db‘MATCH’,’$’mess2db‘NOMATCH’,’$’datareaendsprognamsegmentmainprocfarassumecs:prognam,ds:datareastart:pushdssubax,axpushaxmovax,datareamovds,axmoves,axbegin:movcx,string2-string1movbx,mess1-string2cmpbx,cxjnzdispnoleadx,addrleasi,string1leadi,string2repecmpsbjnedispno movah,9leadx,mess1int21hretdispno:movah,9leadx,mess2int21hretmainendpprognamendsendstart3.试编写程序,要求从键盘输入3个16进制数,并根据对3个数的比较显示如下信息:(1)如果3个数都不相等则显示0;(2)如果3个数中有2个数相等则显示2;(3)如果3个数都相等则显示3。答案:datasegmentarraydw3dup(?)dataendscodesegmentmainprocfarassumecs:code,ds:datastart:pushdssubax,axpushaxmovax,datamovds,axmovcx,3leasi,arraybegin:pushcxmovcl,4movdi,4movdl,‘‘movah,02int21hmovdx,0input:movah,01int21handal,0fh shldx,clordl,aldecdijneinputmov[si],dxaddsi,2popcxloopbegincomp:leasi,arraymovdl,0movax,[si]movbx,[si+2]cmpax,bxjnenext1adddl,2next1:cmp[si+4],axjnenext2adddx,2next2:cmp[si+4],bxjnenumadddl,2num:cmpdx,3jldispmovdl,3disp:movah,2adddl,30hint21hretmainendpcodeendsendstart4.已知整数变量A和B,试编写完成下述操作的程序:(1)若两个数中有一个是奇数,则将该奇数存入A中,偶数存入B中;(2)若两个数均为奇数,则两数分别加1,并存回原变量;(3)若两个数均为偶数,则两变量不变。答案:dsegsegmentadw? bdw?dsegendscsegsegmentmainprocfarassumecs:cseg,ds:dsegstart:pushdssubax,axpushaxmovax,dsegmovds,axbegin:movax,amovbx,bxorax,bxtestax,0001jzclasstestbx,0001jzexitxchgbx,amovb,bxjmpexitclass:testbx,0001jzexitincbincaexit:retmainendpcsegendsendstart5.把0~10010之间的30个数,存入首地址为GRAD的字数组中,GRAD+i表示学号为i+1的学生成绩。另一个数组RANK是30个学生的名次表,其中RANK+I的内容是学号为i+1的学生的名次。试编写程序,根据GRAD中的学生成绩,将排列的名次填入RANK数组中(提示:一个学生的名次等于成绩高于这个学生的人数加1)。答案:dsegsegmentgradedw30dup(?)rankdw30dup(?)dsegendscsegsegmentmainprocfarassumecs:cseg,ds:dseg,es:dsegstart:pushdssubax,axpushax movax,dsegmovds,axmoves,axbegin:movdi,0movcx,30loop1:pushcxmovcx,30movsi,0movax,grade[di]movdx,0loop2:cmpgrade[si],axjbego_onincdxgo_on:addsi,2looploop2popcxincdxmovrank[di],dxsdddi,2looploop1retmainendpcsegendsendstart6.分析下列程序的功能,写出堆栈最满时各单元的地址及内容。SSEGSEGMENT‘STACK’AT1000H;堆栈的段地址为1000HDW128DUP(?)TOSLABELWORDSSEGENDS;--------------------------------------------DSEGSEGMENTDW32DUP(?)DSEGENDS;---------------------------------------------CSEGSEGMENTMAINPROCFARASSUMECS:CSEG,DS:DSEG,SS:SSEGSTART:MOVAX,SSEGMOVSS,AXMOVAX,DSEGMOVDS,AXMOVAX,4321HCALLHTOARETN:MOVAH,4CHINT21HMAINENDP;---------------------------------------------HTOAPROCNEARCMPAX,15 JLEB1PUSHAXPUSHBPMOVBP,SPMOVBX,[BP+2]ANDBX,0FHMOV[BP+2],BXPOPBPMOVCL,4SHRAX,CLCALLHTOAB1:POPAXB2:ADDAL,30HJLPRTADDAL,07PRT:MOVDL,ALMOVAH,2INT21HRETHTOAENDPCSEGENDS;;---------------------------------------------ENDSTART答案:1000:0F2HB11000:0F4H31000:0F6HB11000:0F8H21000:0FAHB11000:0FCH11000:0FEHRETN1000:100H7.写出分配给下列中断类型号在中断向量表中的物理地址。(1)INT12H(2)INT8答案:(1)00048h(2)00020h8.试编写程序,它轮流测试两个设备的状态寄存器,只要一个状态寄存器的第0位为1,则与其相应的设备就输入一个字符;如果其中任一状态寄存器的第3位为1,则整个输入过程结束。两个状态寄存器的端口地址分别是0024和0036,与其相应的数据输入寄存器的端口则为0026和0038,输入字符分别存入首地址为BUFF1和BUFF2的存储区中。答案:movsi,0movdi,0test12:inal,0024h testal,08jnzexitinal,0036htestal,08jnzexitdev1:inal,0024htestal,01jzdev2inal,0026hmovbuffer[si],alincsidev2:inal,0036htestal,01jztest12inal,0038hmovbuff2[di],alincdijmptest12exit:ret9.给定(SP)=0100,(SS)=0300,(FLAGS)=0240,存储单元的内容为(00020)=0040,(00022)=0100,在段地址为0900及偏移地址为00A0的单元中有一条中断指令INT8,试问执行INT8指令后,SP,SS,IP,FLAGS的内容是什么?栈顶的三个字是什么?答案:(SP)=00FA(SS)=0300(IP)=0040(FLAGS)=0040堆栈内容:00A1H0900H0240H10.编写一个程序,接收从键盘输入的10个十进制数字,输入回车符则停止输入,然后将这些数字加密后(用XLAT指令变换)存入内存缓冲区BUFFER。加密表为;输入数字:0,1,2,3,4,5,6,7,8,9密码数字:7,5,9,1,3,6,8,0,2,4答案:scodedb7,5,9,1,3,6,8,0,2,4bufferdb10dup(?) ;……movsi,0movcx,10leabx,scodeinput:movah,01int21hcmpal,0ahjzexitandal,0fhxlatmovbuffer[si],alincsiloopinputexit:ret第3章8086指令系统及寻址方式1.根据下列要求编写一个汇编语言程序::(1)代码段的段名为COD_SG(2)数据段的段名为DAT_SG(3)堆栈段的段名为STK_SG(4)变量HIGH_DAT所包含的数据为95(5)将变量HIGH_DAT装入寄存器AH,BH和DL(6)程序运行的入口地址为START答案:DAT_SGSEGEMNTHIGH_DATDB95DAT_SGENDS;STK_SGSEGMENTDW64DUP(?)STK_SGENDS;COD_SGSEGMENTMAINPROCFARASSUMECS:COD_SG,DS:DAT_SG,SS:STK_SGSTART:MOVAX,DAT-SGMOVDS,AXMOVAH,HIGH_DATMOVBH,AHMOVDL,AHMOVAH,4CHINT21HMAINENDPCOD_SGENDS ENDSTART2.指出下列程序中的错误:STAKSGSEGMENTDB100DUP(?)STA_SGENDSDTSEGSEGMENTDATA1DB?DTSEGENDCDSEGSEGMENTMAINPROCFARSTART:MOVDS,DATSEGMOVAL,34HADDAL,4FHMOVDATA,ALSTARTENDPCDSEGENDSEND答案:改正后:STAKSGSEGMENTDB100DUP(?)STAKSGENDSDTSEGSEGMENTDATA1DB?DTSEGENDSCDSEGSEGMENTMAINPROCFARASSUMECS:CDSEG,DS:DTSEG,SS:STAKSGSTART:MOVAX,DTSEGMOVDS,AXMOVAL,34HADDAL,4FHMOVDATA1,ALMOVAH,4CHINT21HMAINENDPCDSEGENDSENDS3.将下列文件类型填入空格:(1).obj(2).exe(3).crf(4).asm(5).lst(6).map编辑程序输出的文件有______________________________________;汇编程序输出的文件有______________________________________;连接程序输出的文件有______________________________________。答案: 编辑程序输出文件:(4)汇编程序输出文件:(1),(3),(5)连接程序输出文件:(2),(6)4.下列标号为什么是非法的?(1)GET.DATA(2)1_NUM(3)TEST-DATA(4)RET(5)NEWITEM答案:非法标号:(1)因为‘.’只允许是标号的第一个字符(2)第一个字符不能为数字(3)不允许出现‘-’(4)不能是保留字,如助记符(5)不能有空格5.下面的数据项定义了多少个字节?DATA_1DB6DUP(4DUP(0FFH))答案:24字节6.对于下面两个数据段,偏移地址为10H和11H的两个字节中的数据是一样的吗?为什么?DTSEGSEGMENT|DTSEGSEGMENTORG10H|ORG10HDATA1DB72H|DATA1DW7204HDB04H|DTSEGENDSDTSEGENDS|答案:不一样.分别是72H,04H和04H,72H.存储字时低8位存在低字节,高8位存在高字节.7.下面的数据项设置了多少个字节?(1)ASC_DATADB‘1234’(2)HEX_DATADB1234H答案:(1)设置了4个字节(2)设置了2个字节8.执行下列指令后,AX寄存器中的内容是什么?TABLEDW10,20,30,40,50ENTRYDW3..MOVBX,OFFSETTABLEADDBX,ENTRYMOVAX,[BX]答案:(AX)=409.指出下列指令的错误:(1)MOVAH,BX(2)MOV[SI],[BX](3)MOVAX,[SI][DI](4)MOVAX,[BX][BP](5)MOV[BX],ES:AX(6)MOVBYTEPTR[BX],1000 (7)MOVAX,OFFSET[SI](8)MOVCS,AX(9)MOVDS,BP答案:(1)源、目的字长不一致(2)源、目的不能同时为存贮器寻址方式(3)基址变址方式不能有SI和DI的组合(4)基址变址方式不能有BX和BP的组合(5)在8086寻址方式中,AX不能作为基址寄存器使用,而且源、目的不能同时为存贮器寻址方式(6)1000超出一个字节的表数范围(7)OFFSET只用于简单变量,应去掉(8)CS不能作为目的寄存器(9)段地址不能直接送入数据段寄存器10.DATASEGMENTTABLE_ADDRDW1234HDATAENDS..MOVBX,TABLE_ADDRLEABX,TABLE_ADDR请写出上述两条指令执行后,BX寄存器中的内容。答案:MOVBX,TABLE_ADDR;执行后(BX)=1234HLEABX,TABLE_ADDR;执行后(BX)=OFFSETTABLE_ADDR11.设(DS)=1B00H,(ES)=2B00H,有关存储器地址及其内容如右图所示,请用两条指令把X装入AX寄存器。1B00:2000H8000H1B00:2002H2B00H..2B00:8000HX答案:LESBX,[2000H]MOVAX,ES:[BX]12.变量DATAX和DATAY定义如下:DATAXDW0148HDW2316HDATAYDW0237HDW4052H按下述要求写出指令序列:(1)DATAX和DATAY中的两个字数据相加,和存放在DATAY和DATAY+2中。(2)DATAX和DATAY中的两个双字数据相加,和存放在DATAY开始的字单元中。(3)DATAX和DATAY两个字数据相乘(用MUL)。 (1)DATAX和DATAY两个双字数据相乘(用MUL)。(2)DATAX除以23(用DIV)。(3)DATAX双字除以字DATAY(用DIV)。答案:(1)MOVAX,DATAXADDAX,DATAYMOVBX,DATAX+2ADDBX,DATAY+2MOVDATAY,AXMOVDATAY+2,BX(2)MOVAX,DATAXADDDATAY,AXMOVAX,DATAX+2ADCDATAY+2,AX(3)MOVAX,DATAXMULDATAYMOVDATAY,AXMOVDATAY+2,DX(4)MOVAX,WORDPTRDATAXMOVBX,WORDPTRDATAYMULBXMOVRESULT,AXMOVRESULT+2,DXMOVAX,WORDPTRDATAXMOVAX,WORDPTRDATAY+2MULBXADDRESULT+2,AXADCRESULT+4,DXMOVAX,WORDPTRDATAX+2MOVBX,WORDPTRDATAYMULBXADDRESULT+2,AXADCRESULT+4,DXMOVAX,WORDPTRDATAX+2MOVBX,WORDPTRDATAY+2MULBXADDRESULT+4,AXADCRESULT+6,DX(5)MOVAX,DATAXMOVBL,23DIVBLMOVBL,AHMOVAH,0 MOVDATAY,AX;存放商MOVAL,BLMOVDATAY+2,AX;存放余数(6)MOVAX,DATAXMOVDX,DATAX+2DIVDATAYMOVDATAY,AXMOVDATAY+2,DX13.试分析下面的程序段完成什么操作?MOVCL,04SHLDX,CLMOVBL,AHSHLAX,CLSHRBL,CLORDL,BL答案:将DX:AX中的双字左移4位(乘16)14.用其他指令完成和下列指令一样的功能:(1)REPMOVSB(2)REPLODSB(3)REPSTOSB(4)REPSCASB答案:(1)LOOP1:MOVAL,BYTEPTR[SI]MOVES:BYTEPTR[DI],ALINCSI或:DECSIINCDI或:DECDILOOPLOOP1(2)LOOP1:MOVAL,BYTEPTR[SI]INCSI或:DECSILOOPLOOP1(3)LOOP1:MOVES:BYTEPTR[DI],ALINCDI或:DECDILOOPLOOP1(4)LOOP1:CMPAL,ES:BYTEPTR[DI]JEEXITINCDI或:DECDILOOPLOOP1EXIT:15.编写程序段,比较两个5字节的字符串OLDS和NEWS, 如果OLDS字符串与NEWS不同,则执行NEW_LESS,否则顺序执行程序。答案:LEASI,OLDSLEADI,NEWSMOVCX,5CLDREPZCMPSBJNZNEW_LESS16.假定AX和BX中的内容为带符号数,CX和DX中的内容为无符号数,请用比较指令和条件转移指令实现以下判断:(1)若DX的值超过CX的值,则转去执行EXCEED(2)若BX的值大于AX的值,则转去执行EXCEED(3)CX中的值为0吗?若是则转去执行ZERO(4)BX的值与AX的值相减,会产生溢出吗?若溢出则转OVERFLOW(5)若BX的值小于AX的值,则转去执行EQ_SMA(6)若DX的值低于CX的值,则转去执行EQ_SMA答案:(1)CMPDX,CXJAEXCEED(2)CMPBX,AXJGEXCEED(3)CMPCX,0JEZERO(4)SUBBX,AXJOOVERFLOW(5)CMPBX,AXJLEQ_SMA(6)CMPDX,CXJBEQ_SMA17.假如在程序的括号中分别填入指令:(1)LOOPL20(2)LOOPNEL20(3)LOOPEL20试说明在三种情况下,当程序执行完后,AX、BX、CX、DX四个寄存器的内容分别是什么?TITLEEXLOOP.COMCODESGSEGMENTASSUMECS:CODESG,DS:CODESG.SS:CODESGORG100HBEGIN:MOVAX,01MOVBX,02MOVDX,03MOVCX,04L20:INCAX ADDBX,AXSHRDX,1()RETCODESGENDSENDBEGIN答案:(1)(AX)=5(BX)=16(CX)=0(DX)=0(2)(AX)=2(BX)=4(CX)=3(DX)=1(3)(AX)=3(BX)=7(CX)=2(DX)=018.变量N1和N2均为2字节的非压缩BCD数码,请写出计算N1与N2之差的指令序列。答案:MOVAX,0MOVAL,N1+1SUBAL,N2+1AASMOVDL,ALMOVAL,N1SBBAL,N2AASMOVDH,AL19.有两个3位的ASCII数串ASC1和ASC2定义如下:ASC1DB‘578’ASC2DB‘694’ASC3DB‘0000’请编写程序计算ASC3←ASC1+ASC2。答案:CLCMOVCX,3MOVBX,2BACK:MOVAL,ASC1[BX]ADCAL,ASC2[BX]AAAORASC3[BX+1],ALDECBXLOOPBACKRCLCX,1ORASC3[BX],CL20.假设(CS)=3000H,(DS)=4000H,(ES)=2000H,(SS)=5000H,(AX)=2060H,(BX)=3000H,(CX)=5,(DX)=0,(SI)=2060H,(DI)=3000H,(43000H)=0A006H,(23000H)=0B116H,(33000H)=0F802H,(25060)=00B0H,.(SP)=0FFFEH,(CF)=1,(DF)=1, 请写出下列各条指令单独执行完后,有关寄存器及存储单元的内容,若影响条件码请给出条件码SF、ZF、OF、CF的值。(1)SBBAX,BX(2)CMPAX,WORDPTR[SI+0FA0H](3)MULBYTEPTR[BX](4)AAM(5)DIVBH(6)SARAX,CL(7)XORAX,0FFE7H(8)REPSTOSB(9)JMPWORDPYR[BX](10)XCHGAX,ES:[BX+SI]答案:(1)(AX)=0F05FH,(SF)=1,(ZF)=0,(OF)=0,(CF)=1(2)(SF)=1,(ZF)=0,(OF)=1,(CF)=1(3)(AX)=0240H,(OF)=1,(CF)=1(4)(AX)=0906H,(SF)=0,(ZF)=0(5)(AX)=20ACH(6)(AX)=0103H,(CF)=0(7)(AX)=0DF87H,(CF)=0,(OF)=0,(SF)=1,(ZF)=0(8)(23000H)~(23004H)=60H,不影响标志位(9)(IP)=0A006H,不影响标志位(10)(AX)=00B0H,(25060)=2060H,不影响标志位第4章汇编语言程序设计基础1.试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。答案:abc:movah,1int21hcmpal,’a’jbstopcmpal,’z’jastopsubal,20hmovdl,almovah,2int21hjmpabcstop:ret2.编写程序,比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示“MATCH”,若不同则显示“NOMATCH”。答案:datareasegmentstring1db‘asfioa’string2db‘xcviyoaf’mess1db‘MATCH’,’$’mess2db‘NOMATCH’,’$’ datareaendsprognamsegmentmainprocfarassumecs:prognam,ds:datareastart:pushdssubax,axpushaxmovax,datareamovds,axmoves,axbegin:movcx,string2-string1movbx,mess1-string2cmpbx,cxjnzdispnoleadx,addrleasi,string1leadi,string2repecmpsbjnedispnomovah,9leadx,mess1int21hretdispno:movah,9leadx,mess2int21hretmainendpprognamendsendstart3.试编写程序,要求从键盘输入3个16进制数,并根据对3个数的比较显示如下信息:(1)如果3个数都不相等则显示0;(2)如果3个数中有2个数相等则显示2;(3)如果3个数都相等则显示3。答案:datasegmentarraydw3dup(?)dataendscodesegmentmainprocfar assumecs:code,ds:datastart:pushdssubax,axpushaxmovax,datamovds,axmovcx,3leasi,arraybegin:pushcxmovcl,4movdi,4movdl,‘‘movah,02int21hmovdx,0input:movah,01int21handal,0fhshldx,clordl,aldecdijneinputmov[si],dxaddsi,2popcxloopbegincomp:leasi,arraymovdl,0movax,[si]movbx,[si+2]cmpax,bxjnenext1adddl,2next1:cmp[si+4],axjnenext2adddx,2next2:cmp[si+4],bxjnenum adddl,2num:cmpdx,3jldispmovdl,3disp:movah,2adddl,30hint21hretmainendpcodeendsendstart4.已知整数变量A和B,试编写完成下述操作的程序:(1)若两个数中有一个是奇数,则将该奇数存入A中,偶数存入B中;(2)若两个数均为奇数,则两数分别加1,并存回原变量;(3)若两个数均为偶数,则两变量不变。答案:dsegsegmentadw?bdw?dsegendscsegsegmentmainprocfarassumecs:cseg,ds:dsegstart:pushdssubax,axpushaxmovax,dsegmovds,axbegin:movax,amovbx,bxorax,bxtestax,0001jzclasstestbx,0001jzexitxchgbx,amovb,bxjmpexitclass:testbx,0001jzexitincb incaexit:retmainendpcsegendsendstart5.把0~10010之间的30个数,存入首地址为GRAD的字数组中,GRAD+i表示学号为i+1的学生成绩。另一个数组RANK是30个学生的名次表,其中RANK+I的内容是学号为i+1的学生的名次。试编写程序,根据GRAD中的学生成绩,将排列的名次填入RANK数组中(提示:一个学生的名次等于成绩高于这个学生的人数加1)。答案:dsegsegmentgradedw30dup(?)rankdw30dup(?)dsegendscsegsegmentmainprocfarassumecs:cseg,ds:dseg,es:dsegstart:pushdssubax,axpushaxmovax,dsegmovds,axmoves,axbegin:movdi,0movcx,30loop1:pushcxmovcx,30movsi,0movax,grade[di]movdx,0loop2:cmpgrade[si],axjbego_onincdxgo_on:addsi,2looploop2popcxincdxmovrank[di],dxsdddi,2looploop1retmainendpcsegends endstart6.分析下列程序的功能,写出堆栈最满时各单元的地址及内容。SSEGSEGMENT‘STACK’AT1000H;堆栈的段地址为1000HDW128DUP(?)TOSLABELWORDSSEGENDS;--------------------------------------------DSEGSEGMENTDW32DUP(?)DSEGENDS;---------------------------------------------CSEGSEGMENTMAINPROCFARASSUMECS:CSEG,DS:DSEG,SS:SSEGSTART:MOVAX,SSEGMOVSS,AXMOVAX,DSEGMOVDS,AXMOVAX,4321HCALLHTOARETN:MOVAH,4CHINT21HMAINENDP;---------------------------------------------HTOAPROCNEARCMPAX,15JLEB1PUSHAXPUSHBPMOVBP,SPMOVBX,[BP+2]ANDBX,0FHMOV[BP+2],BXPOPBPMOVCL,4SHRAX,CLCALLHTOAB1:POPAXB2:ADDAL,30HJLPRTADDAL,07PRT:MOVDL,ALMOVAH,2INT21HRETHTOAENDPCSEGENDS;;---------------------------------------------ENDSTART答案:1000:0F2HB11000:0F4H3 1000:0F6HB11000:0F8H21000:0FAHB11000:0FCH11000:0FEHRETN1000:100H7.写出分配给下列中断类型号在中断向量表中的物理地址。(1)INT12H(2)INT8答案:(1)00048h(2)00020h8.试编写程序,它轮流测试两个设备的状态寄存器,只要一个状态寄存器的第0位为1,则与其相应的设备就输入一个字符;如果其中任一状态寄存器的第3位为1,则整个输入过程结束。两个状态寄存器的端口地址分别是0024和0036,与其相应的数据输入寄存器的端口则为0026和0038,输入字符分别存入首地址为BUFF1和BUFF2的存储区中。答案:movsi,0movdi,0test12:inal,0024htestal,08jnzexitinal,0036htestal,08jnzexitdev1:inal,0024htestal,01jzdev2inal,0026hmovbuffer[si],alincsidev2:inal,0036htestal,01jztest12inal,0038hmovbuff2[di],alincdijmptest12exit:ret 9.给定(SP)=0100,(SS)=0300,(FLAGS)=0240,存储单元的内容为(00020)=0040,(00022)=0100,在段地址为0900及偏移地址为00A0的单元中有一条中断指令INT8,试问执行INT8指令后,SP,SS,IP,FLAGS的内容是什么?栈顶的三个字是什么?答案:(SP)=00FA(SS)=0300(IP)=0040(FLAGS)=0040堆栈内容:00A1H0900H0240H10.编写一个程序,接收从键盘输入的10个十进制数字,输入回车符则停止输入,然后将这些数字加密后(用XLAT指令变换)存入内存缓冲区BUFFER。加密表为;输入数字:0,1,2,3,4,5,6,7,8,9密码数字:7,5,9,1,3,6,8,0,2,4答案:scodedb7,5,9,1,3,6,8,0,2,4bufferdb10dup(?);……movsi,0movcx,10leabx,scodeinput:movah,01int21hcmpal,0ahjzexitandal,0fhxlatmovbuffer[si],alincsiloopinputexit:ret第8章微计算机总线  1.采用一种总线标准进行微型计算机的硬件结构设计具有什么优点?   答:为适应用户不断变化的要求,微机系统设计必须采用模块化设计,不同的模块组合形成一定的功能。模块之间的连接关系采用标准的总线结构可使不同功能的模块便于互连,兼容性好、生命周期长。模块采用标准化总线结构设计可使模块的生产供应规模化、多元化、价格低、有利于用户。  2.一个总线的技术规范应包括哪些部分?  答:总线技术规范应包括:(1)机械结构规范:模块尺寸、总线插头插座形式与结点数以及模块与插头插座的机械定位。(2)功能规范:总线信号名称、功能以及相互作用的协议。(3)电气规范:总线中每个信号工作时的有效电平、动态转换时间、负载能力以及电气性能的额定值与最大值。  3.总线的定义是什么?简述总线的发展过程。  答:总线就是两个以上模块(或子系统)间传送信息的公共通道,通过它模块间可进行数据、地址码及命令的传输。  最早的标准化总线是S-100总线(1975),80年代初IBMPC/XT个人计算机采用8位ISA总线,之后又在IBMPC/AT机上推出16位ISA总线。随着外设接口对总线性能要求的不断提高,出现了EISA总线及PCI总线。PCI总线目前已被个人计算机广泛采用,成为新的工业标准。  4.微型计算机系统总线由哪三部分组成?它们各自的功能是什么?  答:由地址总线、数据总线和控制总线三部分组成。地址总线用于指出数据的来源或去向;数据总线提供了模块间数据传输的路径;控制总线用来传送各种控制信号以便控制数据、地址总线的操作及使用。  5.扩充总线的作用是什么?它与系统总线的关系是什么?  答:扩充总线是将许多I/O接口连接在一起,集中起来经桥接电路与系统总线相连,减轻系统总线的负载,提高系统性能。系统总线与扩充总线的之间有专门的连接电路,它们各自工作在不同的频宽下,可适应不同工作速度的模块的需要。  6.为什么要引入局部总线?它的特点是什么?  答:早期的扩充总线(ISA总线)工作频率低,不能满足象图形、视频、网络接口等高数据传输率I/O设备的要求。在处理器的系统总线与传统扩充总线之间插入一个总线层次,它的频率高于传统扩充总线,专门连接高速I/O设备,满足它们对传输速率的要求。这一层次的总线就是局部总线。局部总线与系统总线经桥接器相连,局部总线与传统扩充总线也经桥接器相连,三个层次的总线相互隔开,各自工作在不同的频宽上,适应不同模块的需要。  7.总线定时协议分哪几种?各有什么特点?   答:总线有三种定时方法。(1)同步定时,信息传输由公共时钟控制,总线信号中包括一个时钟信号,各模块上所有的操作都在时钟开始时启动。(2)异步定时,信息的传输的操作均由源或目的的特定信号跳变所确定,总线上每一个操作的发生均取决于前一个操作的发生,总线操作过程不用公共时钟来同步。(3)半同步定时,总线上各操作之间的时间间隔可以变化,但这个变化只允许为公共时钟周期的整数倍,信号的出现,采样和结束以公共时钟为基础。  8.总线上数据传输分哪几种类型?各有什么特点?  答:分单周期方式和突发方式两种。在单周期方式中,每个总线周期只传送一个数据。在突发方式下,占用一次总线要进行多个数据的传输,源模块发出首地址去访问目的模块的数据1,以后的数据是在首地址的基础上按一定的规则去寻址目地模块。  9.总线的指标有哪几项,它工作时一般由哪几个过程组成?  答:总线的指标有(1)总线宽度,一次总线操作可以传输的数据位数;(2)总线工作频率,总线上基本定时时钟的频率,它代表总线操作的最高频率;(3)单个数据传输所用时钟周期数。总线上信息传输过程可分解为:(1)请求总线;(2)总线裁决;(3)寻址;(4)数据传送;(5)错误检查。  10.为什么要进行总线仲裁?  答:总线结构的特点是,一个传送信息的公共通路总线为多个模块共同使用。但在某一时刻,只能允许一个主模块使用总线进行数据传输。当有多个主模块要占用总线进行数据传输时,要有一个总线的请求及转交的过程,首先按一定规则进行总线使用权的仲裁,把总线的使用权交给优先级最高的请求者。  11.为什么集中式总线仲裁方式优于菊花链式?  答:菊花链式为串行总线仲裁逻辑,离处理器较远的主模块因前级主模块的占用而在较长时间内得不到响应,优先权的级别与逻辑上级连位置有关,因此灵活性差,缺少公平性。  集中式为并行总线仲裁逻辑,请求与响应信号都是独立与仲裁逻辑相连,优先级的处理可采用多种方式,不至因为某个请求设备的故障而造成整个仲裁逻辑的瘫痪,灵活性好。  12.ISA总线信号分为多少组,它的主要功能是什么?  答:分为总线基本信号、总线访问信号及总线控制信号。总线基本信号主要用来提供基本定时时钟、系统复位、电源和地信号。总线访问信号主要用来提供对总线目标模块访问的地址、数据、访问应答控制信号。总线控制信号的主要功能是提供中断、DMA处理时的请求及响应信号以及扩展模块主控状态的确定信号。  13.ISA16位总线是在ISA8位总线基础上扩充了哪些信号而形成的?  答:ISA16位总线在ISA8位总线基础上把数据线由8位扩充到16位,把地址线由20位扩充到24位;还扩充了中断请求信号、DMA请求与响应信号;还增加了16位数据访问的控制信号等。   14.PCI总线访问时,怎样的信号组合启动一个总线的访问周期,又怎样结束一个访问周期?  答:PCI总线上的主设备取得总线控制权以后,在CLK-1期间发出FRAME#有效信号、要访问的从设备的地址信号及操作类型的命令字,从而启动了一个总线访问周期。结束一个访问周期是通过使FRAME#信号变为无效且保持主设备准备就绪信号IRDY#为有效,完成最后的数据传送后结束这个总线操作。此外用STOP#信号从设备可以主动仃止数据访问周期。第9章先进微处理器介绍  1.提高微处理器性能的途径有哪些?  答:(1)提高芯片内部时钟的工作频率;(2)增加芯片数据总线的宽度,提高微处理器与片外传送数据或指令代码的速率,同时片内的数据路径也必然加宽,内部的数据处理速度会加快。(3)采用能够并行执行指令的微体系结构及其它相关技术。  2.提高微处理器内部执行的并行性有哪些措施?  答:(1)采用超级流水线技术。把指令执行的过程分成很多级,各级所对应的操作可并行进行,即多条指令在同一时刻完成不同级的操作,实现了指令的并行执行。流水线级分的越多,可并行执行的指令条数也越多。(2)采用超标量技术。在芯片内部设置多重功能相同或接近的功能部件,同一时刻可向多个功能部件分派指令去流水执行,实现了指令执行的并行化。  3.奔腾微处理器采用什么技术来提高指令执行的效率?  答:第一代奔腾微处理器采用了超标量结构来提高指令执行的效率。它内部设有两条流水线,一个时钟周期内可发射两条整数指令给两条流水线去执行,另外还有一个浮点部件可执行浮点指令。这种多重功能部件的结构就是一种超标量的结构。  4.高能奔腾微处理器与第一代奔腾微处理器相比,采取了哪几种主要的技术措施来进一步提高性能?  5.答:(1)采用了RISC的设计概念。高能奔腾把X86指令转换成多个较小且易执行的指令,这些转换后的指令是三操作数格式,内部设置大量物理寄存器,这是RISC结构的特点,可以提高指令执行的效率。(2)采用超级流水线与超标量技术,处理器具有较高的吞吐率,处理器工作频率尽可能提高,增加了指令执行的并行度,性能有明显的改善。(3)采用动态执行技术,处理器对指令的执行进行调度,打破原有指令顺序,对以后指令执行的顺序进行预测,形成最佳执行顺序来达到最高的指令执行并行度,避免因分支或数据相关等因素对指令执行的并行性所产生的影响。'