• 646.43 KB
  • 2022-04-22 11:37:19 发布

微机系统原理与接口技术_李广军_电子科大版_课后答案

  • 47页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)“微机系统原理与接口技术”第二章习题解答(部分)1.请将左边的术语和右边的含义联系起来,在括号中填入右边的代号字母。(1)字长(i)a.指由8个二进制位组成的通用基本单元。(2)字节(a)b.是CPU指令执行时间的刻度。(3)指令(h)c.CPU所能访问的存储单元数,与CPU地址总线条数有关。(4)基本指令执行时间(g)d.惟一能代表存储空间每个字节单元的地址,用5位十六进制数表示。(5)指令执行时间(j)e.CPU执行访问存储器或I/O操作所花时间。(6)时钟周期(b)f.由段基址和偏移地址组成,均用4位十六进制数表示。(7)总线周期(e)g.指寄存器加法指令执行所花时间。(8)Cache(k)h.完成操作的命令。(9)虚拟存储器(l)i.指CPU在交换、加工、存放信息时信息位的最基本长度。(10)访存空间(c)j.各条指令执行所花时间,不同指令值不一。(11)实际地址(d)k.为缓解CPU与主存储器间交换数据的速度瓶颈而建立的高速缓冲存储器。(12)逻辑地址(f)l.CPU执行程序时看到的一个速度接近内存却具有外存容量的假想存储器。课后答案网3.在下列各项中,选出8086的EU和BIU的组成部件,将所选部件的编号填写于横线上。EU(3).(7).(9).(12)BIU(4).(5).(6).(8).(10).(11)www.hackshp.cn(1)地址部件AU(2)段界检查器(3)ALU(4)20位地址产生器(5)20位物理地址加法器(6)指令队列(7)状态标志寄存器(8)总线控制逻辑(9)控制单元(10)段寄存器组(11)指令指针(12)通用寄存器组4.试将左边的标志和右边的功能联系起来。要求:(1)在括号中填入右边的功能代号。(2)填写其类型(属于状态标志填S,属于控制标志填C)。(3)写出各标志为0时表示的状态。 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)标志类型为0时表示的状态1.SF(b)a.陷阱标志S结果为正数2.CF(d)b.符号标志S无进位/借位3.AF(h)c.溢出标志S无进位/借位4.DF(i)d.进位标志C数据串操作的增量地址为自动递增5.TF(a)e.零标志C正常执行方式6.OF(c)f.奇偶标志S无溢出7.PF(f)g.中断允许标志S奇数个18.IF(g)h.辅助进位标志C无可屏蔽中断产生9.ZF(e)i.方向标志S结果不为07.有一个由20个字组成的数据区,其起始地址为610AH:1CE7H。试写出该数据区首末单元的实际地址PA。首单元地址:610A0H+1CE7H=62D87H末单元地址:62D87H+27H=62DAEH注:20个字共占用了40个字节,末单元的偏移量为39(即十六进制的27H)8.若一个程序段开始执行之前,(CS)=97F0H,(IP)=1B40H。试问该程序段启动执行指令的实际地址是多少?实际物理地址=97F00H+1B40H=99A40H9.若堆栈段寄存器(SS)=3A50H,堆栈指针(SP)=1500H,试问这时堆栈栈顶的实际地址是多少?堆栈栈顶的实际物理地址=课后答案网3A500H+1500H=3BA00H12.有两个16位的字31DAH、5E7FH,它们在8086系统存储器中的地址为00130H和00135H,试画出它们的存储器示意图。www.hackshp.cn地址内容00130H0DAH00131H31H00132H00133H00134H00135H7F00136H5E13.有一个32位的地址指针67ABH:2D34H存放在从00230H开始的存储器中,试画出它们的存放示意图。 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)地址内容00230H34H00231H2DH00232H0ABH00233H67H14.将下列字符串的ASCII码依次存入从00330H开始的字节单元中,试画出它们的存放示意图:U︺E︺S︺T︺C(︺为空格符)地址内容00330H5500331H2000332H4500333H2000334H5300335H2000336H5400337H2000338H4315.存储器中每一个段最多为64KB,当某程序routadf运行后,用DEBUG命令显示出当前各寄存器的内容如下,要求:课后答案网(1)画出此时存储器分段的示意图。说明地址内容…代码段(附加段)首地址www.hackshp.cn11A70H…堆栈段首地址21BE0H…堆栈段末地址21CA7H栈底21CA8H…代码段首地址31B80H…(2)写出各状态标志的值:B>C:debugroutadf.exer 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)AX=0000BX=0000CX=006DDX=0000SP=00C8BP=0000SI=0000DI=0000DS=11A7ES=11A7SS=21BECS=31B8IP=0000NVUPEIPLNZNAP0NCOF=0,DF=0,IF=1,SF=0,ZF=0,AF=0,PF=0,CF=016.已知(SS)=20A0H,(SP)=0032H,欲将(CS)=0A5BH,(IP)=0012H,(AX)=0FF42H,(SI)=537AH,(BL)=5CH依次推入堆栈保存。要求:(1)画出堆栈存放示意图。地址内容…入栈完毕时的当前栈顶SP20A28H5CH20A29H?20A2AH7AH20A2BH53H20A2CH42H20A2DH0FFH20A2EH12H20A2FH00H20A30H5BH课后答案网20A31H0AH栈底(初始栈顶SP)20A32H?(2)写出入栈完毕时SS和SP的值:(SS)=20A0H(不变),(SP)=0028Hwww.hackshp.cn“微机系统原理与接口技术”第三章习题解答1.下列各条指令是否有错?如果有,请指出错误之处并改正。(1)MOVDS,1000H(2)MOV[100],23H(3)ADDAX,[BX+BP+6](4)PUSHDL(5)INAX,[3FH](6)OUT3FFH,AL 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)(7)LESSS,[SI](8)POP[AX](9)IMUL4CH(10)SHLBX,5(11)INT300(12)XCHGDX,0FFFH答:(1)错误。不允许直接向段寄存器送立即数,可改为:MOVAX,1000HMOVDS,AX(2)错误。该指令在语法上是对的,即可以把一个立即数送入一个存储单元;但是如果考虑实际编译,则第一操作数前应加上BYTEPTR或WORDPTR说明,否则汇编程序会因不能确定操作数长度而指示出错。可改为:MOVBYTEPTR[100],23H(3)错误。不能同时使用两个基址寄存器BX、BP进行间接寻址,可改为:ADDAX,[BX+DI+6](4)错误。堆栈操作应以字为单位进行,而DL是一个字节。可改为:PUSHDX(5)错误。在输入/输出指令中,8位端口地址应直接写在操作数处。可改为:INAX,3FH(6)错误。端口地址3FFH已超出8位二进制表示范围,16位端口地址应用DX。可改为:MOVDX,3FFHOUTDX,AL(7)错误。LES指令的目操作数应该是通用寄存器,不能是段寄存器。可改为:LES课后答案网AX,[SI](8)错误。AX不能用于间接寻址,间接寻址只能用BX、BP、SI、DI四个寄存器之一。可改为:POP[BX](9)错误。立即数不能做乘法指令的操作数,可改为:www.hackshp.cnMOVBL,4CHIMULBL(10)错误。当逻辑移位的次数大于1时,应该用CL指示次数。可改为:MOVCL,5SHLBX,CL(11)错误。操作数300>255,已超出有效的中断类型码范围。(12)错误。XCHG指令不允许立即数做它的操作数。可改为:MOVCX,0FFFHXCHGDX,CX2.请指出以下各指令的源、目的操作数所使用的寻址方式。(1)MOVSI,2100H(2)SBBDISP[BX],7(3)AND[DI],AX(4)ORAX,[609EH] 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)(5)MOV[BX+DI+30H],CX(6)PUSHES:[BP](7)CALL[DI]DISP(8)JNZShort_label答:(1)源操作数:立即数寻址;目的操作数:寄存器寻址(2)源操作数:立即数寻址;目的操作数:(带位移量的)基址寻址(3)源操作数:寄存器寻址;目的操作数:变址寻址(4)源操作数:直接寻址;目的操作数:寄存器寻址(5)源操作数:寄存器寻址;目的操作数:(带位移量的)基址变址寻址(6)源操作数:带段超越的基址寻址;目的操作数:隐含寻址(7)只有一个操作数,为(带位移量的)变址寻址(8)只有一个操作数,为相对寻址3.在已学的指令中,可实现累加器清0的单条指令有哪些?比较它们的功能。答:共有以下四种方法:(1)MOVAX,0;仅将累加器清0,不会影响任何标志位(2)SUBAX,AX;累加器清0的同时影响所有状态标志,具体地有:;ZF、PF置1,CF、AF、SF、OF均清0(3)ANDAX,0;将累加器清0,ZF、PF置1,CF、OF、SF清0(4)XORAX,AX;将累加器清0,ZF、PF置1,CF、OF、SF清04.若要判断某带符号数的正、负而不影响其原值,可使用哪些方法?答:设带符号数为oprd,判断方法可有如下几种:(1)执行指令ADDoprd,0之后,判断SF:SF=0,oprd为正数,否则为负。(2)执行指令SUB课后答案网oprd,0之后,判断SF:SF=0,oprd为正数,否则为负。(3)执行指令CMPoprd,0之后,可直接判断SF:SF=0,oprd为正数,否则为负;或者再接着执行指令JGENOMINUS(即同时判断SF、OF),若程序转移至NOMINUS处,则oprd为正数,否则为负;同理,亦可在在执行完CMPoprd,0之后再接着执行指令JLwww.hackshp.cnNOMINUS,若程序转移至NOMINUS处,则oprd为负数,否则为正。(4)执行指令CMPoprd,80H(或8000H)之后,判断CF:CF=1,oprd为正数,否则为负。(5)执行指令ANDoprd,oprd(或全“1”)之后,判断SF:SF=0,oprd为正数,否则为负。(6)执行指令TESToprd,oprd(或全“1”)之后,判断SF:SF=0,oprd为正数,否则为负。(7)执行指令TESToprd,80H(或8000H)之后,判断SF:SF=0,oprd为正数,否则为负;或判断ZF:ZF=1,oprd为正数,否则为负。(8)执行指令ORoprd,oprd(或全“0”)之后,判断SF:SF=0,oprd为正数,否则为负。(9)执行指令XORoprd,0之后,判断SF:SF=0,oprd为正数,否则为负。5.已知DS=2000H,有关的内存单元值为:(21000H)=00H,(21001H)=12H,(21200H)=00H,(21201H)=10H,(23200H)=20H,(23201H)=30H,(23400H)=40H, 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)(23401H)=30H,(23600H)=60H,(23601H)=30H,符号COUNT的偏移地址为1200H。执行下列指令后,寄存器AX、BX、SI的值分别是多少?MOVBX,OFFSETCOUNTMOVSI,[BX]MOVAX,COUNT[SI][BX]答:执行结果为BX=1200H,SI=1000H,AX=3040H。6.设标志寄存器值原为0401H,AX=3272H,BX=42A2H。执行指令SBBAL,BH之后,AX和标志寄存器的值分别是多少?答:由标志寄存器的原值0401H可知,CF的原值为1,故指令执行之后AX=322FH,标志寄存器的值为0410H,即AF变为1,CF变为0,其余不变。7.设若标志寄存器原值为0A11H,SP=0060H,AL=4。下列几条指令执行后,标志寄存器、AX、SP的值分别是多少?PUSHFLAHFXCHGAH,ALPUSHAXSAHFPOPF答:指令执行后标志寄存器的值为0411H,AX=0411H,SP=005EH。8.设若内存单元DATA在数据段中偏移量为24C0H处,24C0H~24C3H单元中依次存放着55H、66H、77H、88H。下列几条指令执行后,寄存器AX、BX、CL、SI、DS的值分别是多少?课后答案网MOVAX,DATALEASI,DATAMOVCL,[SI]LDSBX,www.hackshp.cnDATA答:执行结果为AX=6655H,BX=6655H,CL=55H,SI=24C0H,DS=8877H。9.若AX=26D3H,CX=7908H,CF=1,执行下列指令后,寄存器AX、CX的值分别是多少?CF=?OF=?SALCH,1RCRAX,CLROLAL,1答:执行结果为AX=0A64CH,CX=0F208H,CF=OF=0。10.已知IP=1000H,CF=0,则执行指令JNCShortlabel后,下列各数中哪一个是可能的IP值?(A)0FFFFH(B)0FFEH(C)10FEH(D)1100H答:(B)简析:条件转移指令执行前IP=1000H,执行JNC指令后IP=1002H;又因CF=0,所以应跳转至目标地址处,该处对应的新IP值=1002H+相对位移量。由于条件转移指 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)令的跳转范围在距本条指令-128~+127个字节内,即新IP值可能的取值范围为0F82H~1081H,因此只有答案B符合条件。11.设DS=4500H,AX=0508H,BX=4000H,SI=0320H。当8086CPU在最小组态下执行指令MOV[BX+SI+0100H],AX时,各控制信号M/IO、DT/R、RD、WR在有效期间的状态分别是什么?数据总线和地址总线上的数分别是多少?答:各控制信号M/IO、DT/R、RD、WR在有效期间的电平分别是:高、高、高、低。数据总线上的数是0508H,地址总线上的地址是49420H。12.已知有某字串BUF1的首址为0000H,BUF2的首址为0010H,数据段与附加段重合。欲从BUF1处开始将10个字数据顺序传送至BUF2处,试在下面程序段的空白处填上适当的指令或操作数以实现上述功能。LEASI,BUF1ADDSI,18LEADI,BUF2ADDDI,18STDMOVCX,10REPMOVSW13.附加段中有某字符串首址为BLOCK,长17个字节。欲查找其中第一次出现字符“e”的位置,并将该位置所在的偏移量入栈保护。试在下面程序段的空白处填上适当的指令或操作数以实现上述功能。MOVDI,OFFSETBLOCKMOVAL,课后答案网‘e’MOVCX,17CLDREPNESCASBJNEOTHERwww.hackshp.cnDECDIPUSHDIOTHER:……(略)14.已知附加段中有一块长50个字的数据区,首址为DEST。欲编程将它们全部初始化为0FFFFH值,试在下面程序段的空白处填上适当的指令或操作数,以实现上述功能。LEADI,DESTMOVCX,100CLDMOVAL,0FFHREPSTOSB15.已知有程序段如下:MOVAL,35HMOVDL,AL 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)ANDDL,0FHANDAL,0F0HMOVCL,4SHRAL,CLMOVBL,10MULBLADDAL,DL执行之后,AL等于多少?该程序段完成了什么功能?答:程序段执行后AL=23H。该程序段实现了将AL中的1个组合BCD码转换为十六进制数并存回AL中的功能。16.以HEX为首址的字节单元处存放着一串ASCII字符:“0123456789ABCDEF”,并有程序段如下:MOVBX,OFFSETHEXLEADI,HCODINCDISTDMOVAL,5CHMOVAH,ALANDAL,0FHXLATHEXSTOSBMOVAL,AHMOVCL,4SHRAL,CL课后答案网XLATHEXSTOSB上述程序段执行后,字节单元HCOD及其相邻单元HCOD+1的内容是多少?该程序段的功能是什么?www.hackshp.cn答:程序段执行后,HCOD单元的内容是‘5’,HCOD+1单元的内容是‘C’。该程序段将AL中存放的1字节十六进制数转换为2个对应的ASCII字符存放在HCOD及其相邻单元HCOD+1中。17.有程序段如下:MOVAL,DB1MOVAH,0MOVDL,10L1:DIVDLMOVBL,AHMOVBH,0PUSHBXMOVAH,0CMPAL,0JNZL1 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)……若内存单元DB1的值为7BH,则程序将依次向堆栈压入哪些数据?该程序段实现了什么功能?答:先后存入堆栈中的字数据依次是3、2、1。该程序段实现了将一个字节的无符号十六进制数DB1转换为非组合BCD码存入堆栈的功能,堆栈中最先压入的是十进制数的个位(每个十进制位在堆栈中占1个字单元)。18.下面的程序执行后,DX、AX的值分别是多少?;以X为首址的字单元中的数据依次为1234H、5678H;以Y为首址的字单元中的数据依次为8765H、4321H……LEASI,XLEADI,YMOVDX,[SI+2]MOVAX,XADDAX,XADCDX,[SI+2]CMPDX,[DI+2]JLL2CMPAX,YJLL1JMPEXITL1:MOVAX,1JMPEXITL2:MOVAX,2课后答案网EXIT:……答:执行结果为AX=2,DX=0ACF0H。19.已知组合BCD码的存放情况如图所示,按要求编写计算程序:www.hackshp.cn……94H←DATA116H26H89H30H←DATA255H04H74H……←RES(1)从DATA1单元开始,将8个组合BCD码累加起来,其和(超过1字节)存入以RES为首址的单元中(低位在前)。 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)答:一种可能的程序段实现如下:……;8个组合BCD码累加LEASI,DATA1;SI指向DATA1处CLD;清DF,地址自动增量LODSB;AL中装入第一个BCD码,并修改SIMOVCX,7;共加7次MOVAH,0;AH用作高位,记录低位字节的进位AGAIN:ADDAL,[SI];多个数累加,位权相同,不能用ADCDAA;组合码十进制调整ADCAH,0;DAA不影响AH,只影响标志位INCSI;修改指针LOOPAGAINMOVRES,AX;将AX的全部16位送至字单元……(2)将它们看作2个分别以DATA1、DATA2为首址的8位十进制数(低位在前),求此两数之差并存入以RES为首址的单元中。答:一种可能的程序段实现如下:……;2个8位十进数(4字节组合BCD码)相减LEASI,DATA2;SI指向被减数最低位LEABX,DATA1;BX指向减数最低位LEADI,RES;DI指向结果单元最低位CLD课后答案网;清DF,地址自动增量MOVCX,4;共减4次CLC;清CF,使首次执行SBB时结果正确NEXT:LODSB;向AL装入被减数,并修改SISBBAL,www.hackshp.cn[BX];带借位相减DAS;组合码的十进制调整,影响标志位STOSB;存放结果,并修改DIINCBX;修改BXLOOPNEXT……20.有一个64位二进制数,由高位字到低位字分别存放在DX、CX、BX、AX四个16位数据寄存器中。将该数视为无符号数,编程把它左移1位;再当作带符号数,编程把它右移2位。答:(1)一种可能的无符号数左移的程序段实现如下:……SALAX,1RCLBX,1RCLCX,1 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)RCLDX,1……简析:64位数的整体左移应从最低位字开始,借助CF把每次向左移出的D15位移入高位字的D0位。在SAL/SHL、ROL、RCL几条左移指令中,只有RCL能够把CF移入D0位,故应选用该循环移位指令。注意,若第一次左移AX时也使用RCL,应首先将CF清0。(2)一种可能的带符号数右移2位的程序段实现如下:……MOVSI,2;循环次数AGN:SARDX,1RCRCX,1RCRBX,1RCRAX,1DECSIJNZAGN……简析:64位带符号数的整体右移应从最高位字开始。最高位字右移时需将符号位(D15)复制,并将右移出的D0位移入低位字的D15位;余下的三个低位字则不再复制D15位。故首次右移应使用SAR指令,而后3次右移使用RCR指令。另外,本例要求右移2位,因CF只能保存一个二进制位,若直接使用SAR/RCR数据寄存器,CL这样的指令进行移位,将无法得到正确的移位结果。所以用循环程序完成课后答案网2次移位。21.设VAR字单元的值为x,F1字单元的值为y,试编程按以下要求给y赋值:www.hackshp.cn2x>30y=030≥x≥1-2x<1答:一种可能的程序段实现如下:……MOVAX,VAR;AX←xCMPAX,30JGPLUS2;x>30,则转PLUS2CMPAX,1JLMIN2;x<1,则转MIN2MOVF1,0;30≥x≥1,y=0JMPGOPLUS2:MOVF1,2;y=2JMPGOMIN2:MOVF1,-2;y=-2或00FEH 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)GO:……;后续处理简析:本例中并未说明VAR字节单元是带符号数还是无符号数,读者在使用判断转移指令时可任意选用。若当作带符号数,应使用JG、JL、JGE、JLE等指令,如参考程序;若当作无符号数,则应使用JA、JB、JAE、JBE等指令。“微机系统原理与接口技术”第四章习题解答(部分)1.判断以下说法是否正确,如有错,请说明原因并改正。(1)伪指令在汇编过程中不会产生二进制代码。(2)宏和过程的相同之处是都可用于简化源程序书写、精简目标代码。(3)在计算机中,高级语言通常需要转换为汇编语言后才能执行。(4)汇编语言程序上机一般包括编辑、汇编、链接和调试几个步骤。答:(1)正确。(2)错误。宏不能精简目标代码。(3)错误。高级语言程序经编译或解释后直接转换为目标代码。(4)正确。2.已知数据和符号定义A1DB?A2DB8K1EQU课后答案网100判断下列指令的正误,并说明错误指令的原因。(1)MOVK1,AX(2)MOVA2,AH(3)MOVBX,K1MOV[BX]www.hackshp.cn,DX(4)CMPA1,A2(5)K1EQU200答:(1)错误。K1是符号常数,在此处相当于立即数100,故不能做目的操作数。(2)正确。(3)正确。(4)错误。A1、A2都是字节变量,相当于两个存储器单元,故不能同时出现在一条指令中直接进行比较。(5)错误。用EQU定义的符号不能重新赋值,除非已用PURGE解除了原值。3.若数据段中有定义NUM1EQU23HNUM2DW0则指令MOVNUM2,NUM1的源、目操作数的寻址方式以及指令执行后NUM2+1单元的内容分别是什么?答:指令MOVNUM2,NUM1的源操作数使用立即数寻址,目的操作数使用直 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)接寻址。指令执行后NUM2+1单元的内容是0。4.设DS=6000H,BX=8432H,SS=5000H,SP=3258H,内存69632H~69635H单元的内容依次是00H、11H、22H、33H。4字节指令CALLDWORDPTR[BX+1200H]本身位于2000H:3250H处的双字单元中。当8086执行该指令后转移至子程序入口时,CS、IP、SS、SP各寄存器以及栈顶2个字单元的内容分别是多少?答:执行结果为CS=3322H,IP=1100H,SS=5000H,SP=3254H,栈顶的两个字即断点地址,为2000H:3254H。5.已知某数据段从物理地址03000H处开始,定义如下:DSEGSEGMENTORG2000HA1DD2DUP(7,1,?)A2DB10DUP(0,4,3DUP(2),5)CNTEQU20H……A3DW100DUP(?)09HARA1(0006H)DSEGENDS00H请分别用分析运算符SEG、OFFSET、LENGTH、SIZE、TYPE求出11HA1、A2、A3的段基址、偏移量、类型及它们的LENGTH、SIZE。00H答:(SEGA1)=0300H,(OFFSETA1)=2000H,(TYPEA1)=4,?ARA2(000AH)(LENGTHA1)=2,(SIZEA1)=2×4=8;?(SEGA2)=0300H,(OFFSETA2)=2018H,(TYPEA2)=1,(LENGTHA2)=10,(SIZEA2)=10×1=60;?(SEGA3)=0300H,(OFFSETA3)=2054H,(TYPEA3)=2,?(LENGTHA3)=100课后答案网,(SIZEA3)=100×2=200‘4’‘6’6.已知符号定义语句如下:0FFHARA3(0010H)ALPHAEQU1000FFHBETAwww.hackshp.cnEQU250FFHGAMMAEQU20FFH分别求下列各表达式的值。0FFH(1)ALPHA*4GTBETA=100*4GT25=0FFFFH0FFH(2)ALPHAMODGAMMA+BETA=100MOD2+25=25?ARA4(0016H)(3)(BETA/3)LE5=(25/3)LE5=005H(4)ALPHAANDBETA=100AND25=64H&19H=005H(5)GAMMAXOR(BETAEQ25)=2⊕(25EQ25)=0FFFDH05H05H7.已知数据段定义如下:‘$’DSEGSEGMENT?ORG605HARA1DD110009H05HARA2DW2DUP(?),‘64’05HCONT1EQU$-ARA205HCOUT2EQUARA2-ARA1‘$’9AHVAR2(0024H)56H41H(‘A’)42H(‘B’)题4-7图 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)ARA3DBCONT1DUP(0FFH)ARA4DB2DUP(?,CONT2DUP(5),’$’)ORG$+2VAR2DW569AHDB‘AB’DSEGENDS用示意图说明该数据段的存贮单元分配情况。答:有关存储单元的内容如右图所示。8.下列程序是否有错?如有错,请改正。该程序完成什么功能?。DATASEGMENTINBUFDW100DUP(?)OUTBUFDW100DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARMOVAX,DATAMOVDS,AXINIT:MOVSI,OFFSETINBUFLEADI,OUTBUFMOVCX,100REPMOVSBMAINENDPCODEENDS课后答案网ENDMAIN答:改正之后的源程序清单如下(下划波浪线的语句是原来没有的或有错之处):DATASEGMENTINBUFwww.hackshp.cnDW100DUP(?)OUTBUFDW100DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA;原ASSUME语句未说明ESMAINPROCFARPUSHDS;补充的三条指令为主程序返回提供正确的地址XORAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVES,AX;MOVS指令以ES:DI为目的串指针,故应对ES赋值INIT:MOVSI,OFFSETINBUFLEADI,OUTBUFMOVCX,100CLD;从首址开始传送,应使DF=0 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)REPMOVSW;应传送的是100个字而非字节RET;程序结束,返回DOSMAINENDPCODEENDSENDMAIN该程序完成的功能是:将INBUF表内的10个字数据复制到以OUTPUT开始的连续的内存单元中。9.下面的程序段中有2条转移指令,计算它们的相对位移量并填在空缺的机器代码处。1000:001BF3A6REPZCMPSB1000:001D7501JNZ00201000:001FCBSAME:RET1000:002041FOUND:INCCX1000:0021890E0600MOV[0006],CX1000:0025EBF8JMP001F答:两处空缺的机器码分别为01H、0F8H。简析:JNZ指令采用相对寻址方式,本例程序中JNZ的目标地址是同一段中偏移量为0020H处,当前IP=001FH,故有:相对偏移量=目标地址-当前IP值=01H。JMP指令有多种寻址方式,本例程序中的JMP为段内直接跳转,也采用相对寻址方式。因当前IP=0027H,目标地址为001FH,因此有:相对偏移量=目标地址-当前IP值=0F8H(-8的补码)。10.111.1课后答案网12.程序功能:找出DATA1表中最大和最小的无符号数。BX最小0,AX最大0ffffh13.读下面程序,在其中的空处添上适当内容。该程序完成了什么功能?程序运行后,变量RS的值是多少?www.hackshp.cnDATASEGMENTBUFDB-13,24,5,-62,77,20,-7,145,0CNTDB$-BUFRSDB0DATAENDSSTACKSEGMENTPARASTACK‘STACK’DB256DUP(?)STACKENDSCODESEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTARTPROCFARPUSHDSMOVAX,0PUSHAXMOVAX,DATA 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)MOVDS,AXLEABX,BUFMOVCH,0MOVCL,LP:MOVAL,[BX]TESTAL,80HJECONTINCRSCONT:INCBXLOOPLPRETSTARTENDPCODEENDSENDSTART答:程序空处可填CNT,字节变量RS的最后结果是04H。该程序实现的功能是:统计数据段中以BUF为首址的带符号字节数据表中负数的个数,CNT为表中所有数据的个数,即表的长度。需要注意的是:十进制数据“145”在以二进制带符号字节数据形式存放时相当于“-111”。14.编写一个完整的源程序,将数据35、-27、-13、6、-47、52、9、-3中的正数放入以BUFFER为首址的数据缓冲区中。答:一种可能的程序如下实现:DATASEGMENTBLOCKDB35,-27,-13,6,-47,52,9,-3COUNTEQU$-BLOCK课后答案网BUFFERDBCOUNTDUP(?)DATAENDSSTACKSEGMENTPARASTACK‘STACK’DW40www.hackshp.cnDUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKBEGIN:MOVAX,DATAMOVDS,AXMOVES,AX;需用STOS串操作指令MOVCX,COUNTLEASI,BLOCK;源数据区指针LEADI,BUFFER;正数存放区指针CLD;自动增量AGAIN:LODSB;取源数据,并修改SITESTAL,80H;取符号位,不影响ALJSGO;符号位=1,是负数,不存STOSB;存正数并修改DIGO:LOOPAGAIN 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)MOVAH,4CH;退出循环,返回DOSINT21HCODEENDSENDBEGIN15.已知有一个长100个字的数据块,存放在以3DA0H:1000H开始的存储区域内。试编写一个完整的汇编语言程序,将该数据块复制到以3DA0H:1008H开始的存储区内。答:一种可能的程序如下实现:DATASEGMENTAT3DA0HORG1000HBLOCKDW104DUP(?)DATAENDSSSEGSEGMENTPARASTACK‘SSEG’DB100DUP(?)SSEGENDSCODESEGMENTASSUMECS:CODE,SS:SSEG,DS:DATA,ES:DATAMAINPROCFARPUSHDSMOVAX,0PUSHAXMOVAX,SEGBLOCKMOVDS,AXMOVES,AXMOVCX,200课后答案网;重复次数LEASI,BLOCKADDSI,199;SI=10C7HMOVDI,SIADDDI,8www.hackshp.cn;DI=10CFHSTD;自动减量REPMOVSBRETMAINENDPCODEENDSENDMAIN简析:由题意可知,源数据区(占用地址3DA0:1000H~3DA0:10C7H,共200个字节)与目标数据区(占用地址3DA0:1008H~3DA0:10CFH,共200个字节)是重叠的。若从首址开始增量传送(DF=0),将破坏1008H以后的源数据,所以必须从末址向首址减量传送(DF=1)。数据段初始化时,有以下几点需注意:段基址规定为3DA0H,故应在段定义伪指令SEGMENT后加上AT语句;源数据区首址的偏移量规定为1000H,故应使用ORG语句指明;对源、目标数据区进行定义时,应注意目标数据区首址的偏移量是1008H。如果定义为: 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)ORG1000HSOURDW100DUP(?);源数据区DESTDW100DUP(?);目标数据区则目标数据区首址的偏移量实际上是10C8H,不合题意。可将它们统一定义为足够长度(至少104字或208字节)的变量,如参考程序所示。指针初始化时,可以将SI、DI分别置为10C7H、10CFH,且CX=200,即进行字节的传送,使用MOVSB;亦可将SI、DI分别置为10C6H、10CEH,且CX=100,即进行字的传送,相应使用MOVSW。16.从内存单元BUF开始的缓冲区中有7个8位无符号数,依次为13H、0D8H、92H、2AH、66H、0E0H、3FH。编程找出它们的中间值并放入RES单元,且将结果以“(RES)=?”的格式显示在屏幕上。答:一种可能的程序如下实现:DATASEGMENTBUFDB13H,0D8H,92H,2AH,66H,0E0H,3FHRESDB?;中间数的存放单元STRDB‘(RES)=’STR1DB?,?,‘$’;结果字符串DATAENDSSSEGSEGMENTPARASTACK‘SSEG’DB100DUP(?)SSEGENDSCODESEGMENTASSUMECS:CODE,SS:SSEG,DS:DATA,ES:DATAMAINPROCFAR课后答案网;主程序PUSHDSXORAX,AXPUSHAXMOVAX,www.hackshp.cnDATAMOVDS,AXMOVES,AX;有STOS指令,需用ESMOVCX,6;外循环次数,比6次AGN:MOVSI,OFFSETBUFMOVDI,SIINCDI;SI、DI指向相邻2数MOVDX,6;内循环次数,比6次AGN1:MOVAL,[SI]CMPAL,[DI];两个无符号数相比较JBUNCH;小于则转,不互换EXCH:XCHGAL,[DI];前1单元较大,则互换MOV[SI],AL;大数放在后面UNCH:INCSI;修改指针,指向下一个数INCDIDECDX 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)JNZAGN1;未处理完,继续内循环LOOPAGN;外循环DONE:MOVAL,[SI-3];排序完成,取中间数MOVRES,ALANDAL,0F0H;分离高半字节MOVCL,4SHRAL,CLCALLBATR;调子程序,将AL值转换为ASCII码LEADI,STR1;DI指向结果单元CLDSTOSB;存放转换结果MOVAL,RESANDAL,0FH;分离并转换低半字节CALLBATRSTOSBLEADX,STR;显示整个字符串MOVAH,09HINT21HRETMAINENDP;主程序MAIN结束;子程序BATR,实现16进制数到ASCII码的转换BATRPROCNEARCMPAL,10;入口参数为ALJBNUM;是数字,则转NUMADDAL,’A课后答案网’-10-’0’;字母NUM:ADDAL,’0’RETBATRENDP;子程序结束CODEENDSwww.hackshp.cnENDMAIN简析:本例的基本思路是:先把7个无符号数按大小排序,排序完成之后取位于中间的一个数即为中间值。然后将该16进制数转换为两个对应的ASCII码,再与要求的格式字符一起输出送显即可。数据排序可以是从大到小、或从小到大排列,本参考程序完成从小到大排序,由一个双重循环结构实现。内循环完成一个数与其它数之间的一一比较,并使每次比较所得的小数置于低地址单元。外循环实现所有数之间的两两相较。共7个数据,故内、外循环中的比较次数均为6次。编程时需注意:无符号数比较大小应使用JA、JB、JAE、JBE指令,本例完成从小到大的排列,故用JB控制转移到UNCH;若要从大到小排列,则用JA代替JB即可。对两个循环体进行初始化时,需仔细考虑指针和循环控制寄存器的初值。在数据段的定义中,分别定义STR、STR1两个变量名字,是为了便于在STR1处存放转换结果;显示时使DX直接指向STR,以STR1末尾的“$”为结束符。中间值找出之后,应把高、低半字节相分离,并分别转换为各所对应的ASCII码。 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)17.设某测试系统中,1号端口为测试口,所得数据是0~9之间的十进制整数;2号端口为显示口,对应于数字0~9的LED七段共阴显示码依次为:3FH、06H、5BH、4FH、66H、6DH、3DH、07H、7FH、6FH。编写一段查表送显的程序,要求:先从测试口读入一个数据,再查表将相应的显示码从显示口送出,如此反复进行直至读入数据“0FFH”为止。答:一种可能的程序如下实现:DATASEGMENTTABDB3FH,06H,5BH,4FH,66HDB6DH,3DH,07H,7FH,6FH;0~9的七段码DATAENDSSTACKSEGMENTPARASTACK‘STACK’DW50DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,SS:STACK,DS:DATASTART:MOVAX,DATAMOVDS,AXLEABX,TAB;BX指向表首址NEXT:INAL,1;从测试口输入CMPAL,0FFHJESTOP;是0FFH,结束XLATTAB;不是0FFH,查表转换OUT2,AL;向显示口输出七段码JMPNEXT课后答案网;继续测试STOP:MOVAH,4CHINT21HCODEENDSENDSTARTwww.hackshp.cn18.编程实现以下操作:从键盘输入4个数字,分别作为2个10~99之间的十进制数。求它们的和,并把结果以三位十进制数的形式显示在屏幕上。要求:输入回显的两个加数与送显的和之间有适当的分隔,以示区别。格式可自行拟定。答:一种可能的程序如下实现:DATASEGMENTNUM1DB?,?;加数1,高位在前,以非组合BCD码存放NUM2DB?,?;加数2,高位在前,以非组合BCD码存放SUMDB?,?,?,‘$’;存放结果的ASCII码,以‘$’为结束符DATAENDSSTACKSEGMENTPARASTACK‘STACK’DW50DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,SS:STACK,DS:DATA,ES:DATA 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)FIRST:MOVAX,SEGNUM1MOVDS,AXMOVES,AX;有STOS指令,需用ESCLD;自动增量,先输入高位MOVCX,2LEADI,NUM1;输入加数1IN1:MOVAH,1;DOS功能调用,单字符输入INT21HANDAL,0FH;ASCII码转换为非组合BCD码STOSBLOOPIN1MOVDL,‘+’;输出加号,以分隔2个加数MOVAH,2INT21HMOVCX,2LEADI,NUM2;输入加数2IN2:MOVAH,01HINT21HANDAL,0FHSTOSBLOOPIN2MOVDL,‘=’;输出等号,分隔加数与结果MOVAH,02HINT21HLEASI,NUM1课后答案网INCSI;SI指向加数1的低位LEABX,NUM2INCBX;BX指向加数2的低位LEADI,SUMwww.hackshp.cnADDDI,2;DI指向结果的末单元STD;自动减量,由低向高相加MOVCX,2;相加次数CLC;清进位,准备用ADCAD:LODSB;取加数1的低位,修改SIADCAL,[BX];2数相加,带进位AAA;未组合BCD码的十进制调整PUSHFADDAL,30H;BCD码向ASCII码转换POPF;因未组合BCD码的高4位为0,故加30H不会影响CFSTOSB;存和,并修改DI。CF不变DECBX;指向加数2的高位。CF不变LOOPADADCBYTEPTR[DI],30H;BCD码向ASCII码转换 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com);高位相加若产生进位,则使SUM单元加1(表示百位),故使用ADC指令LEADX,SUM;输出结果MOVAH,09HINT21HMOVAH,4CH;返回DOSINT21HCODEENDSENDFIRST简析:按照本参考程序,屏幕显示格式如“73+46=119”的样式。基本思路是:首先调用DOS功能,从键盘输入2个0~9之间的数字(字符串输入的AH调用号为10,单个字符输入的AH调用号为1),然后向CRT输出“+”(单个字符输出的AH调用号为2);再由键盘输入2个数,然后输出“=”。将两次输入的数分别作为2个加数相加,得到的和经十进制调整后,向CRT输出(字符串输出的AH调用号为9)。以下几处需进行码制转换:调用单个字符输入功能后,AL中的出口参数为各数字键所对应的ASCII码,故应转换为BCD码才能进行加运算。转换方式:与0FH相与,所得为未组合BCD码。2个未组合BCD码相加,和应该用AAA指令进行十进制调整,调整结果反映在累加器和标志位CF上。加法完成之后,应将结果逐位转换为ASCII码,才可以向CRT输出。做加法运算时还应注意:加数输入之后,先取两个低位相加,再取高位相加(同时加上低位相加产生的进位),需仔细检查指针。若用循环结构完成加运算,则进入循环之前必须清CF,方可在循环体中使用ADC指令。19.有一个长度不超过100字节的字符串,以回车符结尾。编程统计其中非空格的字符个数,并将统计结果以自拟格式显示在课后答案网CRT上。答:一种可能的程序如下实现:DATASEGMENTSTRDB‘It’’safineday,isn’’tit?’,0DH,‘$’;依题意以0DH为结束符。加上www.hackshp.cn“$”便于显示整个字符串COUNTEQU$-STR-2;串长中不包括结束符和“$”符号NUMDB0;置统计结果初值为0STR1DB‘Thenumberofnon-spacecharactorsis’,‘$’DATAENDSSTACKSEGMENTPARASTACK‘STACK’DB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,SS:STACK,DS:DATA,ES:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AX;有SCAS指令,需用ESLEADI,STRCLDMOVAL,20H;关键字符(空格) 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)MOVCX,COUNTNEXT:SCASBJESKIP;是空格,跳过下一句INCNUM;非空格字符,NUM加1SKIP:LOOPNEXTLEADX,STR;显示原字符串MOVAH,09HINT21HMOVDL,0AH;显示换行符,以便显示另一字串MOVAH,2INT21HLEADX,STR1;显示另一个字符串MOVAH,9INT21H;将16进制的统计结果转换为十进制数,再转换为两个ASCII码输出MOVAL,NUMMOVAH,0;AX中为待转换16进制数MOVBL,10DIVBL;AX/BL;商(十位)在AL中,余数(个位)在AH中,均为未组合BCD码PUSHAX;入栈保护ORAL,30H;将十位数转换为ASCII码MOVDL,AL;送CRT显示MOVAH,2INT21H课后答案网POPAX;恢复除法运算的结果ADDAH,30H;将个位数转换为ASCII码MOVDL,AH;显示MOVAH,www.hackshp.cn2INT21HMOVAH,4CH;完成,返回DOSINT21HCODEENDSENDSTART简析:本例的关键在于统计结果的显示。统计完成后,结果单元中是一个16进制数。为符合一般习惯,应在CRT上显示十进制数,因此首先用除法将十位、个位分离开,再将其分别转换为ASCII码输出。由于除数是10,故相除之后得到的商(十位数)和余数(个位数)必在0~9范围内,即未组合BCD码,所以很容易转换为ASCII码。编程时注意:DIV指令执行后结果在AX中,而DOS功能调用必须用AH为调用号,故应保护AX的内容。另外,原题已告知字串的结束符是0DH,故亦可通过检索结束符(0DH)的方式控制循环。另外请注意:数据段中定义的STR串中出现的单引号前必须用另一个单引号转义,如“’s”应为“’’s”。 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)20.数据段中有1个由小写英文字母组成的字符串,编程将各小写字母转换成对应的大写字母,并存放起来。答:一种可能的程序如下实现:DSEGSEGMENTSTR1DB‘djdwpneasmv’,‘$’COUNTEQU$-STR1-1CHARDB0AH,0DHSTR2DBCOUNTDUP(?),‘$’DSEGENDSSSEGSEGMENTPARASTACK‘SSEG’DW100DUP(?)SSEGENDSCSEGSEGMENTASSUMECS:CSEG,SS:SSEG,DS:DSEG,ES:DSEGTRANPROCFARPUSHDSSUBAX,AXPUSHAXMOVAX,DSEGMOVDS,AXMOVES,AX;有STOS指令,需用ESLEADX,STR1;显示小写字母串MOVAH,9INT21H课后答案网CLD;自动增量LEASI,STR1;SI指向小写字母串LEADI,STR2;DI指向结果存放处MOVCX,www.hackshp.cnCOUNT;转换次数NEXT:LODSB;取1个小写字母至AL中SUBAL,‘a’;转换为大写字母ADDAL,‘A’STOSB;存放LOOPNEXTMOVDX,OFFSETCHAR;换行显示大写字母串MOVAH,9INT21HRETTRANENDPCSEGENDSENDTRAN 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)9、下面的程序段中有2条无条件转移指令,计算它们的相对位移量并填在空缺的机器代码处。1000:001BF3A6REPZCMPSB1000:001D7501JNZ00201000:001FCBSAME:RET1000:002041FOUND:INCCX1000:0021890E0600MOV[0006],CX1000:0025EBF8JMP001F答:两处空缺的机器码分别为01H、0F8H。简析:JNZ指令采用相对寻址方式,本例程序中JNZ的目标地址是同一段中偏移量为0020H处,当前IP=001FH,故有:相对偏移量=目标地址-当前IP值=01H。JMP指令有多种寻址方式,本例程序中的JMP为段内直接跳转,也采用相对寻址方式。因当前IP=0027H,目标地址为001FH,因此有:相对偏移量=目标地址-当前IP值=0F8H(-8的补码)。10、答:L111、答:OFFSETBUF课后答案网99JGELOOP1[2100H]www.hackshp.cn12,13、CNT负数的个数314,07h,12h,34h,56h,9ah,bch,deh,f0h,ffh,ffh15、功能为找绝对值最大的那个数-12711字节60H16. 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)Nequ_Leasi,str1Leadi,str2Movcx,NCldRepzcmpsbJenextMoval,‘N’JmpotherNext:moval,‘Y’Other:171177、编写一个完整的源程序,将数据35、-27、-13、6、-47、52、9、-3中的正数放入以BUFFER为首址的数据缓冲区中。答:一种可能的程序如下实现:DATASEGMENTBLOCKDB35,-27,-13,6,-47,52,9,-3COUNTEQU$-BLOCKBUFFERDBCOUNTDUP(?)DATAENDSSTACKSEGMENTPARASTACK‘STACK’DW40DUP(?)STACKENDSCODESEGMENT课后答案网ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKBEGIN:MOVAX,DATAMOVDS,AXMOVES,AXwww.hackshp.cn;需用STOS串操作指令MOVCX,COUNTLEASI,BLOCK;源数据区指针LEADI,BUFFER;正数存放区指针CLD;自动增量AGAIN:LODSB;取源数据,并修改SITESTAL,80H;取符号位,不影响ALJSGO;符号位=1,是负数,不存STOSB;存正数并修改DIGO:LOOPAGAINMOVAH,4CH;退出循环,返回DOSINT21HCODEENDSENDBEGIN181188、从内存单元BUF开始的缓冲区中有7个8位无符号数,依次为13H、0D8H、92H、 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)2AH、66H、0E0H、3FH。编程找出它们的中间值并放入RES单元,且将结果以“(RES)=?”的格式显示在屏幕上。答:一种可能的程序如下实现:DATASEGMENTBUFDB13H,0D8H,92H,2AH,66H,0E0H,3FHRESDB?;中间数的存放单元STRDB‘(RES)=’STR1DB?,?,‘$’;结果字符串DATAENDSSSEGSEGMENTPARASTACK‘SSEG’DB100DUP(?)SSEGENDSCODESEGMENTASSUMECS:CODE,SS:SSEG,DS:DATA,ES:DATAMAINPROCFAR;主程序PUSHDSXORAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVES,AX;有STOS指令,需用ESMOVCX,6;外循环次数,比6次AGN:MOVSI,OFFSETBUFMOVDI,SI+1;SI、DI指向相邻2数MOVDX,6课后答案网;内循环次数,比6次AGN1:MOVAL,[SI]CMPAL,[DI];两个无符号数相比较JBUNCH;小于则转,不互换EXCH:XCHGAL,www.hackshp.cn[DI];前1单元较大,则互换MOV[SI],AL;大数放在后面UNCH:INCSI;修改指针,指向下一个数INCDIDECDXJNZAGN1;未处理完,继续内循环LOOPAGN;外循环DONE:MOVAL,[SI-3];排序完成,取中间数MOVRES,ALANDAL,0F0H;分离高半字节MOVCL,4SHRAL,CLCALLBATR;调子程序,将AL值转换为ASCII码LEADI,STR1;DI指向结果单元CLDSTOSB;存放转换结果 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)MOVAL,RESANDAL,0FH;分离并转换低半字节CALLBATRSTOSBLEADX,STR;显示整个字符串MOVAH,09HINT21HRETMAINENDP;主程序MAIN结束;子程序BATR,实现16进制数到ASCII码的转换BATRPROCFARCMPAL,10;入口参数为ALJBNUM;是数字,则转NUMADDAL,’A’-10-’0’;字母NUM:ADDAL,’0’RETBATRENDP;子程序结束CODEENDSENDMAIN简析:本例的基本思路是:先把7个无符号数按大小排序,排序完成之后取位于中间的一个数即为中间值。然后将该16进制数转换为两个对应的ASCII码,再与要求的格式字符一起输出送显即可。数据排序可以是从大到小、或从小到大排列,本参考程序完成从小到大排序,由一个双重循环结构实现。内循环完成一个数与其它数之间的一一比较课后答案网,并使每次比较所得的小数置于低地址单元。外循环实现所有数之间的两两相较。共7个数据,故内、外循环中的比较次数均为6次。编程时需注意:无符号数比较大小应使用JA、JB、JAE、JBE指令,本例完成从小到大的排列,故用JB控制转移到www.hackshp.cnUNCH;若要从大到小排列,则用JA代替JB即可。对两个循环体进行初始化时,需仔细考虑指针和循环控制寄存器的初值。在数据段的定义中,分别定义STR、STR1两个变量名字,是为了便于在STR1处存放转换结果;显示时使DX直接指向STR,以STR1末尾的“$”为结束符。中间值找出之后,应把高、低半字节相分离,并分别转换为各所对应的ASCII码。“微机系统原理与接口技术”第五章习题解答(部分)12.Z80CPU中用2片6116(2048×8)组成4KB的RAM。用CPU的地址线A13和A14分别作2片6116的片选控制(线选法),各片6116的地址范围为多少?(Z80CPU的地址总线宽度为16位。)解:6116芯片上有11根地址线(字选线为A10~A0),且6116片选为低电平有效。根据题意,系统中有4根地址线未使用(可为任意值X),所以每片6116都占有16组地址范围,每组为2K个地址。 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)①设用A13选择第一片6116,则A13=0。地址A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0信号第一片XX0XX00000000000首地址第一片XX0XX11111111111末地址0000H~07FFH(A15=A14=A12=A11=0);0800H~0FFFH(A15=A14=A12=0,A11=1);1000H~17FFH(A15=A14=A11=0,A12=1);1800H~1FFFH(A15=A14=0,A12=A11=1);4000H~47FFH(A15=A12=A11=0,A14=1);4800H~4FFFH(A15=A12=0,A14=A11=1);5000H~57FFH(A15=A11=0,A14=A12=1);5800H~5FFFH(A15=0,A14=A12=A11=1);8000H~87FFH(A15=1,A14=A12=A11=0);8800H~8FFFH(A15=A11=1,A14=A12=0);9000H~97FFH(A15=A12=1,A14=A11=0);9800H~9FFFH(A15=A12=A11=1,A14=0);0C000H~0C7FFH(A15=A14=1,A12=A11=0);0C800H~0CFFFH(A15=A14=A11=1,A12=0);0D000H~0D7FFH(A15=A14=A12=1,A11=0);0D800H~0DFFFH(A15=A14=A12=A11=1);②设用A14选择第二片6116,则A14=0。地址A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0信号第二片X0XXX00000000000首地址第二片X0XXX11111111111末地址0000H~07FFH(A15=A13=A课后答案网12=A11=0);0800H~0FFFH(A15=A13=A12=0,A11=1);1000H~17FFH(A15=A13=A11=0,A12=1);1800H~1FFFH(A15=A13=0,A12=A11=1);2000H~27FFH(A15=A12=A11=0,A13=1);2800H~2FFFH(A15=A12=0,A13=A11=1);3000H~37FFH(A15=A11=0,A13=A12=1);3800H~3FFFH(A15=0,A13=A12=A11=1);8000H~87FFH(A15=1,A13=A12=A11=0);8800H~8FFFH(A15=A11=1,A13=A12=0);9000H~97FFH(A15=A12=www.hackshp.cn1,A13=A11=0);9800H~9FFFH(A15=A12=A11=1,A13=0);0A000H~0A7FFH(A15=A13=1,A12=A11=0);0A800H~0AFFFH(A15=A13=A11=1,A12=0);0B000H~0B7FFH(A15=A13=A12=1,A11=0);0B800H~0BFFFH(A15=A13=A12=A11=1);显然,每片6116都占用了多段、不连续的地址。且两片6116的地址有重合的部分,为避免总线冲突,系统必须保证A14和A13不能同时为0。13.上题中仅用A13经译码器完成2片6116的片选控制(部分译码法),各片6116的地址范围为多少?每个存储单元的重叠地址为多少个?解:同12题,每片6116都占有16组地址范围,每组为2K个地址。设A13=0选中第一片6116,A13=1选中第二片6116,则有:①A13直接接至6116的片选端。答案同12题的①。地址A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0信号第一片XX0XX00000000000首地址 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)第一片XX0XX11111111111末地址0000H~07FFH(A15=A14=A12=A11=0);0800H~0FFFH(A15=A14=A12=0,A11=1);1000H~17FFH(A15=A14=A11=0,A12=1);1800H~1FFFH(A15=A14=0,A12=A11=1);4000H~47FFH(A15=A12=A11=0,A14=1);4800H~4FFFH(A15=A12=0,A14=A11=1);5000H~57FFH(A15=A11=0,A14=A12=1);5800H~5FFFH(A15=0,A14=A12=A11=1);8000H~87FFH(A15=1,A14=A12=A11=0);8800H~8FFFH(A15=A11=1,A14=A12=0);9000H~97FFH(A15=A12=1,A14=A11=0);9800H~9FFFH(A15=A12=A11=1,A14=0);0C000H~0C7FFH(A15=A14=1,A12=A11=0);0C800H~0CFFFH(A15=A14=A11=1,A12=0);0D000H~0D7FFH(A15=A14=A12=1,A11=0);0D800H~0DFFFH(A15=A14=A12=A11=1);②A13反向后接至6116的片选端。地址A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0信号第二片XX1XX00000000000首地址第二片XX1XX11111111111末地址2000H~27FFH(A15=A14=A12=A11=0);2800H~2FFFH(A15=A14=A12=0,A11=1);3000H~37FFH(A15=A14=A11=0,A12=1);3800H~3FFFH(A15=A14=0,A12=A11=1);6000H~67FFH(A15=A12=A11=0,A14=1);6800H~6FFFH(A15=A12=0,A14=A11=1);7000H~77FFH(A15=A11=0,A14=A12=1);7800H~7FFFH(A15=0,A14=A12=A11=1);0A000H~0A7FFH(A15=1,A14=A12=A11=0);0A800H~0AFFFH(A15=A11=1,A14=A12=0);0B000H~0B7FFH(A15=A12=课后答案网1,A14=A11=0);0B800H~0BFFFH(A15=A12=A11=1,A14=0);0E000H~0E7FFH(A15=A14=1,A12=A11=0);0E800H~0EFFFH(A15=A14=A11=1,A12=0);0F000H~0F7FFH(A15=A14=A12=1,A11=0);0F800H~0FFFFH(A15=A14=A12=A11=1);同12题,每片6116都占用了多段、不连续的地址。但两片6116的地址没有重合,不会出现总线冲突。www.hackshp.cn15.试为某8位微机系统设计一个具有8KBROM和40KBRAM的存储器。要求ROM用EPROM芯片2732组成,从0000H地址开始;RAM用SRAM芯片6264组成,从4000H地址开始。解:查阅资料可知,2732容量为4K×8(字选线12根),6264容量为8K×8(字选线13根),因此本系统中所需芯片数目及各芯片地址范围应如下表所示:A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1共需2片第一片0000H~0000000000000002732构成系地址范围0FFFH000011111111111统ROM第二片1000H~000100000000000红色为片选地址范围1FFFFH000111111111111共需5片第一片4000H~0100000000000006264构成系地址范围5FFFH010111111111111 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)统RAM第二片6000H~011000000000000红色为片选地址范围7FFFFH011111111111111第三片8000H~100000000000000地址范围9FFFFH100111111111111第四片0A000H~101000000000000地址范围0BFFFFH101111111111111第五片0C000H~110000000000000地址范围0DFFFFH110111111111111硬件连线方式之一如下图所示:CS386EN……A15译C2A14码……B1未用A13器A0A12A0-A11ABCSABCSA0-A12ABCSABCS273222732732273222732732626466264264626466264264……RD12RDRD1RD5WRWRWRWRWRWRD0-7D0-7D0-7D0-7D0-D7课后答案网题5-15图说明:①8位微机系统地址线一般为16位。采用全译码方式时,系统的A0~A12直接与6264的13根地址线相连,系统的A0~A11直接与2732的12根地址线相连。片选信号由74LS138译码器产生,系统的A15~Awww.hackshp.cn13作为译码器的输入。②各芯片的数据总线(D0~D7)直接与系统的数据总线相连。③各芯片的控制信号线(RD、WR)直接与系统的控制信号线相连。“微机系统原理与接口技术”第六章习题解答(部分)4.某微机系统有8个I/O接口芯片,每个接口芯片占用8个端口地址。若起始地址为9000H,8个接口芯片的地址连续分布,用74LS138作译码器,请画出端口译码电路图,并说明每个芯片的端口地址范围。答:分析下表所列的地址分配情况,可知系统地址信号的译码情况为(图略):�字选:A2~A0直接与接口芯片上的地址信号线连接以寻址每个接口芯片内部的8个端口;�片选:�A5~A3接3-8译码器输入端,译码器输出端分别作为8个接口芯片的片选信号;�A15~A6经门电路译码后形成3-8译码器的片选信号; 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)地址信号A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0端口11001000000000000第1个端口21001000000000001I/O接……1001000000000……口芯片端口81001000000000111端口11001000000001000第2个端口21001000000001001I/O接……1001000000001……口芯片端口81001000000001111端口11001000000010000第3个端口21001000000010001I/O接……1001000000010……口芯片端口81001000000010111……1001000000…………端口11001000000111000第8个端口21001000000111001I/O接……1001000000111……口芯片端口810010000001111118.假设一台打印机的数据输出I/O口地址为378H,状态口地址为379H,状态字节的D0位为状态位(D0=0,表示打印数据缓冲区空,CPU可以向它输出新数据;D0=1,表示数据区满)。试编写一段程序,用查询方式从内存中以BUF为首址的单元处开始,将连续1KB的数据传送给打印机,每次送1字节。答:一种可能的程序段如下实现:课后答案网……LEABX,BUF;BX指向第1个待打印的数据MOVCX,1024;一共要送1K个字节数据NEXT:MOVDX,379HINwww.hackshp.cnAL,DX;读打印机状态端口TESTAL,01HJNZNEXT;若D0位不为0,则继续查询等待MOVDX,378HMOVAL,[BX]OUTDX,AL;将BX所指的数据发送到打印机INCBX;BX指向下一个待打印的字节LOOPNEXT;CX不为0,继续送下一个字节……9.请用无条件传输方式编写一个完整的输入/输出程序,将首地址为40000H的内存单元中的1K个字数据从端口Output处输出,然后从端口Input处输入2KB数据到首地址为50000H的内存单元中(端口地址的实际值可自行给定)。答:一种可能的程序如下实现:DATA1SEGMENTAT4000HBUFFER1DW……;已存放好1K个字数据 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)DATA1ENDSDATA2SEGMENTAT5000HBUFFER2DB2048DUP(?);预留2KB单元存放读入的数据DATA2ENDSCODESEGMENTASSUMECS:CODE,DS:DATA1,ES:DATA2START:MOVAX,DATA1MOVDS,AXMOVAX,DATA2MOVES,AXLEASI,BUFFER1;SI指向准备发送的第1个数据LEADI,BUFFER2;DI指向第1个准备存放接受数据的单元CLD;地址增量方向MOVCX,1024;发送数据总个数MOVDX,OUTPUT;设OUTPUT为字输出端口地址AGAIN1:LODSW;将DS:SI所指数据取出准备发送,并修改SI值OUTDX,AXLOOPAGAIN1MOVCX,2048;接收数据总个数MOVDX,INPUT;设INPUT为字输入端口地址AGAIN2:INAX,DLSTOSB;将输入数据存在ES:DI所指单元,并修改DI值LOOPAGAIN2MOVAH,4CH;返回INT课后答案网21HCODEENDSENDSTARTwww.hackshp.cn“微机系统原理与接口技术”第七章习题解答(部分)1.8086系统采用向量式中断,试简述8086系统中中断类型码、中断向量、中断向量表的含义及其之间的关系。答:中断类型码:用于区分不同的中断源,即系统中每个中断源都应该对应一个唯一的类型码。8086系统中的中断类型码以8位无符号数(00H~0FFH)表示,一共可以区分256个不同的中断源。中断向量:中断服务程序(ISR)的入口地址,也就是ISR的第一条指令在存储器中的位置。8086系统中的中断向量由两个字(4个字节)组成,低位字表示入口的偏移地址,高位字表示入口的段基址。显然,每个中断类型码对应一个中断向量,则8086系统中共应有256个中断向量。中断向量表:中断向量的存放地。8086系统将最低的1KB(00000H~003FFH)RAM空间用于存放这256个中断向量。 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)三者之间的关系是:利用中断类型码n可以很容易地从中断向量表中找到该中断源所对应的中断向量,即:中断向量存放的起始地址m=n×4,从中断向量表的m地址单元开始连续取出的四个字节就是n号中断的ISR入口地址。8086CPU正是用这种方法完成中断索引的。2.判断下列说法是否正确,如有错,指出错误原因并改正:(1)优先级别高的中断总是先响应、先处理。(2)8086系统中,中断向量表存放在ROM地址最高端。(3)PC系统中的主机总是通过中断方式获得从键盘输入的信息。(4)80486系统和8086系统一样,将中断分为可屏蔽中断和不可屏蔽中断两种。(5)IBMPC/XT中,RAM奇偶校验错误会引起类型码为2的NMI中断。答:(1)可以算对。不过这个题说法本身就不太明确,应该是:“一个系统中有多个中断源同时提出中断请求时,优先级别高的中断总是先响应、先处理。”(2)错。应该是:“8086系统中,中断向量表存放在RAM地址最低端。”(3)对。(4)错。应该是:“8086系统将中断分为内(软)中断和外(硬)中断两大类,而80486系统将广义中断分为异常和狭义中断两大类。”(5)对。4.8086系统的RAM存储单元中,从0000H:002CH开始依次存放23H、0FFH、00H和0F0H4个字节的中断向量,该向量对应的中断类型码是多少?而中断类型码为14H的中断向量应存放在哪些存储单元中?答:中断向量0F000:0FF23存放在0002CH双字单元中,说明其对应的中断类型码N=2CH÷4=0BH。课后答案网14H号中断向量的起始存放地址为4×14H=00050H,即该中断向量的偏移量部分存放在0050H和0051H单元中,段基址部分存放在0052H和0053H单元中。5.以下是PC机为某外设中断源装载中断服务子程序的代码www.hackshp.cn,请问该外中断的类型码是多少?程序段为它设置的中断向量是什么?PUSHESMOVAX,0MOVES,AXCLDMOVDI,24HMOVAX,0200HSTOSWMOVAX,1000HSTOSWPOPES答:从程序可看出,该外中断的中断向量存放在ES:DI所指单元即0000:0024H单元,所以该外中断的类型码N=00024H÷4=9;该中断向量为1000H:0200H(10200H)。6.某系统中,要求8086CPU采用中断方式把一个长100字节的数据块从首址为AREA 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)的存储区传送到端口地址为37FH的接口上,每次中断只传送一个字节。设该中断的类型码为0AH,试写出完整的主程序和中断服务子程序。答:由题意可知,主程序在完成通常的初始化工作(如初始化段寄存器)之后,还需要完成中断向量的装载;而中断服务子程序则负责完成数据的发送。DATASEGMENTAREADB100DUP(?);待传送的数据块CNTDB0;已传送数据的个数OLDOFFDW?;旧中断向量的偏移地址部分OLDSEGDW?;旧中断向量的段基址部分DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTARTPROCFAR;主程序;-------常规初始化-------------------------------------------------PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AX;--------取0AH号中断的原中断向量并保存-----------------CLIMOVAL,0AHMOVAH,35HINT课后答案网21HMOVOLDSEG,ESMOVOLDOFF,BX;--------设置新中断向量--------------------------------------------PUSHwww.hackshp.cnDSMOVAX,SEGRECIVE;取当前中断服务程序入口的段基址MOVDS,AXMOVDX,OFFSETRECIVE;取当前中断服务程序入口的偏移量MOVAL,0AH;中断类型号为0AHMOVAH,25HINT21H;将当前中断服务程序入口地址送向量表POPDSSTI;--------等待中断传送数据----------------------------------------------WAT:CMPCNT,100JNZWAT;--------发完数据后恢复原中断向量---------------------------------MOVDX,OLDSEGMOVDS,OLDOFFMOVAL,0AH 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)MOVAH,25HINT21HRETSTARTENDPRECIVEPROCFAR;中断服务子程序PUSHAXPUSHDXPUSHSIMOVSI,OFFSETAREA;SI指向需传送数据的首址ADDSI,CNTMOVAL,[SI]MOVDX,37FHOUTDX,ALINCCNTPOPSIPOPDXPOPAXIRETRECIVEENDPCODEENDSENDMAIN课后答案网“微机系统原理与接口技术”第八章习题解答(部分)1.什么叫总线和总线操作?为什么各种微型计算机系统中普遍采用总线结构?www.hackshp.cn答:总线是模块与模块之间传送信息的一组公用信号线;而模块间信息传送时与总线有关的操作统称为总线操作;模块间完成一次完整信息交换的时间称为一个总线操作周期。总线标准的建立使得各种符合标准的模块可以很方便地挂在总线上,使系统扩展和升级变得高效、简单、易行。因此微型计算机系统中普遍采用总线结构。2.微机总线有哪些种类?其数据传输的主要过程是什么?答:微机中目前普遍采用的总线标准包括系统内总线标准和系统外总线标准两类:系统内总线标准一般指微机主板插槽(系统扩展板)遵循的各种标准,如PC/XT总线标准、ISA总线标准(PC/AT总线标准)、VL总线标准(VESA具备总线标准)、PCI局部总线标准等;系统外总线标准指系统互连时遵循的各种标准,多表现为微机对外的标准接口插头,有时也称为接口标准,如EIARS-232异步串行接口标准、USB通用串行接口标准、IEEE-488通用并行接口标准等。一个总线操作周期一般分为四个阶段,即:总线请求及仲裁阶段、寻址阶段、传数阶段和结束阶段。在含有多个主控制器的微机系统中,这四个阶段都是必不可少的;而在仅含一个主控制器的单处理器系统中,则只需要寻址和传数两个阶段。 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)3.计算机系统与外部设备之间相互连接的总线称为系统外总线(通信总线);用于连接微型机系统内各插件板的总线称为系统内总线(板级总线);CPU内部连接各寄存器及运算部件之间的总线称为片内总线。4.一次总线的信息传送过程大致可以分为4个阶段,依次为总线请求及仲裁阶段、寻址阶段、传数阶段和结束阶段。8.同步总线有哪些优点和缺点?主要用在什么场合?答:同步并行总线时序是指总线上所有信号均以同步时钟为基准,所有接在总线上的设备的信息传输也严格与同步时钟同步。同步并行总线的优点是简单、易实现;缺点是无法兼容总线上各种不同响应速度的设备,因为同步时钟的速度必须以最慢的响应设备为准,这样总线上的高速设备将无法发挥其高速性能。同步并行总线一般用于总线上所有设备的响应速度相近的场合。9.通过联络信号,优点:收发双方不需要同步。缺点:电路比较复杂,10.半同步通过同步时钟,实现,并且适当插入等待周期以满足异步访问的要求。没有等待周期的访问即是零等待。14.下列陈述中不正确的是()。A.总线结构传送方式可以提高数据的传输速度B.与独立请求方式相比,菊花链式查询方式对电路的故障更敏感C.PCI总线采用同步时序协议和集中式仲裁策略D.总线的带宽即总线本身所能达到的最高传输速率答:A。课后答案网15.下列各项中,不是同步总线协定特点的是()。A.不需要应答信号B.各部件的存取时间比较接近C.总线长度较短www.hackshp.cnD.总线周期长度可变答:D。17.什么叫总线周期、时钟周期、指令周期?它们之间一般有什么关系?答:时钟周期是系统工作的最小时间单位,它由计算机主频决定;总线周期指总线上两个设备进行一次信息传输所需要的时间(如CPU对存储器或I/O端口进行一次读/写操作所需的时间);指令周期指CPU执行一条指令所需要的时间。三者之间的关系是:时钟周期是基本动作单位;一个总线周期通常由n个时钟周期组成;而一个指令周期中可能包含有一个或几个总线周期,也可能一个总线周期都没有,这取决于该指令的功能。18.某系统总线的一个存取周期最快为3个总线时钟周期,在一个总线周期中可以存取32位数据。若总线的时钟频率为8.33MHz,则总线的带宽为多少MB/s?答:总线的带宽=数据宽度×总线周期的最高频率=(32/8)Byte×(8.33/3)M/s=11.1MB/s 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)21.在三线菊花链总线判决系统中,如总线时钟周期为l00ns,每个主控模块的平均传输延时为30ns,试问总线上最多能连几个主控模块?答:主控模块数目=100ns/30ns+1=4。注:第一级主控模块无延时。22.如上题总线系统中实际连了12个平均传输延时为25ns的主控模块,那么总线操作频率最高能允许多少?答:最高总线操作频率=1/(25ns×11)=3.64KHz。24.总线握手的作用是什么?常见的握手协定有哪几种?它们各有什么优缺点?答:总线握手是指控制总线的主模块和其它模块之间遵照各种协定进行高速而可靠的寻址和数据传输;其作用是控制每个总线周期中数据传送的开始和结束,以实现主、从模块间的协调和配合,保证数据传输的可靠性。常见的握手协定及其特点如下所述:a)同步总线协议:系统中采用同一时钟信号作为唯一的开始和结束的控制信号。采用该协议的总线其控制简单,便于电路设计且适合高速运行;缺点是如果系统中设备的工作速度相差较远的话,该系统只能按最慢的设备决定总线周期,降低了系统的整体性能。b)异步总线协议:系统中的主从设备通过问答的方式控制工作过程的开始和结束。采用该协议的总线其传输速率可按需要调节,系统适应能力很强;缺点是由于主、从两组联络信号必须在总线上经历两个来回的传送,因此导致的传输延迟是同步总线的两倍。异步总线本质上要比同步总线速度慢、频带宽、周期长。c)半同步总线协议:综合考虑了同步、异步总线协定的优劣而产生的混合方式,它兼备同步总线的高速和异步总线的可靠性与适应性。对快速外设就好像同步总线一样,仅由时钟控制总线周期的起始;对慢速设备则像是异步总线课后答案网,利用WAIT信号改变总线周期的长度。d)周期分裂式总线协议:总线写操作仍由单个子周期一次完成,而总线读周期被分解为两个独立的传输子周期(第一个子周期由主控设备发命令和地址并加以确认,第二个子周期主控设备从总线上读数据),两个子周期之间的空闲时间(受控设备准备数据的时间)可以出让给系统中其他主控器使用www.hackshp.cn。当系统中有多个主控器时,采用该协议可以充分发挥多主控器并行运行的优势,既能适应慢速外设,又能保持快速传输;缺点是增加了主、从模块的复杂性。31.在ISA总线上进行16位数据传送需要哪些控制信号?答:除地址信号(SA0~SA19、LA17~LA23)和数据信号(SD0~SD15)外可能还需要以下控制信号:�与存储器操作有关的控制信号:(/SMEMR)/(/SMEMW)或(/MEMR)/(/MEMW)、/MEMCS16�与I/O操作有关的控制信号:(/IOR)/(/IOW)、/IOCS16�地址锁存信号BALE、数据高字节有效信号SBHE、用于插入等待周期的I/OCHRDY,以及DMA地址允许信号。在这些控制信号中,/MEMCS16、/IOCS16以及SBHE信号是8位数据传送时不需要的。 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)“微机系统原理与接口技术”第九章习题解答(部分)1.什么是并行接口和串行接口?它们各有什么作用?答:并行接口是指接口与外设之间按字长传送数据的接口,即4位、8位或16位二进制位同时传送;而串行接口是指接口与外设之间依时间先后逐位传送数据的接口,即一个时刻只传送一个二进制位。并行接口传送速度较快,但在远距离传送数据时成本高,损耗大,且平行数据线之间干扰大,所以并行接口一般适用于近距离的高速传送,而串行接口则适用于远距离传送。2.试画出8255A与8086CPU连接图,并说明8255A的A0、A1地址线与8086CPU的A1、A2地址线连接的原因。答:8255A与8086CPU的连线图如下图所示:D7数据缓冲D7-0-0A1DENA0A28DT/RA182AB/DBA19-1地址锁存A19-3地址译码CS05ALE85M/IO6AWRWRRD课后答案网RD题9-2图8086系统有16根数据线,而8255只有8根数据线,为了软件读写方便,一般将8255的8条数据线与8086的低8位数据线相连。8086在进行数据传送时总是将总线低8位对应偶地址端口,因此8086CPU要求8255的4个端口地址必须为偶地址,即8086在寻址8255时A0脚必须为低。实际使用时www.hackshp.cn,我们总是将8255的A0、A1脚分别接8086的A1、A2脚,而将8086的A0脚空出不接,并使8086访问8255时总是使用偶地址。4.简述8255A工作在方式1时,A组端口和B组端口工作在不同状态(输入或输出)时,C端口各位的作用。答:8255A的A、B口工作在方式1时,C端口各位的使用情况如下表所示:端口CA、B口均输入A口输入,B口输出A口输出,B口输入A、B口均输出PC7I/OI/OOBFAOBFAPC6I/OI/OACKA/INTEA*ACKA/INTEA*PC5IBFAIBFAI/OI/OPC4STBA/INTEA*STBA/INTEA*I/OI/OPC3INTRAINTRAINTRAINTRAPC2STBB/INTEB*ACKB/INTEB*STBB/INTEB*ACKB/INTEB*PC1IBFBOBFBIBFBOBFB 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)PC0INTRBINTRBINTRBINTRB注:带*的各中断允许信号由C口内部置位/复位操作设置,非引脚电平。5.用8255A控制12位A/D转换器,电路连接如下图所示。设B口工作于方式1输入,C口上半部输入,A口工作于方式0输入。试编写8255A的初始化程序段和中断服务程序(注:CPU采用中断方式从8255A中读取转换后的数据)。题9-5图答:设8255的A、B、C及控制端口的地址分别为PORTA、POATB、PORTC和PCON,则一种可能的程序段实现如下:主程序:;初始化8255A……MOVAL,10011110B;设置8255A的工作方式控制字OUTPCON,ALMOVAL,00000101B;设置C口置位/复位控制字,使INTEA(PC2)为OUTPCON,课后答案网AL;高电平,允许B口中断MOVAL,00000010B;设置C口置位/复位控制字,使PC1(IBFB)输出OUTPCON,AL;低电平,启动第一次A/D转换……中断服务程序:www.hackshp.cn;取数,并自动启动下一次A/D转换……MOVAL,00000011B;PC1(IBFB)输出高电平,停止A/D转换OUTPCON,ALINAL,PORTC;先取高4位转换值MOVAH,ALMOVCL,4SHRAH,CL;将高4位转换值放到AH的低端INAL,PORTB;取低8位转换值放到AL中MOVAL,00000010B;PC1(IBFB)输出低电平,再次启动A/D转换OUTPCON,AL……IRET6.用8255A作为CPU与打印机接口,8255的A口工作于方式0,输出;C口工作于方式0。8255A与打印机及CPU的连线如下图所示。试编写一程序,用查询方式将100个数据送打 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)印机打印(8255A的端口地址及100个数据的存放地址自行设定)。题9-6图答:设8255的A、B、C及控制端口的地址分别为PORTA、POATB、PORTC和PCON,而需打印的数据放在数据段中以DATA1开头的区域,则一种可能的程序段实现如下:……MOVAL,10000001B;设置8255A的工作方式控制字OUTPCON,ALMOVCX,100;设置需打印数据的总个数以控制循环次数LEASI,DATA1NEXT:MOVAL,[SI];从数据段取数据并通过A口发到打印机OUTPORTA,ALMOVAL,00001100B;设置C口置位/复位控制字,使PC6为低电平,OUTPCON,AL;通知打印机锁存数据并打印INCSI;为取下个数据作准备DECCXJZERROR;判断是否传完100个数据,如是,转后续处理AGAIN:INAL,PORTC;如未传完100个数据,读状态端口TESTAL,课后答案网01H;查询PC0(BUSY)是否为高电平JNZAGAIN;如是,继续查询,直到BUSY变低JMPNEXT;BUSY为低电平,则转NEXT发送下一个数据ERROR:……10.已知8250的主参考时钟频率为www.hackshp.cn1.8432MHz,其RCLK与BAUDOUT相连,端口地址为0330H起,要求其工作在半双工通信,每帧7位数据、偶校验、1位停止位,波特率为9600波特,编写初始化程序。答:由一种可能的程序段实现如下:……MOVDX,333H;令传输线控制器寄存器Bit7=1以设置波特率MOVAL,80HOUTDX,ALMOVDX,330H;波特率=9600,设置除数寄存器=000CHMOVAL,0CHOUTDX,ALMOVDX,331HMOVAL,0HOUTDX,ALMOVDX,333H;设置工作方式:偶校验,7位数据位,一位停止位MOVAL,00011010B 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)OUTDX,ALMOVDX,334H;设置Modem控制器:允许中断,发DTR和RTSMOVAL,0BHOUTDX,ALMOVDX,331H;开放接收数据就绪、接收字符错和发送缓冲器空中断MOVAL,07HOUTDX,ALSTI……12.试编写两台IBMPC机之间的通信程序。条件同6题,连接如下图。题9-12图答:从连接图中可以看出,两台PC机之间没有任何联络信号的连接,题目又只给出数据传送的格式,为了使两台PC机能正确通信,应事先约定其他一些通信规则(注意,这里的规则不一定遵循标准协议,只是具体应用时根据通信双方的特殊情况定义的简单规则,通信双方都遵守就行了)。假设系统不停地发送已准备好的一批数据,并要求发送的每一个数据都必须被正确接收,即:发送方必须在得知上一个数据已正确达到后,才发送下一个数据;若接收出错,接收方将通知发送方重发;发送方在发完所有数据后通知接收方结束这次通信课后答案网。因为没有现成的硬件挂钩信号,故采用软件挂钩:首先找到或构造两个不会被解释为数据的特殊字符做为挂钩用的联络字符,如‘,’表示已准备好接收下一个字符,‘;’表示接收出错,而‘。’表示发送结束。发送方在发出一个数据后根据接收方返回的信息确定下一步处理,接收方在接到数据后先判断是否结束此次通信。www.hackshp.cn程序中采用BIOS中断调用对串口进行操作,需发送的数据事先准备好存放在数据段的以S_DATA为起始地址的N个单元中,接收到的数据则存放在附加段的以R_DATA为起始地址的N个单元中。一种可能的程序实现如下:发送机程序:……MOVAL,8AH;初始化串行通信的数据格式MOVAH,0INT14HLEASI,S_DATA;使DX:SI指向待传送的第一个数据MOVCX,N+1;N为一共要传送的数据个数(设小于65535个)CLD;按地址增量方向取数据TRANS:DECCXCMPCX,0;检查数据是否发完?JZEXT;已发完,退出LODSB;取准备发送的数据到AL中,同时SI加1 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)MOVAH,1;将AL中数据送出INT14HTEST:MOVAH,3;读串口状态到AL中INT14HTESTAL,01H;检查是否收到接收方回送的信号?JZTESTMOVAH,2;取回送的信号到AL中INT14HCMPAL,",";判断回送信号的含义JZTRANS;收到‘,’表示接收方已收到正确数据,发下一个CMPAL,";"JNZERR;发送方收到回送的不明信号,转出错处理DECSI;收到‘;’表示接收方出错,发送方重发刚才的数据INCCXJMPTRANSERR:……;出错处理略EXT:MOVAL,".";通知接收方数据已发送完毕MOVAH,1INT14H……接收机程序:……MOVAL,8AH;初始化串行通信的数据格式MOVAH,0INT14HLEADI,课后答案网R_DATA;ES:DI指向数据存放区首址CLD;按地址增量方向取数据TEST:MOVAH,3;读串口状态INT14HTESTAL,www.hackshp.cn01H;检查是否收到数据?JZTESTANDAL,0EH;检查是否正确接收?JNZERR;接收出错,回送‘;’MOVAH,2;将接收到的数据取到AL中INT14HCMPAL,".";检查是否结束通信?JZEXTSTOSB;将接收到的数据存到指定区域,同时DI加1MOVAL,",";通知发送方接收正确MOVAH,1INT14HJMPTEST;准备接收下一个数据ERR:MOVAL,";";通知发送方出错,等待重发MOVAH,1INT14H 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)JMPTESTEXT:……;结束此次通信14.比较软件、硬件和可编程定时/计数器用于定时的特点。答:软件定时一般是根据要求设计一个时延子程序,其优点是节省硬件,成本低;缺点是CPU利用率低,且定时间隔不准确;硬件定时会增加相应的硬件设备(如定时/计数器等),使硬件成本增加,但可以不占用CPU,并且定时准确,不过一旦硬件设计制作好后,不能更改定时间隔;用可编程定时/计数器实现定时可以兼顾前面两者的优点,即定时信号的产生由专门的硬件电路产生,定时准确且CPU利用率高,另外在需要的时候,可以由CPU程控改变定时间隔而不需要改动硬件电路。17.8253每个通道的最大定时值是多少?如果欲使8253用于定时值超过其最大值时,应该如何应用?答:8253每个通道的最大定时值=最大计数值×计数脉冲周期T=216*T。若需要的定时值超过一个通道的最大CLK0周期为T的计数脉冲定时值,有两种方法可以使用:8OUT0GATE01可将多个通道(或多片8253的通道)串接(级联)2CLK1起来使用,即将上一级计数通道的输出端OUT接至5OUT1GATE1下一级计数通道时钟输入端CLK,以此扩展计数器3CLK2的位数。如按右图所示接法,计数最长位数为三个计OUT2定时信号输GATE2数器长度的和,则最大定时值=248*T。题9-17图2同①中思路,只是如果没有多余的硬件计数通道可以使用,则可用软件设置下一级计数,如PC机中系统时钟的处理方法。课后答案网19.利用PC机内的8253作为定时器,用8255的一个输出口控制8个指示灯,编一个程序使8个指示灯依次点亮,切换时间为每秒1次。+5V+www.hackshp.cn5V8IRGATE0DBPA02S8PA15CLK01.19MAB2A··3OUT05··总··CB5IRQ0线PA7题9-19图答:根据题目要求,只能利用PC机内8253的计数器0,计数时钟频率为1.19MHz,输出端OUT0接8259的IRQ0端。PC机中8253的端口地址为40H—43H,8259的端口地址为20H和21H,IRQ0对应类型号为8的中断。假设并口8255A的A、B、C及控制端口的地址分别为PORTA、POATB、PORTC和PCON,现用8255的A口控制指示灯的显示,系统如下图所示。微机正常工作时,每大约55ms产生一次IRQ0中断,本题指示灯的显示切换时间并不要求非常准确,因此不必再重新设置8253,直接利用55ms的定时中断即可。一种可能的程序段如下实现: 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)主程序:;重新设置IRQ0的中断向量,并初始化8255……CLI;关中断MOVAX,0;将原来的中断向量放入堆栈保护MOVDS,AXMOVSI,0020H;DS:SI指向8号中断的向量存放地址LODSWMOVBX,AX;取原来中断向量中的偏移量存入BXLODSW;取原来中断向量中的段基址存入AXPUSHAXPUSHBXMOVAX,DATA;建立本程序数据段MOVDS,AXMOVAX,0;重新设置用户中断服务程序的入口地址MOVES,AXMOVDI,0020H;ES:DI指向8号中断的向量存放地址MOVAX,OFFSETLED_FLASHSTOSWMOVAX,SEGLED_FLASHSTOSWMOVAL,80H;初始化8255,使A口工作于方式0输出OUTPCON,ALMOVAL,0FEH;(低电平)点亮第一个LED,以后每隔1s点亮下一个MOVDRVNUM,AL;初始化驱动码单元DRVNUM(定义在数据段中)OUTPORTA,课后答案网ALMOVAL,0;初始化软件计数器COUNT(定义在数据段中)MOVCOUNT,ALSTI;开中断……www.hackshp.cn中断服务子程序:;每55ms产生一次,每计到1s后点亮LEDLED_FLASH:PUSHAXINCCOUNTMOVAL,COUNTCMPAL,18JBEXT;COUNT<18说明还未计到1s,退出子程序MOVAL,0MOVCOUNT,AL;已计满1s,软件计数器清0,并点亮一个LEDMOVAL,DRVNUMROLAL,1AAA1:MOVDRVNUM,AL;保存驱动码OUTPORTA,AL;将驱动码从8255的A口送出EXT:POPAXIRET 课后答案网(http://www.khdaw.comhhttp://www.khdaw.comttp://www.khdaw.com)34.根据如图9-87(c)所示接口电路原理,编写产生梯形波和正弦波的程序。答:汇编语言的计算功能较弱,因此本题所需的正弦波及梯形波的幅度数据宜事先利用其它方式得到(如利用C语言编程获得)。这里利用查表方式获取波形数据输出即可:SINE_TABDB80H,81H,83H,90H,…0FFH,0FBH,…80H,78H,…00H,03H,…80H;正弦波幅度数据T_TABDB00H,03H,08H,10H,…,50DUP(80H),75H,70H,…00H;梯形波幅度数据MOVDX,300HMOVBX,SINE_TAB;如产生梯形波,则应为MOVBX,T_TABLP:MOVAL,[BX]OUTDX,ALINCBXCALLDEALYJMPLP;无限循环可产生连续不断的波形课后答案网www.hackshp.cn'