• 374.00 KB
  • 2022-04-22 11:27:58 发布

《微机原理及接口技术》(第2版)—习题解答.doc

  • 70页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'《16/32位微机原理、汇编语言及接口技术·第2版》习题解答70 微处理器指令系统〔习题1.1〕微型计算机到目前为止已发展了几代?给出各代微机的特点和典型的微处理器。〔解答〕〔习题1.2〕什么是微型计算机?PC机、单片机和数字信号处理器的含义各是什么?〔解答〕n微型计算机:以大规模、超大规模集成电路为主要部件,以集成了计算机主要部件——控制器和运算器的微处理器为核心,所构造出的计算机系统nPC机:PC(PersonalComputer)机就是面向个人单独使用的一类微机n单片机:用于控制的微处理器芯片,内部除CPU外还集成了计算机的其他一些主要部件,如:ROM、RAM、定时器、并行接口、串行接口,有的芯片还集成了A/D、D/A转换电路等。n数字信号处理器DSP:主要面向大流量数字信号的实时处理,在宿主系统中充当数据处理中心,在网络通信、多媒体应用等领域正得到越来越多的应用〔习题1.3〕微型计算机主要由哪些基本部件组成?各部件的主要功能是什么?〔解答〕CPU:存储器:外部设备:〔习题1.4〕什么是微机的系统总线?微机的总线结构为它带来了哪些好处?除电源和地线外,一般将总线分为哪3组信号?总线的使用特点是什么?〔解答〕n系统总线:传递信息的一组公用导线,CPU通过它们与存储器和I/O设备进行信息交换n好处:组态灵活、扩展方便n三组信号线:数据总线、地址总线和控制总线n其使用特点是:在某一时刻,只能由一个总线主控设备来控制系统总线,只能有一个发送者向总线发送信号;但可以有多个设备从总线上同时获得信号。70 〔习题1.5〕简述微型计算机的两个主要应用方向及其应用特点。〔解答〕n用于数值计算、数据处理及信息管理方向n采用通用微机,要求有较快的工作速度、较高的运算精度、较大的内存容量和较完备的输入输出设备,为用户提供方便友好的操作界面和简便快捷的维护、扩充手段。n用于过程控制及嵌人应用方向n采用控制类微机,要求能抵抗各种干扰、适应现场的恶劣环境、确保长时间稳定地工作,要求其实时性要好、强调其体积要小、便携式应用强调其省电。〔习题1.6〕请画出PC/XT机主板的模块组成框图,并说明各部件的作用。〔解答〕〔习题1.7〕PC/XT机中的I/O通道所指是什么?它由多少个信号线组成?〔解答〕〔习题1.8〕所谓ROM-BIOS指的是什么?它的主要功能是什么?〔解答〕nBIOS:基本输入输出系统n主要功能:用来驱动和管理诸如键盘、显示器、打印机、磁盘、时钟、串行通信接口等基本的输入输出设备〔习题1.9〕在DOS管理下,PC机的1MB内存空间是怎样分配使用的?〔解答〕〔习题1.10〕简述计算机中“数”和“码”的区别,计算机中常用的数制和码制各有哪些?〔解答〕〔习题1.11〕请完成下列数制转换:⑴将174.66D转换为对应的二进制和十六进制形式⑵将100011101011.01011B转换为对应的十进制和十六进制形式⑶将F18A6.6H转换为对应的二进制和十进制形式70 〔解答〕〔习题1.12〕请写出与数据+37和-37对应的8位机器数原码、反码、补码和移码,并分别用二进制和十六进制表示出来。〔解答〕〔习题1.13〕请将上题中+37和-37的8位补码机器数分别扩充为16位和32位的形式,用十六进制表示出来。〔解答〕〔习题1.14〕8位机器数46H,若作为无符号数和补码有符号数看待,其对应的真值各是什么?若作为BCD码和ASCII码看待,它代表的又各是什么?〔解答〕n无符号数:4×16+6=70n补码有符号数:70(正数)nBCD码:46nASCII码:大写字母‘F’〔习题1.15〕将两个用压缩BCD码表示的十进制数相加,可采用直接相加、然后进行二-十进制调整来实现。以48+36=84(8和6相加后出现非法BCD码)和48+19=67(8和9相加后出现组间进位)为例,请考虑应如何加和如何调整才能得到正确结果。〔解答〕〔习题1.16〕插在PC/XT机I/O通道中的I/O插卡一般使用哪些地址线?在哪些系统资源的使用上,两块插卡有可能发生冲突?〔解答〕〔习题1.17〕请写出单精度浮点数-128.25的机器数、并表示为十六进制数形式(可通过C语言中的union数据类型来加以验证)。〔解答〕〔习题1.18〕请分别写出数据50和50H所对应的BCD码,分别用二进制和十六进制数表示出来,并将它们和原始数据进行对比。〔解答〕70 〔习题1.19〕英文大小写字母“D”和“d”的ASCII码各是什么?“回车(CR)”和“换行(LF)”的ASCII码各是什么?数码“0”、“空格(SP)”和“空操作(NUL)”的ASCII码各是什么?〔解答〕〔习题1.20〕已知汉字“中”的国标区位码为5448,请问它的国标码和机内码各是什么?〔解答〕第1章微处理器指令系统〔习题2.1〕微处理器内部具有哪3个基本部分?8088分为哪两大功能部件?其各自的主要功能是什么?这种结构与8位CPU相比为什么能提高其性能?〔解答〕〔习题2.2〕说明8088的8个8位和8个16位通用寄存器各是什么?〔解答〕〔习题2.3〕什么是标志?状态标志和控制标志有什么区别?画出标志寄存器FLAGS,说明各个标志的位置和含义。〔解答〕〔习题2.4〕举例说明CF和OF标志的差异。〔解答〕〔习题2.5〕什么是8088中的逻辑地址和物理地址?逻辑地址如何转换成物理地址?1MB最多能分成多少个逻辑段?请将如下逻辑地址用物理地址表达:⑴FFFFH:0⑵40H:17H⑶2000H:4500H⑷B821H:4567H〔解答〕n物理地址:物理存储单元具有的一个唯一的20位编号n逻辑地址:在8088内部和用户编程时,所采用的“段地址:偏移地址”形式n将逻辑地址中的段地址左移二进制4位(对应16进制是一位,即乘以16),加上偏移地址就得到20位物理地址70 n1MB最多能分成1MB÷16B=220÷24=216个逻辑段,因为每隔16个字节单元就可以开始一个逻辑段⑴FFFFH:0=FFFF0H⑵40H:17H=00417H⑶2000H:4500H=24500H⑷B821H:4567H=BC777H〔习题2.6〕8088有哪4种逻辑段,各种逻辑段分别是什么用途?〔解答〕•代码段(CodeSegment)用来存放程序的指令序列。处理器利用CS:IP取得下一条要执行的指令•堆栈段(StackSegment)确定堆栈所在的主存区域。处理器利用SS:SP操作堆栈中的数据•数据段(DataSegment)存放当前运行程序所用的数据。处理器利用DS:EA存取数据段中的数据•附加段(ExtraSegment)是附加的数据段,也用于数据的保存。处理器利用ES:EA存取数据段中的数据〔习题2.7〕什么是有效地址EA?8088的操作数如果在主存中,有哪些寻址方式可以存取它?〔解答〕〔习题2.8〕已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12H、34H、56H、78H,[21200H]~[21203H]依次存放2AH、4CH、B7H、65H,说明下列每条指令执行完后AX寄存器的内容,以及源操作数的寻址方式?⑴movax,1200h⑵movax,bx⑶movax,[1200h]⑷movax,[bx]⑸movax,[bx+1100h]⑹movax,[bx+si]⑺movax,[bx][si+1100h]〔解答〕⑴movax,1200h;AX=1200H,立即数寻址⑵movax,bx;AX=0100H,寄存器寻址⑶movax,[1200h];AX=4C2AH,直接寻址70 ⑷movax,[bx];AX=3412H,寄存器间接寻址⑸movax,[bx+1100h];AX=4C2AH,寄存器相对寻址⑹movax,[bx+si];AX=7856H,基址变址寻址⑺movax,[bx][si+1100h];AX=65B7H,相对基址变址寻址〔习题2.9〕说明下面各条指令的具体错误原因⑴movcx,dl⑵movip,ax⑶moves,1234h⑷moves,ds⑸moval,300⑹mov[sp],ax⑺movax,bx+di⑻mov20h,ah〔解答〕〔习题2.10〕已知数字0~9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。请为如下程序段的每条指令加上注释,说明每条指令的功能和执行结果。leabx,tablemoval,8xlat〔解答〕leabx,table;获取table的首地址,BX=200Hmoval,8;传送欲转换的数字,AL=8xlat;转换为格雷码,AL=12H〔习题2.11〕给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:moval,89haddal,aladdal,9dhcmpal,0bchsubal,aldecalincal〔解答〕moval,89h;AL=89HCFZFSFOFPFaddal,al;AL=12H10011addal,9dh;AL=0AFH0010170 cmpal,0bch;AL=0AFH10101subal,al;AL=00H01001decal;AL=0FFH00101incal;AL=00H01001〔习题2.12〕请分别用一条汇编语言指令完成如下功能:⑴把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器。⑵用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。⑶用BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX寄存器的内容相加,并把结果送回存储器中。⑷用位移量为0520H的直接寻址方式把存储器中的一个字与数3412H相加,并把结果送回该存储单元中。⑸把数0A0H与AL寄存器的内容相加,并把结果送回AL中〔解答〕⑴把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器adddx,bx⑵用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中addal,[bx+si]⑶用BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX寄存器的内容相加,并把结果送回存储器中add[bx+0b2h],cx⑷用位移量为0520H的直接寻址方式把存储器中的一个字与数3412H相加,并把结果送回该存储单元中addwordptr[0520h],3412h⑸把数0A0H与AL寄存器的内容相加,并把结果送回AL中addal,0a0h〔习题2.13〕设X、Y、Z、V均为16位带符号数,分别装在X、Y、Z、V存储单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。movax,XimulYmovcx,axmoxbx,dxmovax,Zcwdaddcx,ax70 adcbx,dxsubcx,540sbbbx,0movax,Vcwdsubax,cxsbbdx,bxidivX〔解答〕〔习题2.14〕给出下列各条指令执行后的结果,以及状态标志CF、OF、SF、ZF、PF的状态。movax,1470handax,axorax,axxorax,axnotaxtestax,0f0f0h〔解答〕movax,1470h;AX=1470HCFZFSFOFPFandax,ax;AX=1470H00000orax,ax;AX=1470H00000xorax,ax;AX=0000H01001notax;AX=FFFFH01001testax,0f0f0h;AX=FFFFH00101〔习题2.15〕控制转移类指令中有哪三种寻址方式?〔解答〕〔习题2.16〕假设DS=2000H、BX=1256H、TABLE的偏移地址是20A1H,物理地址232F7H处存放3280H,试问执行下列段内间接寻址的转移指令后,转移的有效地址是什么?⑴JMPBX⑵JMPTABLE[BX]〔解答〕〔习题2.17〕判断下列程序段跳转的条件⑴xorax,1e1ehjeequal⑵testal,10000001b70 jnzthere⑶cmpcx,64hjbthere〔解答〕⑴xorax,1e1ehjeequal;AX=1e1eh(异或后为0)⑵testal,10000001bjnzthere;AL的D0或D7至少有一位为1⑶cmpcx,64hjbthere;CX(无符号数)<64h〔习题2.18〕如下是一段软件延时程序,请问NOP指令执行了多少次?xorcx,cxdelay:noploopdelay〔解答〕〔习题2.19〕有一个首地址为array的20个字的数组,说明下列程序段的功能。movcx,20movax,0movsi,axsumlp:addax,array[si]addsi,2loopsumlpmovtotal,ax〔解答〕〔习题2.20〕按照下列要求,编写相应的程序段:⑴由string指示起始地址的主存单元中存放有一个字符串(长度大于6),把该字符串中的第1个和第6个字符(字节量)传送给DX寄存器。⑵有两个32位数值,按“小端方式”存放在两个缓冲区buffer1和buffer2中,编写程序段完成DX.AX←buffer1-buffer2功能。⑶编写一个程序段,在DX高4位全为0时,使AX=0;否则使AX=-1。⑷把DX.AX中的双字右移4位⑸有一个100个字节元素的数组,其首地址为array,将每个元素减1(不考虑溢出或借位)存于原处。〔解答〕(1)70 movdl,string[1]movdh,string[6](2)movax,wordptrbuffer1subax,wordptrbuffer2;先减低16位movdx,wordptrbuffer1+2sbbdx,wordptrbuffer2+2;后减高16位,需减低16位的借位(3)testdx,0f000hjznextmovax,-1jmpdonenext:movax,0done:…(4)movcx,4again:shrdx,1;右移一位,移出的低位进入CF标志rcrax,1;将CF移进AX高位,同时实现AX右移loopagain;循环4次,实现4位右移(5)movcx,100movbx,0again:subarray[bx],1incbxloopagain〔习题2.21〕AAD指令是用于除法指令之前,进行非压缩BCD码调整的。实际上,处理器的调整过程是:AL←AH×10+AL,AH←0。如果指令系统没有AAD指令,请用一个子程序完成这个调整工作。〔解答〕aadpprocpushbxshlah,1movbl,ahshlah,170 shlah,1addbl,ahaddal,blmovah,0popbxretaadpendp〔习题2.22〕什么是系统功能调用?汇编语言中,调用系统功能的一般步骤是什么?〔解答〕〔习题2.23〕DAA指令的调整操作是:①如果AL的低4位是A~F,或者AF标志为1,则AL←AL+6,且使AF=1;②如果AL的高4位是A~F,或者CF标志为1,则AL←AL+60H,且使CF=1;阅读如下子程序,说明其为什么能够实现AL低4位表示的一位16进制数转换成对应的ASCII码。并且将该程序加上在屏幕上显示的功能,编写成通用的子程序。htoascprocandal,0fhaddal,90hdaaadcal,40hdaarethtoascendp〔解答〕htoascprocpushdxandal,0fhaadal,90hdaaadcal,40hdaamovdl,almovah,2int21h;显示个位数popdxret70 htoascendp〔习题2.24〕乘法的非压缩BCD码调整指令AAM执行的操作是:AH←AL÷10的商,AL←AL÷10的余数。利用AAM可以实现将AL中的100内数据转换为ASCII码,程序如下:xorah,ahaamaddax,3030h利用这段程序,编写一个显示AL中数值(0~99)的子程序。〔解答〕dispascprocpushdxxorah,ahaamaddax,3030hpushaxmovdl,ahmovah,2int21h;显示十位数popaxmovdl,almovah,2int21h;显示个位数popdxretdispascendp〔习题2.25〕编写一个程序段:先提示输入数字“InputNumber:0~9”,然后在下一行显示输入的数字,结束;如果不是键入了0~9数字,就提示错误“Error!”,继续等待输入数字。〔解答〕;数据段inmsgdb‘InputNumber:0~9’,0dh,0ah,’$’ermsgdb‘Error!’,’$’;代码段movdx,offsetinmsg70 movah,9int21h;显示输入数字0~9again:movah,1int21h;接受一个字符cmpal,’0’;判断是否输入的是数字0~9jberdispcmpal,’9’jaerdispmovdl,almovah,2int21h;显示输入的数字jmpdone;结束erdisp:movdx,offsetermsgmovah,9int21h;显示输入错误jmpagain;继续输入done:…第1章汇编语言程序设计〔习题3.1〕汇编语言有什么特点?〔解答〕〔习题3.2〕编写汇编语言源程序时,一般的组成原则是什么?〔解答〕〔习题3.3〕.MODEL伪指令是简化段定义源程序格式中必不可少的语句,它设计了哪7种存储模式,各用于创建什么性质的程序。〔解答〕〔习题3.4〕如何规定一个程序执行的开始位置,主程序执行结束应该如何返回DOS,源程序在何处停止汇编过程?〔解答〕70 〔习题3.5〕逻辑段具有哪些属性?〔解答〕〔习题3.6〕给出你采用一个源程序格式书写的例题3.1源程序。〔解答〕.modelsmall.stack.datastringdb’Hello,Assembly!’,0dh,0ah,’$’.codestart:movax,@datamovds,axmovdx,offsetstringmovah,9int21hmovax,4c00hint21hendstart〔习题3.7〕DOS支持哪两种可执行程序结构,编写这两种程序时需要注意什么?〔解答〕〔习题3.8〕举例说明等价“EQU”伪指令和等号“=”伪指令的用途。〔解答〕〔习题3.9〕给出下列语句中,指令立即数(数值表达式)的值:⑴moval,23hAND45hOR67h⑵movax,1234h/16+10h⑶movax,23hSHL4⑷moval,’a’AND(NOT(’a’-’A’))⑸movax,(76543LT32768)XOR7654h〔解答〕〔习题3.10〕画图说明下列语句分配的存储空间及初始化的数据值:⑴byte_vardb’ABC’,10,10h,’EF’,3dup(-1,?,3dup(4))⑵word_vardw10h,-5,3dup(?)70 〔解答〕见微机原理wjyl习题题解1caogao.ppt-P24〔习题3.11〕请设置一个数据段,按照如下要求定义变量:⑴my1b为字符串变量,表示字符串“PersonalComputer”⑵my2b为用十进制数表示的字节变量,这个数的大小为20⑶my3b为用十六进制数表示的字节变量,这个数的大小为20⑷my4b为用二进制数表示的字节变量,这个数的大小为20⑸my5w为20个未赋值的字变量⑹my6c为100的符号常量⑺my7c为字符串常量,代替字符串“PersonalComputer”〔解答〕〔习题3.12〕希望控制变量或程序代码在段中的偏移地址,应该使用哪个伪指令?〔解答〕〔习题3.13〕名字和标号有什么属性?〔解答〕〔习题3.14〕设在某个程序中有如下片段,请写出每条传送指令执行后寄存器AX的内容:;数据段org100hvarwdw1234h,5678hvarbdb3,4varddd12345678hbuffdb10dup(?)messdb’hello’;代码段movax,offsetvarb+offsetmessmovax,typebuff+typemess+typevardmovax,sizeofvarw+sizeofbuff+sizeofmessmovax,lengthofvarw+lengthofvard〔解答〕〔习题3.15〕假设myword是一个字变量,mybyte1和mybyte2是两个字节变量,指出下列语句中的具体错误原因。⑴movbyteptr[bx],100070 ⑵movbx,offsetmyword[si]⑶cmpmybyte1,mybyte2⑷movmybyte1,al+1⑸subal,myword⑹jnzmyword〔解答〕〔习题3.16〕编写一个程序,把从键盘输入的一个小写字母用大写字母显示出来。〔解答〕movah,1;只允许输入小写字母int21hsubal,20h;转换为大写字母movdl,almovah,2int21h;显示〔习题3.17〕已知用于LED数码管的显示代码表为:LEDtabledb0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hdb80h,90h,88h,83h,0c6h,0c1h,86h,8eh它依次表示0~9、A~F这16个数码的显示代码。现编写一个程序实现将lednum中的一个数字(0~9、A~F)转换成对应的LED显示代码。〔解答〕.modelsmall.stack256.dataLEDtableDB0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hDB80h,90h,88h,83h,0c6h,0clh、86h,8ehlednumDB?.code.startupmovbx,offsetLEDtablemoval,lednumxlat;al中存有对应的LED显示代码。.exit0end70 〔习题3.18〕编制一个程序,把变量bufX和bufY中较大者存入bufZ;若两者相等,则把其中之一存入bufZ中。假设变量存放的是8位有符号数。〔解答〕movax,bufXcmpax,bufYjaedonemovax,bufYdone:movbufZ,ax〔习题3.19〕设变量bufX为有符号16位数,请将它的符号状态保存在signX,即:如果变量值大于等于0,保存0;如果X小于0,保存-1。编写该程序。〔解答〕.modelsmall.stack.databufXdw-7signXdb?.code.startupcmpbufX,0;testbufX,80hjlnext;jnznextmovsignX,0jmpdonenext:movsignX,-1done:.exit0end〔习题3.20〕bufX、bufY和bufZ是3个有符号16进制数,编写一个比较相等关系的程序:⑴如果这3个数都不相等,则显示0;⑵如果这3个数中有两个数相等,则显示1;⑶如果这3个数都相等,则显示2。〔解答〕movdl,’2’70 movax,bufXcmpax,bufYjenext1decdlnext1:cmpax,bufZjenext2decdlnext2:movah,2int21h〔习题3.21〕例题3.7中,如果要实现所有为1的位都顺序执行相应的处理程序段(而不是例题中仅执行最低为1位的处理程序段),请写出修改后的代码段?〔解答〕;代码段moval,numbermovbx,0;BX←记录为1的位数restart:cmpal,0;AL=0结束jzdoneagain:shral,1;最低位右移进入CFjcnext;为1,转移incbx;不为1,继续jmpagainnext:pushaxpushbxshlbx,1;位数乘以2(偏移地址要用2个字节单元)jmpaddrs[bx];间接转移:IP←[table+BX];以下是各个处理程序段fun0:movdl,"0"jmpdispfun1:movdl,"1"jmpdispfun2:movdl,"2"jmpdispfun3:movdl,"3"jmpdispfun4:movdl,"4"jmpdispfun5:movdl,"5"70 jmpdispfun6:movdl,"6"jmpdispfun7:movdl,"7"jmpdisp;disp:movah,2;显示一个字符int21hpopbxpopaxjmprestartdone:…〔习题3.22〕编制程序完成12H、45H、F3H、6AH、20H、FEH、90H、C8H、57H和34H共10个无符号字节数据之和,并将结果存入字节变量SUM中(不考虑进位)。〔解答〕;wjxt322.asm.modelsmall.stack.datab_datadb12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h;原始数据numequ10;数据个数sumdb?;预留结果单元.code.startupxorsi,si;位移量清零xoral,al;取第一个数movcx,num;累加次数again:addal,b_data[si];累加incsi;指向下一个数loopagain;如未完,继续累加movsum,al;完了,存结果.exit0end〔习题3.23〕求主存0040H:0开始的一个64KB物理段中共有多少个空格?〔解答〕70 ;wjxt323.asm.modelsmall.codestart:movax,0040h;送段地址movds,axmovsi,0;偏移地址movcx,si;计数(循环次数)xorax,ax;空格计数器清零again:cmpbyteptr[si],20h;与空格的ASCII码比较jnenext;不是空格,转incax;是空格,空格数加1next:incsi;修改地址指针loopagain;cx=cx-1,如cx=0退出循环.exit0endstart〔习题3.24〕编写计算100个正整数之和的程序。如果和不超过16位字的范围(65535),则保存其和到wordsum,如超过则显示‘Overflow!’。〔解答〕;数据段countequ100parraydwcountdup(?);假设有100个数据wordsumdw0msgdb‘overflow’,’$’;代码段movcx,countmovax,0movbx,offsetparrayagain:addax,[bx]jncnextmovdx,offsetmsgmovah,9int21h;显示溢出信息jmpdone;然后,跳出循环体next:addbx,2loopagainmovwordsum,ax70 done:…〔习题3.25〕编程把一个16位无符号二进制数转换成为用8421BCD码表示的5位十进制数。转换算法可以是:用二进制数除以10000,商为“万位”,再用余数除以1000,得到“千位”;依次用余数除以100、10和1,得到“百位”、“十位”和“个位”。〔解答〕;wjxt325.asm.modelsmall.stack256.dataarraydw?;源字数据dbcddb5dup(?);五位bcd结果,高对高低对低.code.startupmovdx,array;取源数据(余数)movbx,10000;除数movcx,10;除数系数movsi,4;目的数据高位位移量again:movax,dx;dx.ax中存放被除数movdx,0divbx;除于bx,商ax,余数dxmovdbcd[si],al;商<10,存结果pushdx;暂存余数movax,bx;除数除于10movdx,0divcx;dx.ax除于cx,商ax、余数0存在dxmovbx,ax;bx是除数popdxdecsi;目的数据位移量减1jnzagainmovdbcd,dl;存个位数(<10).exit0end〔习题3.26〕过程定义的一般格式是怎样的?子程序开始为什么常有PUSH指令、返回前为什么常有POP指令?下面完成16位无符号数累加的子程序有什么不妥吗?若有,请改正:crazyPROC70 pushaxxorax,axxordx,dxagain:addax,[bx]adcdx,0incbxincbxloopagainretENDPcrazy〔解答〕crazyPROC;crazyPROCpushax;xorax,ax;xorax,axxordx,dx;xordx,dxagain:addax,[bx];again:addax,[bx]adcdx,0;adcdx,0incbx;incbxincbx;incbxloopagain;loopagainret;retENDPcrazy;crazyENDP〔习题3.27〕编写一个源程序,在键盘上按一个键,将从AL返回的ASCII码值显示出来,如果按下ESC键则程序退出。请调用书中的HTOASC子程序。〔解答〕again:movah,1int21hcmpal,1bh;ESC的ASCII码是1bhjedonemovdl,almovah,2int21h;是大写字母则转换为小写字母jmpagaindone:…70 〔习题3.28〕请按如下说明编写子程序:;子程序功能:把用ASCII码表示的两位十进制数转换为对应二进制数;入口参数:DH=十位数的ASCII码,DL=个位数的ASCII码;出口参数:AL=对应的二进制数〔解答〕asctobprocpushcxanddh,0fh;先转换十位数shldh,1;十位数乘以10(采用移位指令)movch,dhshldh,1shldh,1adddh,chanddl,0fh;转换个位数adddh,dl;十位数加个位数moval,dh;设置出口参数popcxretasctobendp〔习题3.29〕调用HTOASC子程序,编写显示一个字节的16进制数、后跟“H”的子程序。〔解答〕DIPASCproc;入口参数:AL=要显示的一个16进制数pushcxpushdxpushaxmovcl,4;转换高位shral,clcallHTOASCmovdl,al;显示movah,2int21hpopax;转换低位callHTOASCmovdl,al;显示70 movah,2int21hmovdl,’H’;显示一个字母“H”movah,2int21hpopdxpopcxretDIPASCendpHTOASCproc;将AL低4位表达的一位16进制数转换为ASCII码andal,0fhcmpal,9jbehtoasc1addal,37h;是0AH~0FH,加37H转换为ASCII码ret;子程序返回htoasc1:addal,30h;是0~9,加30H转换为ASCII码ret;子程序返回HTOASCendp〔习题3.30〕写一个子程序,根据入口参数AL=0、1、2,依次实现对大写字母转换成小写、小写转换成大写或大小写字母互换。欲转换的字符串在string中,用0表示结束。〔解答〕lucaseprocpushbxmovbx,offsetstringcmpal,0jecase0cmpal,1jzcase1cmpal,2jzcase2jmpdonecase0:cmpbyteptr[bx],0jedonecmpbyteptr[bx],’A’jbnext070 cmpbyteptr[bx],’Z’janext0addbyteptr[bx],20hnext0:incbxjmpcase0case1:cmpbyteptr[bx],0jedonecmpbyteptr[bx],’a’jbnext1cmpbyteptr[bx],’z’janext1subbyteptr[bx],20hnext1:incbxjmpcase1case2:cmpbyteptr[bx],0jedonecmpbyteptr[bx],’A’jbnext2cmpbyteptr[bx],’Z’janext20addbyteptr[bx],20hjmpnext2next20:cmpbyteptr[bx],’a’jbnext2cmpbyteptr[bx],’z’janext2subbyteptr[bx],20hnext2:incbxjmpcase2done:popbxretlucaseendp〔习题3.31〕子程序的参数传递有哪些方法,请简单比较。〔解答〕70 〔习题3.32〕采用堆栈传递参数的一般方法是什么,为什么应该特别注意堆栈平衡问题。〔解答〕〔习题3.33〕编写一个求32位数据补码的子程序,通过寄存器传递入口参数。〔解答〕方法1:neg32proc;入口参数:DX.AX=32位有符号数negax;实现0-DX.AX功能negdxsbbdx,0;这条指令也可以用decdx代替retneg32endp;出口参数:DX.AX=32位有符号数的补码方法2:neg32proc;入口参数:DX.AX=32位有符号数notax;实现DX.AX求反加1notdxaddax,1adcdx,0retneg32endp;出口参数:DX.AX=32位有符号数的补码〔习题3.34〕编写一个计算字节校验和的子程序。所谓“校验和”是指不记进位的累加,常用于检查信息的正确性。主程序提供入口参数,有数据个数和数据缓冲区的首地址。子程序回送求和结果这个出口参数。传递参数方法自定。〔解答〕;数据段arraydb12h,25h,0f0h,0a3h,3,68h,71h,0cah,0ffh,90h;数组countequ$-array;数组元素个数resultdb?;校验和;代码段movbx,offsetarray;BX←数组的偏移地址movcx,count;CX←数组的元素个数callchecksum;调用求和过程70 movresult,al;处理出口参数movax,4c00hint21h;计算字节校验和的通用过程;入口参数:DS:BX=数组的段地址:偏移地址,CX=元素个数;出口参数:AL=校验和;说明:除AX/BX/CX外,不影响其他寄存器checksumprocxoral,al;累加器清0sum:addal,[bx];求和incbx;指向下一个字节loopsumretchecksumendpend〔习题3.35〕编制3个子程序把一个16位二进制数用4位16进制形式在屏幕上显示出来,分别运用如下3种参数传递方法,并配合3个主程序验证它。⑴采用AX寄存器传递这个16位二进制数⑵采用temp变量传递这个16位二进制数⑶采用堆栈方法传递这个16位二进制数〔解答〕⑴.modelsmall.stack.datawdatadw34abh.code.startupmovax,wdatacalldispa.exit0;dispaprocpushcxpushdx70 movcl,4movdl,ahshrdl,clcalldldispmovdl,ahanddl,0fhcalldldispmovdl,alshrdl,clcalldldispmovdl,alanddl,0fhcalldldisppopdxpopcxretdispaendp;dldispprocpushaxordl,30hcmpdl,39hjbedldisp1adddl,7dldisp1:movah,2int21hpopaxretdldispendpend⑵.modelsmall.stack.datawdatadw34abhwordtempdw?.code.startup70 movax,wdatamovwordtemp,axcalldispa.exit0;dispaprocpushcxpushdxmovcl,4movdl,byteptrwordtemp+1shrdl,clcalldldispmovdl,byteptrwordtemp+1anddl,0fhcalldldispmovdl,byteptrwordtempshrdl,clcalldldispmovdl,byteptrwordtempanddl,0fhcalldldisppopdxpopcxretdispaendp;dldispprocpushaxordl,30hcmpdl,39hjbedldisp1adddl,7dldisp1:movah,2int21hpopaxretdldispendpend70 ⑶.modelsmall.stack.datawdatadw34abh.code.startuppushwdatacalldispapopax;addsp,2.exit0;dispaprocpushbpmovbp,sppushaxpushcxpushdxmovax,[bp+4]movcl,4movdl,ahshrdl,clcalldldispmovdl,ahanddl,0fhcalldldispmovdl,alshrdl,clcalldldispmovdl,alanddl,0fhcalldldisppopdxpopcxpopaxpopbpretdispaendp70 ;dldispprocpushaxordl,30hcmpdl,39hjbedldisp1adddl,7dldisp1:movah,2int21hpopaxretdldispendpend〔习题3.36〕什么情况需要使用PUBLIC和EXTERN伪指令?请将例题3.20的子程序全部用寄存器传递参数,写成子程序模块。〔解答〕〔习题3.37〕宏是如何定义、调用和展开的?〔解答〕〔习题3.38〕宏参数有什么特点,宏定义的形参如何与宏调用的实参相结合?〔解答〕〔习题3.39〕说明宏汇编和子程序的本质区别,程序设计中如何选择?〔解答〕〔习题3.40〕编写一个宏指令“movedoprnd,soprnd”,它实现任意寻址方式的字量源操作数送到目的操作数,包括存储单元到存储单元的传送功能。〔解答〕movemacrodoprnd,soprndmovax,soprndmovdoprnd,axendm70 〔习题3.41〕定义一个宏logical,用它代表4条逻辑运算指令:and/or/xor/test,注意需要利用3个形式参数,并给一个宏调用以及对应宏展开的例子。〔解答〕logicalmacrolcode,dopd,sopdlcodedopd,sopdendm例如,如果使用“andax,[bx]”指令,可以利用该宏定义,写出宏指令如下:logicaland,ax,[bx]〔习题3.42〕写一个宏,它判断AL寄存器中的一个ASCII码是否为大写字母,如果是大写字母就转换为小写字母,否则不转换。〔解答〕utolmacrolocalnextcmpal,’A’;小于“A”不转换jbnextcmpal,’Z’;大于“A”不转换janextaddal,20h;是大写字母则转换为小写字母next:endm〔习题3.43〕定义一个宏“movestrstrN,dstr,sstr”,它将strN个字符从一个字符区sstr传送到另一个字符区dstr。〔解答〕(假设它们都在数据段)movestrmacrostrn,dstr,sstrmovcx,dsmoves,cxmovcx,strnmovdi,offsetdstrmovsi,offsetsstrcld70 repmovsb;;重复传送ES:[DI]←DS:[SI]endm第1章微处理器外部特性〔习题4.1〕8088一共有______根地址线。在访问内存时它所使用的地址线是______,可直接寻址______的内存空间;在访问外设时它所使用地址线是______,共能寻址______个输入输出端口。实际上,PC/XT在寻址外设时,只使用地址线______;若A9=1,说明它要寻址的I/O端口位于______。〔解答〕n8088具有20根地址线。在访问内存时使用地址A0~A19,可直接寻址1MB容量的内存范围;在访问外设时使用地址线A0~A15,共能寻址64K个输入输出端口。实际上,PC/XT在寻址外设时,只使用地址线A0~A9;若A9=1,说明它要寻址的I/O端口位于I/O通道。〔习题4.2〕总线操作指的是______,总线周期指的是______,对8088引脚信号来说,其典型的总线周期由______个T状态组成。PC/XT所采用的时钟频率为______,每个T状态的持续时间为______。如果8088的CLK引脚接5MHz的时钟信号,那么每个T状态的持续时间为______。〔解答〕n总线操作指的是指发生在总线上的某些特定的操作,而总线周期指的是CPU通过总线操作与外界(存储器和I/O端口)进行一次数据交换的过程(时间),8088典型的总线周期由4个T组成。如果8088的CLK引脚接5MHz的时钟信号,那么每个T状态的持续时间为200ns。〔习题4.3〕对8088,我们为什么不讨论它的指令周期、而讨论它的总线周期?〔解答〕〔习题4.4〕在8088的工作过程中,什么情况下会产生TW?具体发生在什么时刻?〔解答〕n当8088进行读写存储器或I/O接口时,如果存储器或I/O接口无法满足CPU的读写时序(来不及提供或读取数据时),需要CPU插入等待状态Tw。n在读写总线周期的T3和T4之间插入Tw。70 〔习题4.5〕8088的两种组态模式各应用于什么场合?选用组态模式的具体办法是什么?在最小组态下,8088的哪些引脚是分时复用的?〔解答〕〔习题4.6〕何为引脚信号的三态能力?具有三态能力的引脚输出高阻究竟意味着什么?在最小组态下,8088的哪些引脚具有三态能力?为什么要这样设计?〔解答〕n三态:引脚除正常的高、低电平外,还能输出高阻状态。n输出高阻状态时,表示芯片实际上已放弃了对该引脚的控制,使之“悬空”,这样他所连接的设备就可以接管对该引脚所连导线的控制。8088最小组态具有三态能力的引脚:nA19/S6~A16/S3、A15~A8、AD7~AD0nIO/M*、RD*、WR*、ALEnDEN*、DT/R*〔习题4.7〕以下8088的输入信号:RESET、HOLD(最小模式)、NMI和INTR,其含义各是什么?当它们有效时,8088CPU将出现何种反应?〔解答〕nRESET:复位请求。有效时,将使CPU回到其初始状态。nHOLD:总线保持。有效时,表示总线请求设备向CPU申请占有总线。nNMI:不可屏蔽中断请求。有效时,表示外界向CPU申请不可屏蔽中断。nINTR:可屏蔽中断请求。有效时,表示请求设备向CPU申请可屏蔽中断。〔习题4.8〕请解释在最小组态下8088以下引脚信号的含义:CLK、A19/S6~A16/S3、A15~A8、AD7~AD0、ALE、、、。默画它们在“存储器写”总线周期中的波形示意。〔解答〕见微机原理wjyl2习题解答.ppt-p15〔习题4.9〕以最小组态下的I/O读为例,说明在T2~T4期间,8088CPU和I/O端口的工作表现。〔解答〕〔习题4.10〕以8088在最小组态下的“读总线”周期为例,说明从T1到T4,在各个T状态中总线的工作情况。〔解答〕70 〔习题4.11〕在最小组态下,当8088在进行存储器读、存储器写、输入和输出操作时,其引脚信号、和的有效状态各是什么情况?在最小组态下,如果要形成控制信号(存储器读)和(I/O写),对上述3个信号,应组织怎样的硬件电路?〔解答〕〔习题4.12〕在8088系统(最小组态)中,读取“INAL,DX”(指令长度为1B)指令时将引发何种总线操作?在执行该指令时将引发何种总线操作?请画出执行该指令所引发总线周期的时序图。〔解答〕〔习题4.13〕在8088系统(最小组态)中,读取指令“ADD[2000H],AX”(指令长度为3B)和执行该指令各需要几个总线周期?它们各是什么样的总线周期?〔解答〕n8088每个总线周期只能读写一个字节数据。所以读取指令长度为3B的指令“ADD[2000H],AX”需要3个时钟周期,执行时需要2个时钟周期。n读取指令是存储器读总线周期,执行时是存储器写总线周期?〔习题4.14〕当8088工作于最大组态模式时,其状态输出信号~的3位编码表明了它的哪8种工作状态?它的哪些引脚信号与最小组态下定义不同?〔解答〕〔习题4.15〕什么是三态透明锁存器?以锁存器74LS373为例,说明它的两个控制端G和分别起什么控制作用。在PC/XT中,它与系统是怎样连接的?〔解答〕〔习题4.16〕什么是数据收发器?以数据收发器74LS245为例,说明它的两个控制端和DIR分别起什么控制作用。在PC/XT中,它与系统是怎样连接的?〔解答〕〔习题4.17〕8086与8088相比有哪些不同?8086引脚信号的作用是什么?其存储器为什么要组织成偶存储体和奇存储体两个对称的部分?在8086系统中,为什么常将8位I/O端口的地址设计为偶地址?〔解答〕70 〔习题4.18〕80286的外部引脚与8086/8088引脚相比,有哪些主要特点?〔解答〕第1章存储器系统〔习题5.1〕在一个多层次的存储系统中,Cache、主存和辅存的作用各是什么?所谓“虚拟存储器”指的是什么?在CPU看来访问主存和访问辅存有什么不同?〔解答〕〔习题5.2〕在半导体存储器中,RAM指的是_____,它可读可写,但断电后信息一般会_____;而ROM指的是_____,正常工作时只能从中_____信息,但断电后信息_____。以EPROM芯片2764为例,其存储容量为8K×8位,共有_____条数据线、_____条地址线。用它组成64KB的ROM存储区共需_____片芯片。〔解答〕n在半导体存储器中,RAM指的是随机存取存储器,他可读可写,但断电后信息一般会丢失;而ROM指的是只读存储器,正常工作时只能从中读取信息,但断电后信息不会丢失。以EPROM芯片2764为例,其存储容量为8K×8位,共有8条数据线和13条地址线。用它组成64KB的ROM存储区共需8片2764芯片。〔习题5.3〕为什么存储芯片内的地址译码要采用双译码?以SRAM器件为例,存储芯片有哪些典型的控制信号?它们的功能各是什么?〔解答〕〔习题5.4〕一个容量为4K×4位的假想RAM存储芯片,它应该有多少个地址引脚和多少个数据引脚?如果让你来进行设计,那么需要安排哪些控制引脚?这些引脚分别起什么样的控制作用?〔解答〕n应该有12根地址线引脚和4根数据线引脚n控制引脚:n读取信号OE*:有效时,表示读取存储单元的数据n写入信号WE*:有效时,表示将数据写入存储单元n片选信号CS*:有效时,表示选中该芯片,可以进行读写操作70 〔习题5.5〕什么是位片结构?什么是字片结构?存储芯片2114和4116各属于哪种结构?〔解答〕〔习题5.6〕在半导体存储器件中,什么是SRAM、DRAM和NVRAM?什么是掩摸ROM、PROM、EPROM、EEPROM和FlashROM?为什么微机大系统的RAM用DRAM芯片构成、而微机小系统的RAM用SRAM芯片构成?〔解答〕〔习题5.7〕什么是存储芯片连接中的“位扩充”和“地址扩充”?采用静态RAM芯片2114(1K×4位)或动态RAM芯片4116(16K×1位)来组成32KB的RAM存储区,请问各需要多少芯片?在位方向和地址方向上各需要进行什么样的扩充?请画出采用2114芯片时的连接示意图。〔解答〕n位扩充——存储器芯片数据位数小于主机数据线数时,利用多个存储器芯片在数据“位”方向的扩充;n地址扩充(字扩充)——当一个存储器芯片不能满足系统存储容量时,利用多个存储器芯片在“地址”方向的扩充n组成32KB存储空间,用SRAM2114(1K×4)需要64个芯片;n组成32KB存储空间,用DRAM4116(16K×1)需要16个芯片;n它们都需要进行位扩充和地址扩充图见微机原理wjyl2习题解答.ppt――P22〔习题5.8〕为什么存储芯片要设置片选输入?以SRAM.或EPROM器件为例,它与系统地址总线有哪些连接方式?采用什么连接方式可避免地址重复?采用哪些连接方式可节省或简化译码电路?〔解答〕n存储芯片为什么要设置片选信号?n它与系统地址总线有哪些连接方式?n采用何种连接方式可避免地址重复?n采用哪些连接方式可节省用于译码的硬件?n片选信号说明该存储器芯片是否被选中正常工作,设置它可以比较方便地实现多个存储器芯片组成大容量的存储空间n存储器片选信号通常与CPU地址总线的高位地址线相关联,可以采用“全译码”、“部分译码”、“线选译码”方式n采用全译码方式可以避免地址重复n采用部分或线选译码可以节省译码硬件70 〔习题5.9〕在一个针对存储器的译码系统中,如果有4个地址线未参与译码,那么每个存储单元会同时拥有几个地址?〔解答〕n24=16〔习题5.10〕请写出图5-32中4个存储芯片各自的可用地址范围,并指明每个存储芯片的重复地址范围。〔解答〕图见微机原理wjyl2习题解答.ppt――P26-P30〔习题5.11〕采用全译码方式和6264芯片(SRAM,8K×8位),在内存的40000H~43FFFH区段扩充RAM,请画出这些芯片与8088最大组态下形成的系统总线的连接示意图。〔解答〕图见微机原理wjyl2习题解答.ppt――P32-P33〔习题5.12〕采用2716芯片(EPROM,2K×8位),在首地址20000H处扩充一段容量为8KB的内存,请画出这些芯片与8088最大组态下形成的系统总线的连接示意图。对存储芯片进行片选译码的方式不限。〔解答〕图见微机原理wjyl习题解解1caogao.ppt――P49,50〔习题5.13〕采用3:8译码器74LS138和2764芯片(EPROM,8K×8位),通过全译码方式在8088系统的地址最高端组成32KB的ROM区,请画出各2764芯片与8088最大组态下形成的系统总线的连接示意图。〔解答〕图见微机原理wjyl2习题解答.ppt――P35-P36〔习题5.14〕动态RAM为什么要经常进行刷新?微机系统可使用哪些刷新策略?在PC/XT中,刷新周期是多少?多少次后可将动态RAM单元全部刷新一遍?〔解答〕〔习题5.15〕在PC/XT中,由_____组DRAM芯片构成了容量为_____标准内存配置。当CPU70 访问内存时,对地址_____进行译码,产生_____组片选信号,用于选中相应的芯片组。〔解答〕〔习题5.16〕访问的局部性原理指的是什么?高速缓冲存储和虚拟存储的着眼点各是什么?〔解答〕第1章输入输出及接口〔习题6.1〕在80x86系统中,I/O口的地址采用________编址方式,访问端口时要使用专门的________指令,有________种寻址方式,其具体形式是:_________。〔解答〕n在80x86系统中,I/O端口的地址采用I/O端口独立编址方式,访问端口时使用专门的I/O(输入输出)指令,有2种寻址方式,其具体形式是:直接寻址和通过DX间接寻址。〔习题6.2〕一般的I/O接口电路安排有哪三类寄存器?它们各自的作用是什么?〔解答〕(1)数据寄存器n保存外设给CPU和CPU发往外设的数据⑵状态寄存器n保存外设或接口电路的状态⑶控制寄存器n保存CPU给外设或接口电路的命令〔习题6.3〕简述CPU与外设进行数据交换的几种常用方式。〔解答〕〔习题6.4〕参看图6-4,编程实现以下功能:当K0键单独按下时,发光二极管L0~L7将流水点亮(Ln→Ln+1),每个维持200ms;当K1键单独按下时,发光二极管L0~L7将反向流水点亮(Ln←Ln+1),每个也维持200ms;在其他情况下各发光二极管均不点亮。假定有延时200ms的子程序DELAY可直接调用(提示:该程序强调流水方向的切换,可在程序中设立标志来决定流水显示的方向,至于每次先从哪个管子开始点亮则无关紧要)。〔解答〕70 again:movdx,8000hinal,dxcmpal,0feh;D7~D0=11111110B?jznext1;单独按下K0,转移到next1cmpal,0fdh;D7~D0=11111101B?jznext2;单独按下K1,转移到next2jmpagain;其它情况不点亮next1:movcx,8moval,1;从K0开始next11:outdx,al;某个LED电亮calldelay;延时200msshlal,1;rolal,1loopnext11jmpagainnext2:movcx,8moval,80h;从K7开始next21:outdx,al;某个LED电亮calldelay;延时200msshral,1;roral,1loopnext21jmpagain〔习题6.5〕请描述采用查询方式进行CPU与外设间传送数据的过程。如果有一个输入设备,其数据口地址为FFE0H,状态口地址为FFE2H,当状态标志D0=1时,表明一个字节的输入数据就绪,请编写利用查询方式进行数据传送的程序段。要求从该设备读取100个字节并写到从2000H:2000H开始的内存中。注意在程序中添加注释。〔解答〕n通过读取状态寄存器的标志位来检查外设是否就绪。若不就绪就继续查询,即程序不断循环;直至就绪。然后,进行下一步的传送工作。movbx,2000hmovds,bxmovcx,100again:movdx,0ffe2hstatus:inal,dx;查询一次testal,01hjzstatus70 movdx,0ffe0hinal,dx;输入一个字节mov[bx],alincbxloopagain;循环,输入100个字节〔习题6.6〕某字符输出设备,其数据口和状态口的地址均为80H。在读取状态时,当标志位D7=0时,表明该设备闲,可以接收一个字符,请编写利用查询方式进行数据传送的程序段。要求将存放于符号地址ADDR处的一串字符(以$为结束标志)输出给该设备。注意在程序中添加注释。〔解答〕movbx,offsetaddragain:movah,[bx]cmpah,’$’jzdonestatus:inal,80h;查询一次testal,80hjnzstatusmoval,ahout80h,al;输出一个字节incbxjmpagain;循环done:……〔习题6.7〕以可屏蔽中断为例,说明一次完整的中断过程主要包括哪些环节?8088响应可屏蔽中断请求,需要先满足哪些前提条件?〔解答〕〔习题6.8〕什么是中断源?为什么要安排中断优先级?什么是中断嵌套?什么情况下程序会发生中断嵌套?〔解答〕•中断源:计算机系统中引起中断的事件或原因•当多个中断源同时请求时,CPU需要利用中断优先权决定首先响应哪一个;当一个中断正在服务时,又发生了新的中断请求,CPU需要利用中断优先权确定后者是否优先权更高,以便实现中断嵌套•中断嵌套:当一个中断服务时CPU又响应新的中断请求就形成中断嵌套•CPU允许中断(开中断)、新的中断请求比正在服务的中断优先权更高,通常发生中断嵌套70 〔习题6.9〕按照图6-12所示的中断查询接口与相应的流程图,请编写用于中断服务的程序段。具体要求是,当程序查到中断设备0有中断请求(对应数据线D0),它将调用名为PROC0的子程序;如此,依次去查中断设备1~中断设备3,并分别调用名为PROC1~PROC3的子程序。〔解答〕stipushaxpushdx……movdx,8001hstatus:inal,dxtestal,01hjnzservice0testal,02hjnzservice1testal,04hjnzservice2testal,08hjnzservice3……service0:callproc0jmpdoneservice1:callproc1jmpdoneservice2:callproc2jmpdoneservice3:callproc3jmpdone……done:popdxpopaxiret〔习题6.10〕DMA的意思是_____,主要用于高速外设和内存间的数据传送。进行DMA传送的一般过程是:外设先向DMA控制器提出_____,DMA控制器通过_____信号有效向CPU提出总线请求,CPU回以_____信号有效表示响应。此时CPU的三态信号线将输出_____状态,即将它们交由_____进行控制,完成外设和内存间的直接数据传送。〔解答〕70 nDMA的意思是直接存储器存取,主要用于高速外设和内存间的数据传送。进行DMA传送的一般过程是:外设先向DMA控制器提出DMA请求,DMA控制器通过总线请求HOLD信号有效向CPU提出总线请求,CPU回以总线响应HLDA信号有效表示响应。此时CPU的三态信号线将输出高阻状态,即将它们交由DMAC(DMA控制器)进行控制,完成外设和内存间的直接传送。第1章总线及总线接口〔习题7.1〕什么是总线?总线使用有哪些特点?〔解答〕〔习题7.2〕在各种微机总线中,根据总线连接对象的不同可将它们分为以下几类,它们是:______、______、______、______和_______。例如,ISA总线属于_____总线,USB总线属于_____总线,I2C总线属于_____总线。总线中除电源和地线外的信号线,也可按传输信息的不同分为以下3类,即:______、______、_______。〔解答〕n在各种微机总线中,根据总线连接对象的不同可将它们分为以下几类,它们是:片内总线、芯片总线、板级总线、设备总线和互连总线_。例如,ISA总线属于板级总线,USB总线属于设备总线,I2C总线属于芯片总线。总线中除电源和地线外的信号线,也可按传输信息的不同分为以下3类,即:数据总线、地址总线、控制总线。〔习题7.3〕什么是分时复用?分时复用的目的是什么?在总线信号中,为什么常常将地址和数据组织为分时复用的信号?〔解答〕〔习题7.4〕什么是并行总线?什么是并行同步传输和并行异步传输?在并行同步传输中,主设备和从设备是如何定义的?在IBMPC中除CPU/FPU组合外,还有什么设备可以控制总线?〔解答〕〔习题7.5〕什么是串行总线?什么是串行同步传输和串行异步传输?在串行同步传输中,主设备和从设备是如何定义的?〔解答〕70 〔习题7.6〕总线的性能指标有哪些?总线带宽的含义是什么?总线标准从哪些方面对总线及接口进行规范?采用标准总线有什么好处?〔解答〕〔习题7.7〕在讨论微机总线时,对并行总线和串行总线的传输速率一般怎样描述?为何要这样描述?假设某种并行总线的数据宽度为32位,工作频率为100MHz,若2个时钟周期传送一次数据、其传输速率是多少?如果在时钟的前后沿各传送一次数据,其传输速率是多少?如果采用2-1-1-1的突发传送模式、其平均传输速率是多少?〔解答〕〔习题7.8〕什么是总线操作和总线周期?在IBMPC中,8088工作于最大组态,PC总线在访问存储器和访问I/O其总线周期有何不同?〔解答〕〔习题7.9〕请解释IBMPC总线中D0~D7、A0~A19、ALE、、、I/OCHRDY信号的含义。〔解答〕D0~D7:8位双向数据总线A0~A19:20位输出地址总线ALE:地址锁存允许,每个CPU总线周期有效IOR*:I/O读,输出IOW*:I/O写,输出IOCHRDY:I/O通道准备好,输入〔习题7.10〕对比8088CPU的引脚信号(最大组态)和IBMPC总线,说明它们的主要异同点。对比IBMPC总线和ISA总线,说明后者主要增加了哪些信号?〔解答〕〔习题7.11〕为什么ISA总线在286系统中为系统总线,而在486及以后的系统中成为局部总线?〔解答〕〔习题7.12〕请简要叙述微机总线的发展和演变。〔解答〕70 第八章中断控制接口〔习题8.1〕8088CPU具有哪些中断类型?各种中断如何产生,如何得到中断向量号?〔解答〕n除法错中断:在执行除法指令时,除数为0或商超过了寄存器所能表达的范围产生n指令中断:在执行中断指令INTn时产生n溢出中断:在执行溢出中断指令INTO时,溢出标志OF为1产生n单步中断:单步标志TF为1,在每条指令执行结束后产生n非屏蔽中断:外部通过NMI请求信号向微处理器提出请求时产生n可屏蔽中断:外部通过INTR请求信号向微处理器提出请求,并在允许可屏蔽中断的条件下产生解答2:n除法错中断、溢出中断、单步中断、非屏蔽中断的向量号是8086微处理器内部已经确定n指令中断的操作数n就是向量号n可屏蔽中断的向量号在响应中断时通过数据总线从外部获得〔习题8.2〕8088中断向量表的作用是什么?〔解答〕〔习题8.3〕说明如下程序段的功能:climovax,0moves,axmovdi,80h*4movax,offsetintproc;intproc是一个过程名cldstoswmovax,segintprocstoswsti〔解答〕70 〔习题8.4〕8259A中IRR、IMR和ISR三个寄存器的作用是什么?〔解答〕n中断请求寄存器IRRn保存8条外界中断请求信号IR0~IR7的请求状态nDi位为1表示IRi引脚有中断请求;为0表示无请求n中断服务寄存器ISRn保存正在被8259A服务着的中断状态nDi位为1表示IRi中断正在服务中;为0表示没有被服务n中断屏蔽寄存器IMRn保存对中断请求信号IR的屏蔽状态nDi位为1表示IRi中断被屏蔽(禁止);为0表示允许〔习题8.5〕PC/XT机的ROM-BIOS对8259A的初始化程序如下:moval,13hout20h,almoval,08hout21h,almoval,09hout21h,al请说明其设定的工作方式。〔解答〕〔习题8.6〕某时刻8259A的IRR内容是08H,说明______。某时刻8259A的ISR内容是08H,说明_______。在两片8259A级连的中断电路中,主片的第5级IR5作为从片的中断请求输入,则初始化主、从片时,ICW3的控制字分别是_______和_______。〔解答〕n某时刻8259A的IRR内容是08H,说明IR3引脚有中断请求。某时刻8259A的ISR内容是08H,说明IR3正在被中断服务,其它不被处理。在两片8259A级连的中断电路中,主片的第5级IR5作为从片的中断请求输入,则初始化主、从片时,ICW3的控制字分别是20H和05H。〔习题8.7〕8529A仅占用两个I/O地址,它是如何区别4条ICW命令和3条OCW命令的?在地址引脚A0=1时,读出的是什么内容?70 〔解答〕〔习题8.8〕某一8086CPU系统中,采用一片8259A进行中断管理。设定8259A工作在普通全嵌套方式,发送EOI命令结束中断,采用边沿触发方式请求中断,IR0对应的中断向量号为90H。另外,8259A在系统中的I/O地址是FFDCH(A0=0)和FFDEH(A0=1)。请编写8259A的初始化程序段。〔解答〕〔习题8.9〕PC系列机中设定8259A采用何种优先权方式和中断结束方式?它们的主要特点是什么?〔解答〕n普通全嵌套方式n8259A的中断优先权顺序固定不变,从高到低依次为IR0、IR1、IR2、……IR7n中断请求后,8259A对当前请求中断中优先权最高的中断IRi予以响应,将其向量号送上数据总线n在ISR的Di位置位期间,禁止再发生同级和低级优先权的中断,但允许高级优先权中断的嵌套n普通中断结束方式n配合全嵌套优先权方式使用nCPU用输出指令往8259A发出普通中断结束EOI命令,8259A就会复位正在服务的中断中优先权最高的ISR位〔习题8.10〕8259A的中断请求有哪两种触发方式,它们分别对请求信号有什么要求?PC系列机中采用哪种方式?〔解答〕〔习题8.11〕下段程序读出的是8259A的哪个寄存器?moval,0bhout20h,alnopinal,20h〔解答〕n读取中断服务寄存器ISR的内容n因为执行输入指令(A0=0)之前,执行的输出指令,写入了OCW3(D4D3=70 01),其中PRRRIS(D2D1D0)=011指明随后读出ISRn不是查询字〔习题8.12〕PC系列机执行了下面两条指令后,会产生什么控制状态?moval,0bchout21h〔解答〕〔习题8.13〕下面是XT机ROM-BIOS中的08号中断服务程序,请说明各个指令的作用。int08hprocfarstipushdspushaxpushdx……;日时钟计时……;控制软驱马达int1chmoval,20hout20h,alpopaxpopdxpopdsiretint08hendp〔解答〕int08hprocfar;远过程sti;开中断,允许中断嵌套pushds;现场保护pushaxpushdx……;日时钟计时……;控制软驱马达int1ch;调用指令中断1CHmoval,20h;发送EOI命令out20h,alpopax;现场恢复70 popdxpopdsiret;中断返回int08hendp〔习题8.14〕中断服务程序的人口处为什么通常要使用开中断指令?〔解答〕n开中断,以便可以实现中断嵌套〔习题8.15〕编写一个程序,将例题INT80H内部中断服务程序驻留内存。然后在调试程序中或其他程序中执行INT80H,看能否实现其显示功能。〔解答〕〔习题8.16〕PC系列机的1CH号中断每隔55ms被调用一次,它是内部中断还是外部中断?〔解答〕第九章定时计数控制接口〔习题9.1〕微机中实现定时控制的主要方法是什么?〔解答〕〔习题9.2〕8253每个计数通道与外设接口有哪些信号线,每个信号的用途是什么?〔解答〕nCLK时钟输入信号——在计数过程中,此引脚上每输入一个时钟信号(下降沿),计数器的计数值减1nGATE门控输入信号——控制计数器工作,可分成电平控制和上升沿控制两种类型nOUT计数器输出信号——当一次计数过程结束(计数值减为0),OUT引脚上将产生一个输出信号〔习题9.3〕8253每个通道有___种工作方式可供选择。若设定某通道为方式0后,其输出引脚为___电平;当___后通道开始计数,___信号端每来一个脉冲___就减1;当___,则输出引脚输出___电平,表示计数结束。8253的CLK0接1.5MHz的时钟,欲使OUT0产生频率为70 300KHz的方波信号,则8253的计数值应为___,应选用的工作方式是___。〔解答〕n8253每个通道有6种工作方式可供选择。若设定某通道为方式0后,其输出引脚为低电平;当写入计数初值(并进入减1计数器)后通道开始计数,CLK信号端每来一个脉冲减1计数器就减1;当计数器减为0,则输出引脚输出高电平,表示计数结束。8253的CLK0接1.5MHz的时钟,欲使OUT0产生频率为300KHz的方波信号,则8253的计数值应为5(=1.5MHz÷300KHz),应选用的工作方式是3。〔习题9.4〕试按如下要求分别编写8253的初始化程序,已知8253的计数器0~2和控制字I/O地址依次为204H~207H。⑴使计数器1工作在方式0,仅用8位二进制计数,计数初值为128。⑵使计数器0工作在方式1,按BCD码计数,计数值为3000。⑶使计数器2工作在方式2,计数值为02F0H。〔解答〕moval,50hmovdx,207houtdx,almoval,128;80hmovdx,205houtdx,almoval,33hmovdx,207houtdx,almovax,3000h;不是3000movdx,204houtdx,almoval,ahoutdx,almoval,0b4hmovdx,207houtdx,almoval,02f0hmovdx,206houtdx,almoval,ahoutdx,al70 〔习题9.5〕设8253计数器0~2和控制字的I/O地址依次为F8H~FBH,说明如下程序的作用。moval,33hout0fbh,almoval,80hout0f8h,almoval,50hout0f8h,al〔解答〕;设置计数器0采用工作方式1,先低后高写入计数值;BCD码十进制计数moval,33hout0fbh,al;计数值为5080moval,80hout0f8h,almoval,50hout0f8h,al总结:计数器0采用工作方式1,计数初值为5080〔习题9.6〕PC机是如何应用8253每个通道的?〔解答〕n计数器0——每隔55ms产生一个IRQ0中断请求n计数器1——每隔15µs产生一个DRAM刷新请求n计数器2——控制扬声器音调〔习题9.7〕例题9.2中CLK0端实际输入多少个下降沿后产生中断?按照要求,还可以采用8253的什么工作方式完成同样功能?如果利用外部信号启动计数,则GATE0应怎样使用,应选用什么工作方式?写出初始化程序。〔解答〕n101个下降沿,还可以采用方式4nGATE0接外部启动计数器的控制信号,可以选用方式1或方式5movdx,203hmoval,12h;方式5为1ahoutdx,almovdx,200hmoval,64h70 outdx,al〔习题9.8〕某系统中8253芯片的计数器0~2和控制字端口地址分别是FFF0H~FFF3H。定义计数器0工作在方式2,CLK0=5MHz,要求输出OUT0=1KHz频率波。定义通道1工作在方式4,用OUT0作计数脉冲,计数值为1000,计数器计到0,向CPU发中断请求信号,接于PC系列机IRQ4。编写8253两个计数器通道的初始化程序及中断向量、中断屏蔽位设置的程序,并画出两个计数器通道的连接图。〔解答〕〔习题9.9〕利用扬声器控制原理,编写一个简易乐器程序:当按下1~8数字键时,分别发出连续的中音1~7和高音i(对应频率依次为524Hz、588Hz、660Hz、698Hz、784Hz、880Hz、988Hz和1048Hz);当按下其他键时暂停发音;当按下ESC键(ASCII码为1BH),程序返回操作系统。〔解答〕〔习题9.10〕计数器的定时长度和精度受脉冲输入信号频率和计数值影响。对于频率为f的脉冲输入,计数器输出的最小定时时间为______;此时计数初值应为______。16位计数器输出的最大定时时间是______。当需要加大定时时间时,或者利用硬件方法进行多个计数器的级连;或者利用软件辅助方法,使用计数单元扩大计数值。〔解答〕第九章DMA控制接口〔习题10.1〕8237A在什么情况下处于空闲周期和有效周期?〔解答〕n当8237A的任意一个通道都没有DMA请求时就处于空闲周期n当8237A采样到外设有DMA请求时就脱离空闲周期进入有效周期〔习题10.2〕什么是8237A的单字节传送方式和数据块传送方式,两者的根本区别是什么?数据块传送方式和请求传送方式对DREQ信号有效有什么要求?〔解答〕70 单字节传送方式n每次DMA传送仅传送一个字节。传送一个字节之后,字节数寄存器减1,地址寄存器加1或减1,然后释放总线数据块传送方式n由DMA请求信号启动,连续地传送数据,直到字节数寄存器从0减至FFFFH终止计数,最后释放总线单字节传送与数据块传送的根本区别n单字节传送方式:每次申请系统总线,仅传送一个字节,然后释放总线n数据块传送方式:每次申请系统总线,连续传送到规定的字节数传送完成,中间不释放总线n数据块传送和请求传送对DREQ信号有效有什么要求n数据块传送方式:DREQ信号只需有效到外设DMA响应DACK有效n请求传送方式:DREQ信号必须在DMA传送过程中一直有效,否则传送暂停n〔习题10.3〕DMA传送分成哪3种类型?3种类型下8237A的存储器和I/O控制线如何有效?〔解答〕nDMA读:MEMR*和IOW*有效nDMA写:MEMW*和IOR*有效nDMA校验:都无效〔习题10.4〕8237A有几种对其DMA通道屏蔽位操作的方法?〔解答〕〔习题10.5〕PC机为什么设置DMA传送的页面寄存器?〔解答〕〔习题10.6〕设置PC机8237A通道2传送1KB数据,请给其字节数寄存器编程。〔解答〕out0ch,al;清高/低触发器movax,1024-1;400h-1=3ffhout05h,almoval,ahout05h,al70 〔习题10.7〕PC机进行软盘DMA传输前,若通道2的初始化过程DMA-SETUP返回标志CF=1,则说明什么?〔解答〕〔习题10.8〕PC机8237A通道2传送的内存起始地址为C8020H,请给其地址寄存器编程。〔解答〕〔习题10.9〕XT机执行了下面两条指令后,会产生什么作用?moval,47hout0bh,al〔解答〕n设置通道3n单字节传送方式nDMA写传送类型n地址增量、禁止自动初始化〔习题10.10〕如下是利用PC机DMA通道1进行网络通信的传输程序。其中ES:BX中设置内存缓冲区首地址,DI中设置传送的字节数,SI中为模式字。请阅读此程序,为其每条指令加上注释,并说明每个控制字的含义。若主机通过它发送数据,SI应为何值?若主机通过它接收数据,SI应为何值?movdx,0chmoval,0outdx,almovdx,09houtdx,almovax,01orax,simovdx,0bhoutdx,almovax,esmovcl,04rolax,clmovch,alandal,0f0haddax,bx70 jncnet1incchnet1:movdx,02outdx.almoval,ahoutdx,almoval,chandal,0fhmovdx,83houtdx,almovax,didecaxmovdx,03outdx,almoval,ahoutdx,almovdx,0ahmoval,1outdx,almovdx,8moval,60houtdx,almovdx,08hnet2:inal,dxandal,02hjznet2〔解答〕第九章并行接口〔习题11.1〕8255A的24条外设数据线有什么特点?〔解答〕〔习题11.2〕8255A两组都定义为方式1输入,则方式控制字是什么?方式控制字中另外两位确定什么功能?〔解答〕70 n方式控制字为:1011X11Xn其中任意的D3位确定PC4~PC7、D0位确定PC0~PC3是方式0输入还是输出;由于两组都为方式1输入,PC0~PC5被征用为控制信号。所以D3位仅确定PC6、PC7是方式0输入还是输出;而D0位没有作用〔习题11.3〕总结8255A端口C的使用特点。〔解答〕〔习题11.4〕设定8255A的口A为方式1输入,口B为方式1输出,则读取口C的数据的各位是什么含义?〔解答〕见图-微机原理wjyl2习题解答.ppt-P77〔习题11.5〕对8255A的控制寄存器写入B0H,则其端口C的PC5引脚是什么作用的信号线?〔解答〕n方式控制字为B0H=10110000B,说明A组为方式1输入,它将征用PC5引脚作为输入缓冲器满信号IBFA〔习题11.6〕第11.2.2节用8255A端口A方式0与打印机接口,如果采用端口B,其他不变,请说明应该如何修改接口电路和程序。〔解答〕n接口电路:用端口引脚PB0~PB7与打印机DATA0~7连接,其他不变n程序:用端口B的I/O地址FFFAH替换端口A的FFF8Hn另外,应设置端口B为方式0输出。但由于原控制字已经做到,所以无需修改〔习题11.7〕第11.2.3节用8255A端口A方式1与打印机接口,如果采用端口B,其他不变,请说明如何修改接口电路和程序。〔解答〕解答1:见图-微机原理wjyl2习题解答.ppt-P78解答2:movdx,0fffehmoval,84houtdx,almoval,04h;使INTEB(PC2)为0,禁止中断outdx,al……70 movcx,counter;打印字节数送CXmovbx,offsetbuffer;取字符串首地址callprints;调用打印子程序解答3:printsprocpushax;保护寄存器pushdxprint1:moval,[bx];取一个数据movdx,0fffahoutdx,al;从端口B输出解答4:movdx,0fffchprint2:inal,dxtestal,02h;检测(PC1)为1否?jzprint2incbxloopprint1popdxpopaxretprintsendp〔习题11.8〕设一工业控制系统,有四个控制点,分别由四个对应的输入端控制,现用8255A的端口C实现该系统的控制,如图11-22。开关K0~K3打开则对应发光二极管L0~L3亮,表示系统该控制点运行正常;开关闭合则对应发光二极管不亮,说明该控制点出现故障。编写8255A的初始化程序和这段控制程序。〔解答〕解答1:写入方式字moval,100×00×1b;=81hmovdx,控制口地址;0fffehoutdx,al;加入下一段更好,使L0~L3全亮moval,0fhmovdx,端口C地址;0fffchoutdx,al解答270 控制程序段movdx,端口C地址;0fffchinal,dx;读入PC0~PC3movcl,4shlal,cl;左移4位outdx,al;控制PC4~PC7〔习题11.9〕设定8255A的端口B为方式1连接某一输入设备,其中断请求信号引入PC机的IRQ3。欲使CPU响应该外设的中断请求,初始化时应开放3级中断,请编程说明。〔解答〕〔习题11.10〕什么是机械按键的抖动,给出软、硬件解决抖动问题的方法。〔解答〕n当按下或释放一个键时,往往会出现按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的现象就是机械按键的抖动n方法解决n硬件:消抖电路n软件:程序延时,以避开抖动的时间〔习题11.11〕什么是键盘识别中的重键,可以怎样解决这个问题。〔解答〕n重键指两个或多个键同时闭合n简单情况:不予识别,认为是错误的按键n通常情况:只承认先识别出来的键n连锁法:直到所有键都释放后,读入下一个键n巡回法:等被识别的键释放以后,就可以对其他闭合键作识别,而不必等待全部键释放n正常的组合键:都识别出来〔习题11.12〕第11.3.1节的键盘接口电路中,假设8255A的数据端口A、B、C和控制端口地址为218H~21BH,写出完整的采用反转法识别按键的键盘扫描程序。〔解答〕〔习题11.13〕对照第11.3.2节的键盘缓冲区,说明“先进先出、循环队列“的工作过程。〔解答〕70 〔习题11.14〕编写一个程序,每当在键盘上按下一键时,就显示其接通和断开扫描码。〔解答〕〔习题11.15〕补充完整第11.4节中LEDtb指示的0~F显示代码。〔解答〕LEDtbdb3fh,06h,5bh,4fh66h,6dh,7dh,07h7fh,6fh,77h,7ch39h,5eh,79h,71h〔习题11.16〕如图11-23为用一片8255A控制8个8段共阴极LED数码管的电路。现要求按下某个开关,其代表的数字(K1为1,K2为2,…K8为8)在数码管从左到右循环显示(已有一个延时子程序delay可以调用),直到按下另一个开关。假定8255A的数据端口A、B、C及控制端口的地址依次为FFF8H~FFFBH。编写完成上述功能的程序,应包括8255A的初始化、控制程序和数码管的显示代码表。〔解答〕显示代码表tabledb0c0h;对应0(任意)db0f9h,0a4h,0b0h,99hdb92h,82h,0f8h,80h;对应1~88255A初始化movdx,0fffbhmoval,10001001b;=89houtdx,al;控制程序again0:movdx,0fffah;输入开关状态inal,dxmovcx,8;确定哪个开关闭合movah,01h;movah,08hagain1:shral,1;shlal,1jncdisp0incah;decahloopagain1jmpdisp1显示字段disp0:movbx,offsettable70 moval,ahxlatmovdx,0fff8houtdx,al;输出段码disp1:movcx,8;循环显示8位moval,01hmovdx,0fff9hdisp2:outdx,al;输出位码calldelayshlal,1loopdisp2jmpagain0〔习题11.17〕Centronics接口的前11个信号线的功能是什么?它们是怎样配合输出数据的?参照打印机I/O功能程序,编写一个利用查询方式打印一个字符的子程序。假设不考虑超时错误,打印字符从AL传送至子程序,打印机基地址在DX中〔解答〕K1K2K8PC0PC1PC710K×8+5V共阴极数码管PA0PA1PA7PB0PB1PB7abh75452驱动电路8255A图11-23习题11.16附图4´300Ω+5VPC4PC5PC6PC7PC0PC1PC2PC32K´4+5VK0K1K2K3L0L1L2L374LS048255A图11-22习题11.8附图70 第九章串行通信接口〔习题12.1〕串行异步通信发送8位二进制数01010101:采用起止式通信协议,使用奇校验和2个停止位。画出发送该字符式的波形图。若用1200bps,则每秒最多能发送多少个数据?〔解答〕〔习题12.2〕微机与调制解调器通过232C总线连接时,常使用哪9个信号线?各自的功能是什么?利用232C进行两个微机直接相连通信时,可采用什么连接方式,画图说明。〔解答〕发送数据TxD接收数据RxD请求发送RTS允许发送CTS数据装置准备好DSR信号地GND载波检测CD数据终端准备好DTR振铃指示RI解答2:见微机原理wjyl2习题解答.ppt-P89解答3:见微机原理wjyl2习题解答.ppt-P90〔习题12.3〕8250在识别起始位时,采用什么方法防止误识别?UART芯片的接收方采用双缓冲或多缓冲结构,是为了防止发生什么错误?〔解答〕〔习题12.4〕8250芯片能管理哪10个中断,并说明各个中断分别在何时产生。〔解答〕〔习题12.5〕欲使通信字符为8个数据位、偶校验、2个停止位,则应向8250_____寄存器写入控制字_____,其在PC系列机上的I/O地址(COM2)是______。XT机通信适配器电路上设计J9~J12跨接器的作用是________________________。〔解答〕n欲使通信字符为8个数据位、偶校验、2个停止位,则应向8250通信线路控制寄存器写入控制字00011111b(1fh),其在PC系列机上的I/O地址(COM2)是2fbhnXT机通信适配器电路上设计J9~J12跨接器的作用是选择两个I/O地址及中断请求引脚IRQ之一70 〔习题12.6〕PC系列机执行下3条指令后,将设定什么状态?moval,1ahmovdx,2fbhoutdx,al〔解答〕〔习题12.7〕8250的IIR是只读的,且高5位总是0。试分析XT机系统ROM-BIOS中下段程序的作用。如不发生条件转移,则RS232-BASE字单元将存放什么内容?movbx,0movdx,3fahinal,dxtestal,0f8hjnzF18movRS232-BASE,3f8hincbxincbxF18:movdx,2fahinal,dxtestal,0f8hjnzF19movRS232-BASE[bx],2f8hincbxincbxF19:……〔解答〕nROM-BIOS中该段程序的作用是检测是否存在串行异步通信接口电路n如果不发生条件转移,说明存在异步通信接口电路,RS232-BASE字单元存放异步通信接口电路的基地址:3f8h和2f8h〔习题12.8〕设定某次串行异步通信的数据位为8位、无校验、1个停止位,传输率为4800bps,采用中断工作方式。按此要求写出PC系列机中对第2个串行通信口的初始化程序。〔解答〕解答1:moval,80h70 movdx,2fbhoutdx,almovax,24;1.8432MHz÷(4800×16)=24=18Hmovdx,2f8houtdx,al;写入除数寄存器低8位moval,ahincdxoutdx,al;写入除数寄存器高8位解答2:moval,03hmovdx,2fbhoutdx,al;写入通信线路控制寄存器moval,0bhmovdx,2fchoutdx,al;写入调制解调器控制寄存器moval,01h;至少有一位为1,不能禁止所有中断movdx,2f9houtdx,al〔习题12.9〕8250的除数寄存器、8253的计数器、8237A的通道寄存器都是16位的,但这3个芯片的数据线都是8位的。它们分别采用什么方法通过8位数据线操作16位寄存器?〔解答〕第九章模拟接口〔习题13.1〕说明在模拟输入输出系统中,传感器、放大器、滤波器、多路开关、采样保持器的作用。DAC和ADC芯片是什么功能的器件?〔解答〕〔习题13.2〕如果将DAC0832接成直通工作方式,画图说明其数字接口引脚如何连接。〔解答〕见微机原理wjyl2习题解答.ppt-P96〔习题13.3〕对应第13.2.4节的图13-9a电路,编写输出一个12位数字量的程序段。假定这1270 位数据在BX的低12位中。〔解答〕movdx,port1lmoval,bloutdx,almovdx,port1hmoval,bhoutdx,almovdx,port2outdx,al〔习题13.4〕假定某8位ADC输入电压范围是-5V~+5V,求出如下输入电压Vin的数字量编码(偏移码):①1.5V②2V③3.75V④-2.5V⑤-4.75V。〔解答〕〔习题13.5〕ADC的转换结束信号起什么作用,可以如何使用该信号,以便读取转换结果?〔解答〕〔习题13.6〕某控制接口电路如图13-16。需要控制时,8255A的PC7输出一个正脉冲信号START启动A/D转换;ADC转换结束在提供一个低脉冲结束信号EOC的同时送出数字量。CPU采集该数据,进行处理,产生控制信号。现已存在一个处理子程序ADPRCS,其入口参数是在AL寄存器存入待处理的数字量,出口参数为AL寄存器给出处理后的数字量。假定8255A端口A、B、C及控制端口的地址依次为FFF8H~FFFBH,要求8255A的端口A为方式1输入、端口B为方式0输出。编写采用查询方式读取数据,实现上述功能的程序段。〔解答〕解答1:见微机原理wjyl2习题解答.ppt-P98解答2:8255A初始化moval,1011000×bmovdx,0fffbhoutdx,al;使PC7=0(START为低)moval,00001110bmovdx,0fffbhoutdx,al70 解答3:启动A/D转换moval,00001111bmovdx,0fffbhoutdx,al;使PC7=1(START为高)nopmoval,00001110boutdx,al;使PC7=0(START为低)解答4:查询是否转换结束movdx,0fffahagain:indx,altestal,20h;PC5=0(转换未结束,继续检测)jzagain;PC5=1(转换结束)解答5:movdx,0fff8h;输入数据inal,dxcalladprcs;处理数据movdx,0fff9houtdx,al;输出数据〔习题13.7〕假设系统扩展有一片8255A供用户使用,请设计一个用8255A与ADC0809接口的电路连接图,并给出启动转换、读取结果的程序段。为简化设计,可只使用ADC0809的一个模拟输入端,例如IN0。〔解答〕解答1:采用8255A的方式0,端口A输入nPC0接ADC0809的START,用于启动转换70 nPC7接ADC0809的EOC,用于输入、判断A/D转换是否结束;采用查询方式nADC0809的OE接+5V,这样可以随时读取A/D转换的结果n假设8255A的A、B、C和控制口地址依次为portA~portD解答2:见微机原理wjyl2习题解答.ppt-P104解答3:8255A初始化moval,100110×0bmovdx,portdoutdx,al;使PC0=0(START为低)moval,0000000bmovdx,portdoutdx,al解答4:启动A/D转换moval,00000001bmovdx,portdoutdx,al;使PC0=1(START为高)nopmoval,00000000boutdx,al;使PC0=0(START为低)解答5:查询是否转换结束movdx,portcagain:indx,altestal,80h;PC7=0(转换未结束,继续检测)jzagain;PC7=1(转换结束)70 解答6:输入数据movdx,portainal,dx也可以采用方式1输入实现,其中关键需要处理好STB*信号,以便将数字量送入8255A第九章32位微型计算机系统〔习题14.1〕追踪微机技术发展,就其某个方面,例如内存条、并行打印机接口、PS/2接口等,做一篇技术应用的论文。〔解答〕〔习题14.2〕选择微机某个方面,例如微处理器芯片、主板组成、总线结构、控制芯片组等,搜集其最新发展资料,做一篇新技术发展的论文。〔解答〕〔习题14.3〕32位80x86有哪3种工作方式?什么是16位段和32位段?〔解答〕〔习题14.4〕在以BP、EBP、ESP作为基址寄存器访问存储器操作数时,其默认的段寄存器是________;但是,通常ESP作为________,不应该将它用于其他目的。〔解答〕〔习题14.5〕解释下列指令如何计算存储器操作数的单元地址:⑴add[ebx+8*ecx],al⑵movwdata[eax+ebx],cx⑶subeax,ddata⑷movecx,[ebx]〔解答〕〔习题14.6〕对8种加减指令和5种逻辑运算指令,用32位操作数各举一个例子。〔解答〕70 〔习题14.7〕回答下列问题:⑴ADDECX,AX指令错在哪里?⑵INC[EBX]指令错在哪里?⑶JECXZ指令什么条件下转移?⑷MOVAX,[EBX+ECX]指令正确吗?⑸32位x86CPU的Jcc指令的转移范围可有多大?⑹如何让汇编程序识别80386指令?〔解答〕〔习题14.8〕阅读如下运行于32位段的程序,为每条指令加上注释,并说明该过程的功能。arraydw……sum16procnearmovebx,offsetarraymovecx,3movax,[ebx+2*ecx]movecx,5addax,[ebx+2*ecx]movecx,7addax,[ebx+2*ecx]retsum16endp〔解答〕〔习题14.9〕完成下列程序段:⑴选择一条指令完成将EBX的内容减1。⑵将EAX、EBX、ECX内容相加,并将和存入EDX寄存器。⑶写一个子程序,求EAX、EBX、ECX的和。若有进位则存入EDX;否则EDX存入0。子程序结束,累加和从EDX和EAX返回。〔解答〕〔习题14.10〕利用32位扩展指令、编写运行在DOS环境的源程序,应该注意哪些方面的问题?〔解答〕〔习题14.11〕什么是紧缩整型数据,MMX指令支持哪4种数据格式?〔解答〕70 〔习题14.12〕什么是紧缩浮点数据,SSE指令支持的浮点数据格式是怎样的?〔解答〕〔习题14.13〕说明采用Pentium处理器的猝发总线周期进行数据传输的时序。〔解答〕〔习题14.14〕说明32位保护方式下,通过段页式存储管理寻址一个操作数的过程。〔解答〕〔习题14.15〕简单说明如下名词(概念)的含义:①描述符②存储器访问的局部性原理③L1Cache和L2Cache④RISC和CISC⑤指令流水线⑥指令预取⑦超标量技术⑧分支预测⑨指令级并行处理⑩乱序发送和乱序执行〔解答〕〔习题14.16〕简答如下32位80x86微处理器的结构特点:①80486的片上高速缓存②Pentium的超标量指令流水线③Pentium的动态分支预测方法④PentiumIII的动态执行结构⑤Pentium4的超线程流水线〔解答〕70'