您好,欢迎访问三七文档
4.本章作业:(带答案)1、试分别说明下列指令中源操作数和目的操作数采用的寻址方式:答案:目的操作数源操作数(1)MOVAX,0FFFFH寄存器立即(2)MOVES,AX寄存器寄存器(3)XORCL,[100H]寄存器直接(4)ADD[SI],DX寄存器间寄存器(5)MOVES:[2000H],CL直接寄存器(6)SUB[BX+SI],1基+变立即(7)ADCAX,[BX+SI+10H]寄存器相对基+变(8)PUSHDS隐含寄存器(9)CLD隐含(10)CMP[BP+DI],CL基+变寄存器2、若(BX)=1123H,(SI)=1968H,位移量=0313H,(DS)=1971H,试确定由这些寄存器和下列寻址方式产生的有效地址和物理地址:答案:EA物址(1)直接寻址;0313H19A23H(2)用BX的寄存器间接寻址;1123H1A833H(3)用BX的寄存器相对寻址;1436H1AB46H(4)用BX和SI的基址变址寻址;2A8BH1C19BH(5)用BX和SI的相对基址加变址寻址。2D9EH1C4AEH3、连续执行以下指令,并在空格中填写执行指令的结果。答案:MOVAX,2060HAL=60HAH=20HCF=MOVDS,AXDS=2060HAH=20HCF=ADDAL,AHAL=80HAH=20HCF=0INCAXAL=81HAH=20HCF=0MOVDX,512DL=00HDH=02HCF=0SUBAX,DXAL=81HAH=1EHCF=04、编写程序实现下述功能:答案:(1)将BX寄存器的低8位清零,其余位不变。ANDBX,0FF00H(2)将DL寄存器的最高位置1,其余位不变。ORDL,80H(3)将CL寄存器的高4位保持不变,低4位取反。XORCL,0FH(4)测试CX中的最低位,当最低位为0时将AL置1,否则AL置0。答案:TESTCX,01HJZL1MOVAL,0HLTL1:MOVAL,1HLT(5)测试SI,如果SI为奇数将AL置1,否则AL置0。答案:TESTSI,01HJNZL1MOVAL,0HLTL1:MOVAL,1HLT本章典型例题分析:【例1】若从0200H单元开始有100个数,编一个程序检查这些数,正数保持不变,负数都取补后送回。DATASEGMENTORG0200HSTRINGDB4DUP(-55,5DUP(6,-10,-8,9),2DUP(-4,0))DATAENDSSTACKSEGMENTPARASTACK'STACK'DB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTARTPROCFARBEGIN:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVES,AXMOVCX,100LEASI,STRINGAGAIN:MOVAL,[SI]ANDAL,ALJNSOVER;AL>0,跳至OVERNEGAL;AL<0,对AL求补OVER:MOV[SI],ALINCSILOOPAGAININT3RETSTARTENDPCODEENDSENDBEG1.本章作业(带答案):1、计算下列程序分别执行后AX寄存器的内容。(1)MOVAX,0MOVBX,3456HTESTBX,1000HJZNEXT答案:INCAXNEXT:HLT(AX)=1(2)MOVAX,0XORBX,BXAGAIN:INCBXADDAX,BXCMPBX,5JBAGAINHLT(AX)=(((((0+1)+2)+3)+4)+5)=15(3)MOVAL,0FFHCBWINCAXINCAXXCHGAH,ALSHRAH,1RCRAL,1HLT(AX)=0080H(4)MOVAX,0MOVBX,1234HMOVCX,16AGAIN:SHLBX,1JNCNEXTINCAXNEXT:LOOPAGAINHLT检测1的个数(AX)=52、若在自2000H单元开始有一个1000个字节的数据块,要把它传送到自2200H开始的存储区中去,用以下三中方法,分别编制程序:(1)不用串操作指令。(2)用单个传送的串操作数据传送指令。(3)用带重复前缀的串操作数据传送指令。程序如下:DATASEGMENTORG2000HN1DBn1,n2,…n1000N2EQU2000H+1000–1CONEQU1000DATAENDSSTACKSEGMENTSTACK‘STACK’DW100DUP(?)STACKENDSCODESEGMENTORG1000HASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKMAINPROCSTART:MOVAX,DATAMOVDS,AXMOVES,AXLEASI,N1+1000–1;(2);(3)MOVDI,N2MOVCX,CON;STDL1:MOVAL,[SI];MOVSB;REPMOVSBMOV[DI],ALDECSIDECDILOOPL1;LOOPL1MOVAH,4CHINT21HMAINENDPCODEENDSENDSTART3、若在存储器中有数a、b、c、d(它们连续存放),编写一个程序实现:((a*10+b)*10+c)*10+d(假设和小于65535)程序如下:DATASEGMENTBCMDWa,b,c,dDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATABCD1PROCFARSTART:MOVAX,DATAMOVDS,AXLEASI,BCMMOVCX,3MOVAX,[SI]L1:INCSISHLAX,1;(AX)←(AX)×2MOVBX,AX;(BX)←(AX)×2SHLAX,1;(AX)←(AX)×4SHLAX,1;(AX)←(AX)×8ADDAX,BX;(AX)←(AX)×10ADDAX,[SI]LOOPL1INCSIMOV[SI],AXMOVAH,4CHINT21HBCD1ENDPCODEENDSENDSTART4、已知数组A包含10个互不相等的整数,数组B包含15个互不相等的整数。试编写一程序,将既在A中出现又在B中出现的偶数存放在数组C中。程序如下:DATASEGMENTORG0500HDATAADWA1,A2,…A10DATABDWB1,B2,…B15COUNTAEQU10COUNTBEQU15DATACDW10DUP(?)DATAENDSSTACKSEGMENTSTACK'STACK'DB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTARTPROCFARBEGIN:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVES,AXMOVDS,AXLEABX,DATAC;(BX)=数组C首址CLDLEASI,DATAA;(SI)=数组A首址MOVDX,COUNTA;(DX)=数组A元素个数LP1:LODSW;取数组A元素到AXLEADI,DATAB;(DI)=数组B首址MOVCX,COUNTB;(CX)=数组B元素个数REPNESCASW;(AX)=数组B元素?不同重复JNZNEXT;B中无此A元素转NEXTTESTAX,01HJNZNEXTMOV[BX],AX;有A元素且是偶数存入C中INCBXINCBXNEXT:DECDXJNZLP1INT3STARTENDPCODEENDSENDBEGIN5、若自STRING开始有一个字符串(以‘$’号作为字符串的结束标志),请编程查找此字符串中有无字符‘#’,有多少个‘#’,并将个数存放在NUMBER字单元中,且把每一个‘#’字符所存放的偏移地址放到自POINTER开始的连续存储字单元中。程序如下:DATASEGMENTORG0100HSTRINGDB'593#6707#84BK47#68H#8K8#497$'NUMBERDB?POINTERDW50DUP(?)DATAENDSSTACKSEGMENTPARASTACK'STACK'DB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTARTPROCFARBEGIN:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVES,AXMOVDS,AXLEASI,STRINGLEADI,POINTERXORBL,BL;BL清0AGAIN:MOVAL,[SI]CMPAL,’$’;与’$’比较JZSTOPCMPAL,’#’JNZNEXTMOVDX,[SI]MOV[DI],DXINCDIINCDIINCBLNEXT:INCSIJMPAGAINSTOP:LEADI,NUMBERMOV[DI],BLINT3STARTENDPCODEENDSENDBEGIN〖例3〗为某8位微机(地址总线为16位)设计一个12KB容量的存储器,要求EPROM区为8KB,从0000H开始,采用2716芯片(2K×8);RAM区为4KB,从2000H开始,采用2114(1K×4)芯片。分析:根据要求可先列出存储器地址分配表如表7-4所示。当然,也可画出如图7-23所示相应的存储单元地址分配图。表7-4示例地址分配表容量分配芯片型号地址范围容量分配芯片型号地址范围2KB27160000~07FFH1KB21142000~23FFH2KB27160800~0FFFH1KB21142400~27FFH2KB27161000~17FFH1KB21142800~2BFFH2KB27161800~1FFFH1KB21142C00~2FFFH需要指出的是,在微机应用系统中,存储器或I/O接口译码电路的设计方案不是唯一的,例如,本例的译码电路既可以采取ROM、RAM分别译码,即由译码器直接输出8个存储器芯片所需的片选信号,也可以采取二次译码的方式。所谓二次译码方式,即先按“片”地址为2KB进行译码,得到一些映射地址空间为2KB的片选信号;再利用其中的某一条或某几条输出与一条地址线进行二次译码,得到映射地址空间为1KB的片选信号。这种方法可推广到多种不同容量的存储芯片一起使用的场合,这时可通过多层译码来相继获得容量从大到小的不同芯片的片选信号。对于本例,由于整个存储器ROM和RAM共为12KB,按2KB为一片共需6根“片选”信号线,故可选74LS138作为译码器。这样,根据前面的地址分配表或分配图可画出如图7-24所示的地址位图。图中第一次译码为2KBROM芯片提供片选信号,第二次译码为1KBRAM芯片提供片选信号。根据图7-24的地址位图,可画出二次译码方式所对应的外部译码电路如图7-25所示,进一步可画出如图7-26所示的存储器与系统总线接口的连接图。图7-24地址位图图7-25芯片片选译码电路图7-26存储器接口连接图4.本章作业:(带答案)1.若用4K×1位的RAM芯片组成16K×8位的存储器,需要多少芯片(32片)?A19~A0地址线中哪些参与片内寻址(A0~A13)?哪些参与作芯片组的片选择信号(A14~A19)?2.下列RAM各需要多少条地址线进行寻址?多少条数据I/O线?地址线数据线地址线数据线(1)512×4;94(5)4K×1;121(2)1K×4;1046)16K×4;144(3)1K×8;108(7)64K×1;161(4)2K×1;111(8)256K×4;1843.使用下列RAM芯片,组成所需的存储容量,各需多少RAM芯片?各需多少RAM芯片组?共需多少寻址线?每块片子需多少寻址线?片数组数总线数片内线(1)512×4的芯片,组成8K×8的存储容量;3216139(2)1024×1的芯片,组成32K×8的存储容量;256321510(3)1024×4的芯片,组成4K×8的存储容量;841210(4)4K×1的芯片,组成64K×8的存储容量;1281616124.若用2114芯片组成2KBRAM,地址范围为3000H~37FFH,问地址线应如何连接?(假设CPU只有16条地址线,
本文标题:微机原理课后答案
链接地址:https://www.777doc.com/doc-2470104 .html