• 309.28 KB
  • 2022-04-22 11:47:06 发布

微计算机原理部分习题答案.pdf

  • 34页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'习题答案1-1解释和区别下列名词术语。(1).微处理器μP,微计算机μC,微处理器系统μPS。(5).位、字节、字和双字。(7).RAM和ROM(8).I/O接口和I/O设备。(9).芯片总线、片总线、内总线和外总线。答:(1).把CPU的复杂电路,包括运算器和控制器作在一片或几片大规模集成电路的半导体芯片上,这种集成电路叫微处理器μP。微处理器为核心,配上RAM、ROM,I/O接口及有关辅助电路组成的微型化的主计算机装置称为微计算机μC。微处理器为核心构成的专用系统称为微处理器系统μPS。(5)一个二进制的位称作位、8个相邻二进制位称作字节、2个字节称作字,2个字(4个字节)称作双字。(7)能进行随即读写操作的存储器称作RAM。只读存储器叫ROM。(8)输入/输出接口电路称作I/O接口,通过I/O接口接入的外部设备如监视器,键盘、鼠标称作I/O设备。(9)位于CPU芯片内部,用来实现CPU内部各功能单元电路之间的相互连接和信号的传递的总线叫芯片总线。片总线是微计算机主板或单板微计算机上以CPU芯片为核心,芯片与芯片间连接的总线。内总线指微计算机系统中实现插件板之间的连接的总线。如IBMPC的PC总线,PC-XT总线,PCI、ISA总线等等。外总线用于系统之间的连接,完成系统与系统之间通信的总线。如RS-232,IEE488、USB等等。1-6将下列十进制数转换为二进制数、十六进制数和BCD数(1)124.625(6)268.875解:(1)124=01111100B=7CH,0.625×16=10,所以0.625=0.AH=0.1010B∴124.625=7C.AH=01111100.1010B=000100100100.011000100101BCD(2)268=256+12=100001100B=10CH,0.875×16=14,∴0.875=0.EH=0.1110B.∴268.875=10C.EH=100001100.111B=001001101000.100001110101BCD1-7用16位二进制数表示出下列十进制数的原码、反码和补码。(1)+128(4)-5解:(1)+128的原码和补码反码均为0000000100000000B(4)-5的原码为1000000000000101B,反码为1111111111111010B,补码为1111111111111011B。1-9写出系列字母、符号的ASCII码(1)B(2)H(3)SP(空格)(4)5(5)$(6)CR(回车符)(7)LF(换行)解:(1)42H、(2)48H、(3)20H、(4)35H、(5)24H、(6)0DH、(7)0AH1-10试绘出以下十六进制数在内存中存放的示意图。设存放地址均为00H。1 解:(1)F7H(2)03BAH(3)C804326BH(4)1122334455667788H地址内容地址内容地址内容地址内容00HF7H00HBAH00H6BH00H88H01H03H01H32H01H77H02H04H02H66H03HC8H03H55H04H44H05H33H06H22H07H11H2-1请将左边的术语和右边的含义联系起来,在括号中填入你选择的代号字母:1.字长(i)a.指由8个二进制位组成的通用基本单元。2.字节(a)b.是CPU执行指令的时间刻度。3.指令(h)c.μPS所能访问的存储单元数,与CPU地址总线条数有关。4.基本指令执行周期(g)d.唯一能代表存储空间每个字节单元的地址,用5位十六进制数表示。5.指令执行时间(j)e.CPU访问1次存储器或I/O操作所花的时间。6.时钟周期(b)f.由段基址和偏移地址两部分组成,均用4位十六进制数表示。7.总线周期(e)g..指寄存器加法指令执行所花时间。8.Cache(k)h.完成操作的命令。9.虚拟存储器(l)i.指μP在交换,加工,存放信息时信息的基本长度。10.访存空间(c)j.各条指令执行所花的时间不同,不同指令,该值不一。11.实际地址(d)k.为缓解CPU与主存储器间交换数据的速度瓶颈而建立的高速存储器。12.逻辑地址(f)l.CPU执行程序时看到的一个速度接近内存却具有外存容量的假想存储器。2-2下面列出计算机中常用的一些单位,试指出其用途和含义。(1)MIPS(2)KB(3)MB(4)GB(5)TB解:(1)MIPS用来表示计算机运行的速度。1MIPS=1百万条指令/秒。(2)KB用来表示计算机访存空间大小。1KB=1024(210)B(字节)(3)MB用来表示计算机访存空间大小。1MB=1048576(220)B(字节)(4)GB用来表示计算机访存空间大小。1GB=1024M(230)B(字节)(5)TB用来表示计算机访存空间大小。1TB=1024G(240)B(字节)2 2-4试将左边的标志和右边的功能联系起来。要求:(1)在括号中填入右边功能的代号;(2)填写其类型(属状态标志者填S:属控制标志者填C)。(3)写出各标志为0时表示的状态。标志类型为0时表示的状态1.SF(b)a.陷阱标志S带符号数为正数2.CF(d)b.符号标志S结果最高位无进位(借位)3.AF(h)C.溢出标志S低4位无进位(借位)4.DF(i)d.进位标志C串操作步进方向为地址递增5.TF(a)e.零标志C8086正常执行程序6.OF(c)f.奇偶标志S带符号数运算未产生溢出7.PF(f)g.中断标志S运算结构由奇数个18.IF(g)h.辅助进位标志CCPU关闭中断9.ZF(e)i.方向标志S运算结果不为02-6试画出8086/8088的寄存器结构,并说出它们的主要用途。解:AX、BX、CX、DX用作数据寄存器,用作存放操作数、中间结果。SP堆栈指针、BP基址指针、SI源变趾、DI目的变趾。IP指令指针,FH控制标志、FL状态标志。CS存储代码段首趾、DS存储数据段首趾、SS存储堆栈段首趾、ES附加数据段首趾。AHALAXBHBLBXCHCLCXDHDLDXSPBPSIDIIPFHFLCSDSSSES2-8若一个程序段开始执行之前,(CS)=97F0H,(IP)=1B40H,试问该程序段启动执行指令的实际地址是什么?解:启动执行指令的实际地址PA=97F0H×10H+1B40H=99A40H3 2-9若堆栈段寄存器(SS)=3A50H,堆栈指针(SP)=1500H,试问这时堆栈顶的实际地址是什么?解:栈顶的实际地址=(SS)×10H+(SP)=3A50H×10H+1500H=3BA00H2-11将8086下列工作方式的特点填于表中。解:特点处理器个数总线控制信号的产生方式MN/MX最小方式接+5V1个全部由8086产生最大方式接地可达3个总线控制器8288产生2-13有一32位的地址指针67ABH:2D34H存放在00230开始的存储器中,试画出它们的存放示意图。解:示意图如下地址内容类型0023034H偏移量002312DH00232ABH段基址0023367H2-21列表填写8086/8088的存储器和I/O的保留空间及其用途:解:8086/8088保留空间用途00000H~0007FH中断向量表存储器FFFF0H~FFFFFH系统复位启动I/OF8H~FFHIntel保留使用3-1指令由操作码字段和操作数字段组成。8086的指令长度在1~6个字节范围。3-2分别指出下列指令中源操作数和目的操作数的寻址方式。若是存储器寻址,试用表达式表示出EA=?PA=?(1)MOVSI,2100H(4)ADCAX,[BX][SI](7)MOVAX,ES:[BX]解(1)源操作数是立即数寻址,目的操作数是寄存器寻址。(4)源操作数是基址变趾寻址,EA=(BX)+(SI),PA=16×(DS)+(BX)+(SI),目的操作数是寄存器寻址。(7)源操作数是寄存器间接寻址,其中EA=(BX),PA=16×(ES)+(BX),目的操作数是寄存器寻址。3-3已知8086中一些寄存器的内容和一些存储单元的内容如图3-20所示,试指出下列指令执行后,AX中的内容(即(AX)=?)。(1)MOVAX,2010H(2)MOVAX,BX(3)MOVAX,[1200H](4)MOVAX,[BX](5)MOVAX,1100H[BX](6)MOVAX,[BX][SI](7)MOVAX,1100H[BX+SI]4 (8)LEAAX,[SI]CPUMBX0100H12HSI30100H0002H34HDS30101H3000H30102H56H30103H78H┇31200H2AH31201H31202H4CH312-3HB7H65H解:(1)(AX)=2010H(2)(AX)=0100H(3)(AX)=4C2AH(4)(AX)=3412H(5)(AX)=4C2AH(6)(AX)=7856H(7)(AX)=65B7H(8)(AX)=0002H3-4已知(AX)=2040H,(DX)=380H,端口(PORT)=(80H)=1FH,(PORT+1)=45H,执行下列指令后,指出结果等于?解:(1)OUTDX,AL;端口(DX)=40H(2)OUTDX,AX;端口(DX)=40H,(DX+1)=20H(3)INAL,PORT;(AL)=1FH(4)INAX,80H;(AX)=451FH(5)OUTPORT1,AL;端口(PORT1)=40H(6)OUTPORT1,AX;端口(PORT1)=40H端口(PORT1+1)=20H3-5已知:(SS)=0A2F0H,(SP)=00C0H,(AX)=8B31H,(CX)=0F213H,试画出下列指令执行到位置1和位置2时堆栈区和SP指针内容的变化示意图。图中应标出存储单元的实际地址PA。PUSHAXPUSHCX;位置1POPF;位置2位置1栈顶SS0A2F0H13HF2HSP0A2FBCH00BCH31H8BH位置2栈顶0A2FBEHSP0A2F0H0A2FC0HSS00BEH5 3-7已知存储器数据段中的数据如图3-21所示。阅读下列两个程序段后,回答:1.每个程序段的运行结果是什么?2.两个程序段各占多少字节的内存,执行时间是多少?解:M(1)LEASI,NUM1;4-2T+6TNUM148HDSMOVAX,[SI];2-10T41HADDAX,4[SI];3-9T+9TMOV8[SI],AX;3-10T16HADDSI,2;3-4T28HMOVAX,[SI];2-10TADCAX,4[SI];3-9T+9TNUM258HMOV8[SI],AX;3-10T22H总计23个字节,84个时钟周期运行结果如图中SUM所示。52H(2)84HMOVAX,NUM1;3-10TSUMA0HADDAX,NUM2;4-9T=6TMOVSUM,AX;3-10T63HMOVAX,NUM1+2;3-10T68HADCAX,NUM2+2;4-9T+6TACHMOVSUM+2,AX;3-10T总计20个字节,70个时钟周期。可见1.两个程序运行结果相同。2.第二个程序占20个字节,比前者少3个字节,运行时间比前者少14个时钟周期。3-11已知数据如图3-21所示,低位在前,按下列要求编写程序段:1.NUM1和NUM2两个字数据相乘(均为无符号数),乘积放在SUM开始的单元。解:MOVAX,NUM1MULWORDPTRNUM2MOVSUM,AXMOVSUM+2,DX2.NUM1和NUM2两个字数据相乘(均为带符号数),乘积放在SUM开始的单元。解:MOVAX,NUM1IMULWORDPTRNUM2MOVSUM,AXMOVSUM+2,DX3.NUM1单元的字节数据除以13(均为无符号数),商和余数依次放入SUM开始的两个字单元。解:MOVAL,NUM1MOVAH,0MOVCL,13DIVCLMOVSUM,AX6 4.NUM1字单元的字数据除以NUM2字单元的字,商和余数依次放入SUM开始的两个字单元。MOVAX,NUM1MOVDX,0MOVCX,NUM2DIVCXMOVSUM,AXMOVSUM+2,DX3-13已知(AL)=0C4H,DATA单元中内容为5AH,写出下列每条指令单独执行后的结果。1ANDAL,DATA;(AL)=40H2ORAL,DATA;(AL)=0DEH3XORAL,DATA;(AL)=9EH4NOTDATA;(DATA)=0A5H5ANDAL,0FH;(AL)=04H6ORAL,01H;(AL)=0C5H7XORAL,0FFH;(AL)=3BH8TESTAL,80H;(AL)=0C4H所有指令执行后都对标志寄存器有影响。3-19写出下面指令序列完成的数学计算是什么?解:MOVCL,3;(CL)←3SHLAX,CL;(AX)←(AX)×8SHLBL,CL;(BL)←(BL)×8SHLCX,CL;(CX)←(CX)×8,此时(CL)=18HSHLDH,CL;DH算术左移24位后(DH)=0,CF=03-20写出能替代下列重复操作指令完成同样功能的的指令序列1.REPMOVSW2.REPCMPSB3.REPSCASB4.REPLODSW解:1AGAIN:MOVSW3AGAIN:SCASBDECCXDECCXJNZAGAINNJNZAGAIN2AGAIN:CMPSB4AGAIN:LODSWDECCXDECCXJNZAGAINJNZAGAIN3-23下面两条短转移指令的转移地址ADDR1和ADDR2分别是多少(用十六进制表示)?1.0220EB0AJMPADDR12.0230EBF7JMPADDR2解:JMPADDR1的下一条指令的地址偏移为0222H,0222H+0AH=022CH。7 ∴ADDR1地址偏移量为022CH。JMPADDR2下一条指令的地址偏移量为0232H,0232H+0FFF7H=0229H。∴ADDR2地址偏移量为0229H。3-27试编写一个程序段,能完成下列数学表达式的功能。-1(X≤-1)X=0(-1S2STUDENT<‘WANG’,21H,88H,91H,90H>S3STUDENT<‘LILI’,22H,79H,75H,70H>DATAENDS4-9试定义一条宏指令,它可以实现任一数据块的传送(假设无地址重叠),源地址、目的地址和块长度作为参数处理。MOVDATAMACROSN,DN,CN,PNMOVAL,PNCLDTESTAL,#80HJZCONTSTDCONT:MOVSI,OFFSETSNMOVDI,OFFSETDNMOVCX,CNREPMOVSDN,SNENDM4-10设VAR1和VAR2为字变量,LAB为标号,试指出下列指令的错误,并改正之。(1)ADDVAR1,VAR2(2)SUBAL,VAR1(3)JMPLAB[SI](4)JNZVAR1(5)JMPNEARLAB(6)MOVAL,VAR2解:(1)MOVAX,VAR1(2)MOVAH,0(3)JMPOFFSETLAB[SI]ADDAX,VAR2SUBAX,VAR1(4)MOVSI,VAR1(5)JMPNEARPTRLAB(6)MOVAX,VAR2JNZTARGET……TARGET:JMP[SI]4-11已知数据定义如下,问L1和L2等于多少?B1DB1,2,3,’123’B2DB0L1EQU$-B1L2EQUB2-B1解:$=7,∴$-B1=7-0=7即L1等于7L2=B2的偏移地址6-B1的偏移地址0=610 4-15用查表法将存放于数据段中的一个有序的十六进制数串(范围:0~FH)翻译成ASCII码表仍放于数据段中。解:DATASEGMENTXDHEXDB0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15TBASCIIDB‘0123456789ABCDEF’DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVCX,16MOVSI,OFFSETXDHEXMOVBX,OFFSETTBASCIIMOVAH,0AGAIN:MOVAL,[SI]MOVDI,AXMOVAL,[BX+DI]MOV[SI],ALINCSILOOPAGAINRETSTARTENDPCODEENDSENDSTART4-16试编写一程序,把X和Y中的大者存于BIG单元,若X=Y,则把其中之一存入BIG单元。解:DATASEGMENTXDW?YDW?BIGDW?DATAENDS;------------------------------CODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATA11 MOVDS,AXMOVAX,XCMPAX,YJNCSTOBIG;无符号数判断,有符号数用JGEMOVAX,YSTOBIG:MOVBIG,AXRETSTARTENDPCODEENDSENDSTART4-17试编写一程序,比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同显示“MATCH”,反之,则显示“NOMATCH”。解:DATASEGMENTSTRING1DB50DUP(?)STRING2DB50DUP(?)MATDB‘MATCH$’NMATDB‘NOMATCH$’DATAENDS;------------------------------CODEEGMENTASSUMECS:CODE,DS:DATA,ES:DATAMAINPROCFARSTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVES,AXMOVCX,LENGTHSTRING1LEASI,STRING1LEADI,STRING2LEADX,MATCLDREPECMPSBJEPLAYLEADX,NMATPLAY:MOVAH,09INT21HRETSTARTENDPCODEENDSENDSTART12 4-19假设已编好5个乐曲程序,它们的入口地址(含段首趾和偏移地址)存放在数据段中的跳越表MUSICTAB中。试编写一个管理程序,其功能是:根据键盘输入的乐曲编号00~04转到所点乐曲入口,执行乐曲程序。解:DATASEGMENTMUSICTABDWOFFSETMUSIC0,SEGMUSIC0DWOFFSETMUSIC1,SEGMUSIC1DWOFFSETMUSIC2,SEGMUSIC2DWOFFSETMUSIC3,SEGMUSIC3DWOFFSETMUSIC4,SEGMUSIC4DATAENDS;------------------------------CODEEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AX;---------------------------------------------------------------KEYIN:MOVAH,1INT21HSUBAL,30HMOVCL,4ROLAL,CLMOVBL,ALMOVAH,1INT21HSUBAL,30HADDAL,BLMOVAH,0ADDAX,AXADDAX,AXLEABX,MUSICTABMOVSI,AXJMPDWORDPTR[BX][SI];见教科书116页,④段间间接寻址MUSIC0:…MUSIC1:…MUSIC2:…MUSIC3:…MUSIC4:…EXIT:RETSTARTENDP13 CODEENDSENDSTART4-21在数据段中存有一字符串(≤80个字符),以回车CR结束。编一程序统计此字符串的长度,并将它存入数据区LENTH单元,也显示在屏幕上。解:设字符串为STRING字节单元开始,程序采用DO_WHILE的循环结构,CX寄存器用作字符串长度计数。循环结束条件两个:(1)找到CR,屏幕上显示字符串长度-LENTH。(2)未找到CR,屏幕上显示“ERROR”。DATASEGMENTSTRINGDB"12345678"DB0DHDB71DUP(?)LENTHDB80DUP(?)ERRDB"ERROR$"DATAENDS;-------------------------------------CODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATAMAINPROCFARSTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVES,AX;-------------------------------------------------MOVDI,OFFSETSTRINGCLDMOVCX,80MOVAL,0DHREPNZSCASBJNZPLAYERMOVAX,80SUBAX,CXMOVCL,10DIVCLMOVDL,ALORDL,30HPUSHAXMOVAH,2INT21HPOPAXMOVDL,AHORDL,30HMOVAH,0214 INT21HRETPLAYER:MOVDX,OFFSETERRMOVAH,9INT21HRET;----------------------------------------------------MAINENDPCODEENDSENDSTART4-22试用串操作指令将一个数组BLOCK(均为字节数)中的奇数和偶数分开存放。解:1设数组BLOCK在数据段,程序运行后把数组中的奇数存放在数据段数组PODATA、偶数存放在数据段数组PEDATA中。2程序分两次扫描,第一次搜索奇数,并存放于PODATA中、第二次搜索偶数,并存放于PEDATA中。3两次搜索均用FOR语句结构。DATASEGMENTBLOCKDB1,2,3,4,5,6,7,8,9,90,21,33COUNTEQU$-BLOCKPODATADBCOUNTDUP(?)PEDATADBCOUNTDUP(?)DATAENDS;-----------------------------------------CODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATASTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AX;-----------------------------------------MOVSI,OFFSETBLOCKMOVDI,OFFSETPODATAMOVCX,COUNTAGAIN:MOVAL,[SI]INCSITESTAL,1JZELOPMOV[DI],ALINCDIELOP:LOOPAGAIN;------------------------------------------MOVSI,OFFSETBLOCK15 MOVDI,OFFSETPEDATAMOVCX,COUNTAGAIN1:MOVAL,[SI]INCSITESTAL,1JNZELOP1MOV[DI],ALINCDIELOP1:LOOPAGAIN1;------------------------------------------RET;------------------------------------------MAINENDPCODEENDS;------------------------------------------ENDSTART4-23编一个程序,其功能是将一个字数组ARRAY中的正数和负数分开存放于以PLUS和MINNUS开始的单元中,并在屏幕上显示出正数和负数的个数。设该数组长度放在数组的第一个字单元中。解:①搜索采用FOR语句结构循环程序。②程序每次循环采用正负数分支完成该次正数与负数分离存储。DATASEGMENTARRAYDW10H,8DUP(1FH,-12)PLUSDW10HDUP(?,?)MINUSDW10HDUP(?,?)DATAENDS;--------------------------------CODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:PUSHDSXORAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVES,AX;--------------------------------MOVSI,OFFSETARRAYMOVDI,OFFSETPLUSMOVBX,OFFSETMINUSLODSWMOVCX,AXAGAIN:LODSW16 TESTAX,8000HJNZMINSPLS:STOSWLOOPAGAINJMPCOMOUTMINS:XCHGBX,DISTOSWXCHGBX,DILOOPAGAINCOMOUT:MOVAX,ARRAYSUBDI,OFFSETPLUSSUBBX,OFFSETMINUSMOVAX,DIMOVCL,10DIVCLORAL,30HORAH,30HMOVDL,ALPUSHAXMOVAH,2INT21HPOPAXMOVDL,AHMOVAH,2INT21HMOVDL,0DHMOVAH,2INT21HMOVDL,0AHINT21HMOVAX,BXMOVCL,10DIVCLORAL,30HORAH,30HMOVDL,ALPUSHAXMOVAH,2INT21HPOPAXMOVDL,AHMOVAH,2INT21HMOVDL,0DH17 MOVAH,2INT21HRET;-----------------------MAINENDPCODEENDSENDSTART4-24现有一组无序的字:25,46,3,75,-5,30,要求对它们进行排序,其算法如图4-31所示。试编写完成此功能的程序。开始设计数1:(CX)←N-1设计数2←计数1,(DI)←(CX)设指针(SI)=0为简化程序BX改为SIei>ei+1?YN交换:ei←→ei+1计数器2计数注:LODSW指令NSI自动+2(DI)=0Y计数器1计数N(CX)=Y结束解:DATASEGMENTARRAYDW25,46,3,75,-5,30COUNTEQU$-ARRAYDATAENDS;-----------------------------------STACKSEGMENTPARASTACK"STACK"18 DB60DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSORT_PROCFARSTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVCX,COUNT/2-1CLDAGAIN0:MOVDI,CXMOVSI,OFFSETARRAYAGAIN1:LODSWCMPAX,[SI]JNLNEXTXCHG[SI],AXMOV[SI-2],AXNEXT:DECDIJNZAGAIN1LOOPAGAIN0RETSORT_ENDP;---------------------------------CODEENDSENDSTART4-25试编写一程序求级数12+22+32+…的前几项和刚大于1000的项数n。解:采用DO_WHILE循环结构,程序结束时CL中存放n19 开始(CL)←0(BX)←0(CL)←(CL)+1(AL)←(CL)(AX)←(AL)×(CL)(BX)←(BX)+(AX)N(BX)>1000?Y结束DATASEGMENTNDB?DATAENDS;------------------------------CODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AX;--------------------------------MOVCL,0MOVBX,0AGAIN:INCCLMOVAL,CLMULCLADDBX,AXCMPBX,1000JBEAGAINMOVN,CLMOVAL,CLCBW20 MOVCL,10DIVCLORAL,30HMOVCL,AHMOVDL,ALMOVAH,2INT21HMOVDL,CLORDL,30HINT21HRET;----------------------------------MAINENDPCODEENDSENDSTART4-27数据区中存放着一字节数组BLOCK(其个数为任意),均为组合的十进制数。试编写一程序求该数组之和,并存入SUM单元(和>1字节)。解:采用最简单的FOR语句循环结构,寄存器CX作循环控制即可。DATASEGMENTARRAYDB12H,13H,14H,15HDB16H,17H,18H,19HCOUNTEQU$-ARRAYSUMDW?SUMCHARDB6DUP(?)DB"$"DATAENDS;------------------------------CODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATAMAINPROCFARSTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVES,AX;------------------------------MOVCX,COUNTMOVAX,0MOVSI,OFFSETARRAYAGAIN:ADDAL,[SI]21 DAAXCHGAH,ALADCAL,0DAAXCHGAH,ALINCSILOOPAGAINMOVSUM,AXMOVDI,OFFSETSUMCHARMOVDX,DIMOVCL,4PUSHAXRORAH,CLANDAH,0FHORAH,30HMOV[DI],AHINCDIPOPAXPUSHAXANDAH,0FHORAH,30HMOV[DI],AHINCDIRORAL,CLANDAL,0FHORAL,30HSTOSBPOPAXANDAL,0FHORAL,30HSTOSB22 MOVAH,9INT21HRET;----------------------------------MAINENDPCODEENDSENDSTART5-6试简述SRAM芯片上CE,OE,WE引脚的用途。解:可以用功能表描述三者作用。CEOEWE方式I/OHXX未选中高阻LLH读输出LXL写输入LHH禁止输出高祖5-7简述DRAM芯片上CAS,RAS引脚的用途。解:DRAM的地址线如果是n条,其存储单元数>2n,一般为22n。实际需要2n条地址线,所以地址线采用时分复用技术,CAS=L时n条地址线代表列地址线,RAS=L时选通行地址线。使n条地址线完成2n条地址线的功能。5-8若一些存储器芯片的地址总线数量分别为8、10、12、14。存储器对应的存储单元个数为多少?解:8条时存储单元个数为28=256个单元,10条时存储单元个数为210=1024个单元,12条时存储单元个数为212=4096个单元,14条时存储单元个数为214=16384个单元。5-12CPU的存储器系统由一片6264(8K×8SRAM)和一片2764(8K×8EPROM)组成。6264的地址范围是8000H~9FFFH、2764的地址范围是0000H~1FFFH。画出用74LS138译码器的全译码法存储器系统电路(CPU)的地址宽度为16)。解:8K为213需要13根地址线,∴A0~A12接6262、2764的13根地址线。A13~A15三根地址线接74LS138的A、B、C三个输入端。具体电路如图所示:A0~A12A13AA14Y0C27646264A15CECSBWRY4G2AG2BOE+5VOE23 G1D0~D7RDWR5-13某微处理器系统中有1片EPROM2716,它与CPU的连接如图5-21所示。问2716的地址空间的分配是多少?解:如图可见A11~A15全为0时2716被选中,∴其地址空间为0000H~07FFH。00000A11ABCPU10A121A02716A10A131A14CS0MREQA1501271606-2简述接口电路组成中各部分的作用,并区分什么是接口?什么是端口?答:接口部分功能如下:1.接向CPU部分的功能(1)总线驱动器:用来实现对CPU数据总线速度和驱动能力的匹配。(2)地址译码器:接收CPU地址总线信号,进行译码,实现对各寄存器(端口)的寻址。(3)控制逻辑:接收CPU控制总线的读/写等控制信号,以实现对各寄存器(端口)的读/写和时序控制。2.接向外设部分的功能(1)数据寄存器(缓冲器):包括数据寄存器和输出寄存器。前者暂存外设送来的数据,以便CPU读取,后者暂存CPU送来的数据,以便外设取走。(2)控制寄存器:接收存放CPU的各种控制命令(或控制字)及其他信息。这些控制命令用以设置接口工作方式、工作速度、指定某些参数及引脚功能等。控制寄存器一般只能写入。(3)状态寄存器:保存外设的当前信息。如,忙/闲状态、准备就绪状态等等,以供CPU查询、判断。以上3个寄存器均可由程序进行读或写。类似存储器单元,所以又称为可编程序的I/O端口。通常由系统给它们各分配一个地址码,称作端口地址。外设必须通过输入或输出接口电路才能于CPU交换信息。这种电路简称接口。每个接口电路都需占用CPU的一个或多个I/O端口地址。如8255A是一种接口,它占用4个端口地址。6-3说明CPU对I/O设备采用的两种不同编址方式的优缺点和访问I/O设备采24 用的指令有哪些?答:I/O设备两种编址方法是:1.统一编址这种编址方式又叫存储器映象方式,是从存储器空间划出一部分给I/O端口。每个端口相当于一个存储单元。优点是指令系统简单,便于掌握,且访问外设的寻址方式多,操作方便、灵活,对外设进行算术运算、逻辑运算移位等操作。缺点是,占用了存储器地址,使其空间变小,译码相对复杂。2.I/O端口单独编址访问外设与内存有明显区别,使程序编写清晰,容易理解。译码电路相对简单(I/O指令所需地址线相对较少)。缺点:指令系统相对复杂,且单独的I/O指令寻址方式弱。CPU控制总线复杂。访问I/O设备采用的指令是:(1)INAL,PORT(2)INAX.PORT(3)INAL,DX(4)INAX,DX(5)OUTPORT,AL(6)OUTPORT,AX(7)OUTDX.AL(8)OUTDX,AX6-4说明CPU与I/O设备之间交换数据的控制方式有哪些?比较它们的优缺点?答:CPU与外设之间数据交换的控制方式可归纳为3种:程序控制方式、中断控制方式和直接存储器存取(DMA)方式。程序控制方式硬件花销小,初学者容易掌握,但效率太低。只适合实时性要求不高的场合。中断控制方式比程序控制方式复杂,但比DMA简单,效率也在二者之间。可满足一般实时性较高的系统。DMA控制方式最复杂,但效率最高。适用于传送速率高,信息量大的场合如软、硬盘驱动器便采用DMA方式。--------------------------------------------------------------------6-98237A选择存储器到存储器的传送模式必须具备哪些条件?答:8237A存储器到存储器传送模式,需用CH0寻址控制源地址,CH1寻址控制目的地址。所以这种模式必须保证DMA的通道0和1可同时用于M→M传送模式。两个通道缺一不可。6-15微机系统总线层次化结构是怎样的?系统总线的作用是什么?答:微机系统内的总线可归为4级:(1)片内总线:又称芯片内部总线,位于CPU芯片内部,用来实现CPU内部各功能单元电路之间的相互连接和信号的信号传递。(2)片总线:又称元件级总线,是微计算机主板上或单板微计算机上以CPU芯片为核心,芯片与芯片间连接的总线。(3)内总线:又称微计算机总线或板级总线,通常又称为微机系统总线,用来实现计算机系统中插件板与插件板间的连接。如PC机的ISA总线,PCI25 总线等。(4)外总线:又称通信总线,用于系统之间的连接,完成系统与系统间的通信。如:RS-232C。IEEE-488、USB等等。系统总线一般指内总线,作用如(3)所述。6-16试比较适用于80X86系列微机的并行总线的主要性能?解:总线名称PC/XTISA(PC/XT)EISAVESA(VL-BUS)PCI适应机型8086/8088286,386,486386.486,5486,586系列Pentium系列PCPC86PCPCPC工作站最大传输率4MB/s16MB/s33MB/S266MB/S(133/266MB)/S总线宽度8位16位32位32位(32/64)位总线时钟4.77MHz8.33MHz8.33MHz66MHz(33/66)MHz同步方式同步仲裁方式集中集中集中集中集中逻辑时序边缘边缘电平边缘地址宽度20位24位32位(32/64)位负载能力88663信号线数143条90条49/100条可否64位扩展不可不可可可自动配置无无可并发工作可可突发方式有引脚可否复用否否否否可6-18什么是USB总线?它有哪些特点?可作为哪些设备的接口?答:USB(UniversalSerialBus,通用串行总线)是一种新型的外设接口标准。USB的特点:(1)连接简单快速:能自动识别系统中设备的接入或移走,真正做到“即插即用”。(2)可用一种类型的连接器连接多种外设:统一使用4针插头取代了机箱背后种类繁多的串/并插头,实现了将常规I/O设备、多媒体设备,通信设备以及家用电器统一为一种接口的愿望。(3)支持多设备的连接:理论1个USB主机连接多达127个外设,两个设备之间的距离可达5m。(4)传输速率快:USB1.1版的数据传输率分1.5Mb/s的低速传输和12Mb/s全速传输两种方式(USB2.0速率可达280Mb/s).比普通并口快约10倍。(5)内置电源供应:一般串/并口设备都需自带专用电源,USB提供了5V,500mA电源,免除了自带电源的麻烦。可用USB接口的设备:(1)扫描仪、数码相机、数码摄像机、数字声音系统、显示器、软驱动器、26 网卡及通用I/O设备的打印机、键盘、鼠标游戏操纵杆、优盘等等。7-1什么是中断类型码、中断向量、中断向量表?在基于8086/8088的微机系统中,中断类型码和中断向量之间有什么关系?答:8086/8088有256级中断。可用软中断指令INTn与之对应。N取值范围0~255。256级中断对应的代表0~255其中的某个数n称作中断类型号又称中断类型码。CPU根据此类型号n,从内存实际地址00000H~003FFH区的中断向量表找到中断服务程序的首地址,每个类型号含4个字节的中断向量。中断向量是中断服务程序的入口地址。在8086/8088的微机系统中,中断类型号n×4就得到中断向量在中断向量表的存放地址。从此地址开始,前两个字节存放着中断服务程序入口地址的偏移量(IP),后2个字节单元存放着中断服务程序入口地址的段首址(CS)。7-58259A中断控制器的功能是什么?答:8259A中断控制器的功能包括:管理输入到CPU的中断请求,实现优先权判决,提供中断向量、屏蔽中断输入等功能。7-88086/8088系统中断源的优先级别依次为:除法错→INTn→INTO→NMI→INTR→单步。7-22条件同7-21题。利用8259A管理8级中断源,要求:(1)写出8259A的初始化程序(其端口自定):(2)当有中断请求时,要求8086CPU把一个1KB的数据块从AREA1开始的存储区送至AREA2开始的存储区。试编写一主程序等待中断和该中断服务程序。解:设8259A的首址为20H,中断类型码80H,选编IRQ4DATASEGMENTAREA1DB400HDUP(?)AREA2DB400HDUP(?)DATAENDS;--------------------------------------------------------------------CODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATAMAINPROCFARSTART:PUSHDSMOVAX,SEGINTCODEMOVDS,AXXORDX,DXMOVAX,2584H;80H对应IRQ0,84H对应IRQ4INT21HMOVAX,DATAMOVDS,AXMOVES,AX;---------------------------------------CLIMOVAL,13H;边沿触发、不级联,设置ICW4OUT20H,AL27 MOVAL,80H;中断类型码OUT21H,ALMOVAL,03H;一般全嵌套方式,中断自动结束方式OUT21H,ALMOVAL,0OUT21H,ALSTILL:JMPLLMAINENDPCODEENDSINTCODESEGMENTASSUMECS:INTCODE,DS:DATA,ES:DATAINT_PROCPROCINT_SER:MOVSI,OFFSETAREA1MOVDI,OFFSETAREA2MOVCX,400HCLDREPMOVSBIRETINT_PROCENDPINTCODEENDSENDSTART8-5试画出8255A与CPU的连接图,并说明8255A的A0,A1地址线与8086CPU的A1,A2地址线连接的原因。解:连接示意图如下。8255的A0,A1接8086CPU的A1,A2使8255的A、B、C及控制端口地址全为偶地址。使其D0~D78位数据总线全用8086的低8位数据总线访问。注:ISA总线中不是如此。28 U3U4RD3216AD0AD0344WR29RDAD015AD1AD133D0PA03ALE25LOC/WRAD114AD2AD232D1PA1224QS0ALEAD213AD3AD331D2PA21QS1INAAD312AD4AD430D3PA34026AD411AD5AD529D4PA43927S0,DENAD510AD6AD628D5PA538M/IO28S1DT/RAD69AD7AD727D6PA637S2M/IOAD78AD8D7PA731AD87AD9RD51830RQ/GT0AD96AD10WR36RDPB019RQ/GT1AD105AD11A19WRPB120AD114AD12A28A0PB22117AD123AD1335A1PB32218NMIAD132AD146RESETPB423INTRAD1439AD15CSPB524AD15PB63325MN/MXPB72338TESTA16/S3223714READYA17/S4PC03615A18/S5PC13516A19/S6PC21917CLKPC3213413RESETBHE/S7PC412PC5808611PC6U510AD0119A0PC7AD12DI0DO018A18255AD23DI1DO117A2AD34DI2DO216AD45DI3DO315AD56DI4DO414U1AD67DI5DO513U2AA8115AD78DI6DO612M/IO1A92AY014DI7DO73A103BY113CY29212ALE11OEY311STB74LS324Y4108282U2BA145E1Y59U64A156E2Y67AD8119A86E3Y7AD92DI0DO018A9574LLS138AD103DI1DO117A10AD114DI2DO216A11U2CAD125DI3DO315A12A09AD136DI4DO414A138AD147DI5DO513A14A1110AD158DI6DO612A15DI7DO7U2D9A1212ALE11OE11STBA131382828-7简述8255A工作在方式1时,A组端口和B组端口工作在不同状态(输入或输出)时,C口各位的作用。解:可用下表说明。PA口PB口PC7PC6PC5PC4PC3PC2PC1PC0输入输入I/OI/OIBFASTBAINTRASTBBIBFBINTRB输出输入OBFAACKAI/OI/OINTRASTBBIBFBINTRB输入输出I/OI/OIBFASTBAINTRAACKBOBFBINTRB输出输出OBFAACKAI/OI/OINTRAACKBOBFBINTRB8-9使用8255A作为CPU与打印机接口。A口工作于方式0(输出),C口工作于方式0。8255A与打印机和CPU的连线如图8-54所示(8255A的端口地址及CPU内存地址自行设定)。试编写一程序,用查询方式将100个数据打印(8255A的端口地址及100个数据的存放地址自行设定)。29 D7~D0打印机PA7~PA080868255APC6STBCPUPC0BUSY图8-548255A作为打印机接口解:设8255A端口地址200H示意~203H,内存首趾DS:0000H,程序如下;DATASEGMENTCHARDB100(?)P8255AEQU200HP8255BEQU201HP8255CEQU202HP8255COEQU203HMODE8255EQU10000001BDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTARTPROCFARPUSHDSXORAX,AXPUSHAXMOVDX,P8255COMOVAL,MODE8255OUTDX,ALMOVAL,00001101B;PC0置1OUTDX,ALMOVCX,100MOVSI,OFFSETCHARLPST:MOVDX,P8255CINAL,DXTESTAL,1JNZLPSTLODSBMOVDX,P8255AOUTDX,ALMOVAL,00001100BMOVDX,P8255COOUTDX,ALINCALOUTDX,AL30 LOOPLPSTRETSTARTENDPCODEENDSENDSTART8-108250和调制解调器的连接如图8-55所示。已知端口地址68H~6EH。试编写下列程序段:1一般方式下的初始化程序段:设定字符7位、1个偶校验位、2个停止位、启动接收和发送器。(设波特率发生器的频率1.8432MHz)RXDBBTXDBARS232CAB异步调制解8250DSRCC调通信设备DTRCDCTSCBCARTS解:MOVAL,80H;OUT6BH,AL;设通信线路控制寄存器D7为1;-----------------------------------------------MOVAL,60HOUT68H,AL;1200波特率因子低8位MOVAL,00HOUT69H,AL;1200波特率因子高8位;-------------------------------------------------------------MOVAL,00011110B;偶校验,7位数据,2位停止控制字OUT6BH,AL;控制字送通信控制寄存器;---------------------------------------------------------------MOVAL,00000011B;调制解调控制寄存器:DTR和RTS有效OUT6CH,AL;-----------------------------------------------------------------MOVAL,0OUT69H,AL;屏蔽各种中断。;--------------------------------------------------------------FOREVER:INAL,6EH;等待调制解调器就绪TESTAL,10H31 JZFOREVERTESTAL,20HJZFOREVERCOMSTA:……;通信开始8-11在上题①条件下采用状态查询方式,输入100个数给CPU,放在首址符号为Buffer的内存缓冲区中(每输入一个字符需要检测错误信息标志,出错时转入出错程序处理)。解:初始化程序与上题基本相同。DATASEGMENTBUFFERDB100DUP(?)COUNTEQU$-BUFFERDATAENDS;---------------------------------CODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATASTARTPROCFARPUSHDSMOVAX,0PUSHAX;----------------------------------MOVAL,80H;OUT6BH,AL;设通信线路控制寄存器D7为1;-----------------------------------------------MOVAL,60HOUT68H,AL;1200波特率因子低8位MOVAL,00HOUT69H,AL;1200波特率因子高8位;-------------------------------------------------------------MOVAL,00001110B;奇校验,7位数据,2位停止控制字OUT6BH,AL;控制字送通信控制寄存器;---------------------------------------------------------------MOVAL,00000001B;调制解调控制寄存器:DTR有效OUT6CH,AL;-----------------------------------------------------------------MOVAL,0OUT69H,AL;屏蔽各种中断。;--------------------------------------------------------------SWAIT:INAL,6EH;等待调制解调器就绪TESTAL,10H;设备就绪?JZSWAITMOVSI,OFFSETBUFFERMOVCX,COUNTMOVAX,DATAMOVDS,AX32 MOVES,AXFOREVER:INAL,6DHTESTAL,1EHJNZERRORTESTAL,01HJZFOREVERRECEIVE:INAL,68HANDAL,7FHSTOSBLOOPFOREVERRETERROR:INAL,68HJMPFOREVERSTARTENDPCODEENDSENDSTART8-198253每个通道的最大定时值是多少?欲使8253用于定时值超过其最大值时,应如何应用?答:8253最大定时值是216=65536,如果需要超过此值,可采用级联方式。例如计数器0的OUT0连接到计数器1的CLK1。采用两级级联定时长度达232=42949672968-20利用8253作为定时器,8255一个输出端口控制8个指示灯,编写一个程序,使8个指示灯依次闪动,闪动频率为每秒1次。解:利用计数器0作定时,CLK0频率1MHz。定时器0计数初值5000(0C350H),工作在方式2,分频产生20Hz脉冲,OUT0输出的20Hz脉冲连接到CLK1,计数器1计数初值20,也工作在方式2,对20Hz20分频产生秒信号。以此周期刷新8255指示灯。设8255端口地址40H~43H,8253端口地址20H~23H,程序采用查询方式工作:DATASEGMENTDATAENDSCODESEGMENTASSUMUCS:CODE,DS:DATASTARTPROCFARMOVAL,10000000B;8255PA口方式0输出控制字OUT43H,ALMOVCL,1MOVAL,CLOUT40H,AL;点亮第一个灯(初始状态);------------------------------------------------------MOVAL,00110100B;计数器0方式2,写初值16位33 OUT23H,ALMOVAX,50000;(十进制数)OUT20H,ALMOVAL,AHOUT20H,ALMOVAL,01010100B;计数器1方式2,写初值8位OUT23H,ALMOVAL,20OUT21H,ALWAIT1:MOVAL,01000000B;锁定计数器1OUT23H,ALINAL,21H;读低8位MOVAH,ALINAL,21HCMPAH,1JNZWAIT1;如未到时间待ROLCL;到时间下一位显示MOVAL,CLOUT40H,ALWAITNO1:MOVAL,01000000B;此段等待下个脉冲OUT23H,ALINAL,21HMOVAH,ALINAL,21HCMPAH,1JZWAITNO1JMPWAIT1STARTENDPCODEENDSENDSTART34'