同学们注意啦,汇编复习题的第3道编程题,是2乘12,不是2的12次方!•填空题•PC系统中,外中断源分为:不可屏蔽中断和可屏蔽中断两种。•8086CPU可处理两种尺寸的数据,分别为:字节、字。3.系统总线是根据传输内容分为地址总线、数据总线、控制总线3种。4.在存储器中,数据和程序以二进制形式存在5.8086CPU提供的栈段最大容量为64KB。6.汇编语言由汇编指令、伪指令和其他符号3类指令组成。7.CPU可直接读写cpu内部的寄存器、内存单元、端口3个地方的数据。8.存储器被划分为若干存储单元,每个存储单元能存储的信息大小为128个字节。9.8086CPU的转移指令可分为:无条件转移指令、条件转移指令、循环指令、过程以及中断。10.8086CPU是16位机,具有20位地址总线。其给出物理地址的方法是:物理地址=段地址×16+偏移地址。11.微型计算机以CPU为核心,配置存储器、输入输出、接口电路、总线构成。12.从读写属性上看,存储器可分为主存储器和辅助存储器两类。13.CPU的寻址能力由地址总线宽度决定。14.通常我们把显示卡上的位宽称为显存,显示卡随时将显存中的数据在显示器上输出。二、选择题1.微机的性能主要取决于(A)。A.CPUB.主存储器C.硬盘D.显示器2.在DOS方式下的Debug程序中,若要改写内存中的内容用到命令是(B)。A.R命令B.E命令C.D命令D.T命令3.flag寄存器中以下代表奇偶标志位的是(B)。A.OFB.PFC.SFD.ZF4.8086系统可访问的内存空间范围是(B)。A.0000H~FFFFHB.00000H~FFFFFHC.0~D.0~5.8086CPU中,要进行内存单元寻址,以下指令正确的是(A)。A.movax,[bx]B.movax,[cx]C.movax,[ds]D.movax,[bx+bp]6.微机中地址总线的作用是(C)。A.选择存储单元B.选择信息传输的设备C.指定存储单元和I/O接口电路地址D.确定操作对象7.对8086CPU来说,已知某单元的物理地址为21F60H,则有可能的段地址和偏移地址为(A)。A.21F0:0060B.2000:1E60C.21F0:0160D.2100:0E608.以下存储器中,CPU不能直接访问的是(D)。A.CacheB.RAMC.主存D.辅存9.某存储器容量为64K×16,该存储器的地址线和数据线条数分别为(C)。A.16,32B.32,16C.16,16D.32,3210.PC使用的如下外设接口中,(D)可用于将键盘、鼠标、数码相机、扫描仪和外接硬盘与PC相连。A.PS/2B.EEE-1394C.USBD.SCSI11.在DOS方式下的Debug程序中,若要查看内存中的内容用到命令是(C)。A.R命令B.E命令C.D命令D.T命令12.flag寄存器中以下代表零标志位的是(D)。A.OFB.PFC.SFD.ZF13.8086CPU中,一个字由(A)个字节组成。A.2B.4C.6D.8三、分析编程1.8086微机系统中,假设有一数据存放在内存20000H单元内,现给定段地址为SA,若想用偏移地址寻址到此单元。则SA应满足的范围是多少?写出具体分析过程。SA范围:1001H~2000H分析过程:最大值为(20000H-0000H)/10H=2000H最小值为(20000H-0FFFFH)/10H=1000.1H,因此上取整为1001H,注意段址SA为1000H时,无法得到物理地址20000H2.根据以下条件,写出相应的汇编程序。(1)将内存中10000H~1000FH这段空间作为栈,初始状态栈是空的;(2)设置AX=001AH,BX=001BH;(3)利用栈,交换AX和BX中的数据。movax,1000Hmovss,axmovsp,0010Hmovax,001AHmovbx,001BHpushaxpushbxpopaxpopbx3.编程,计算2X12,结果存在ax中。assumecs:codecodesegmentmovax,2movcx,11s:addax,axloopsmovax,4c00hint21hcodeendsend4.编程,用加法计算123*236,结果存在ax中。assumecs:codecodesegmentmovax,0movcx,236s:addax,123loopsmovax,4c00hint21hcodeendsend5.下面程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,数据的传送用栈来进行。占空间设置在程序内。请补全程序:assumecs:codesgcodesgsegmentdw0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hdw0,0,0,0,0,0,0,0,0,0,start:movax,csmovss,axmovsp,24hmovax,0movds,axmovbx,0movcx,8s:push[bx]popcs:[bx]addbx,2loopsmovax,4c00hint21hcodesgendsendstart6.用debug查看内存,结果如下:(6分)2000:1000BE0006000000……..写出下面程序执行后,ax、bx、cx中的内容。movax,2000Hmovds,axmovbx,1000Hmovax,[bx]movcx,[bx+1]movbx,[bx+2]ax=00BEHbx=0606Hcx=0600H7.用debug查看内存,结果如下:2000:1000BE0006006A22……..写出下面程序执行后,ax、bx、cx中的内容。movax,2000Hmovds,axmovbx,1000Hmovsi,0movax,[bx+2+si]incsimovcx,[bx+2+si]incsimovdi,simovbx,[bx+2+di]ax=0006Hbx=226AHcx=6A00H8.补全程序,实现从内存1000:0000处开始执行指令。assumecs:codestacksegmentdb16dup(0)stackendscodesegmentstart:movax,stackmovss,axmovsp,16movax,1000hpushaxmovax,0pushaxretfcodeendsendstart9.写出下面每条指令执行后,ZF、SF、CF、PF标志位的值。CFPFOFSFZFsubal,alCF=0OF=0SF=0ZF=1PF=1moval,10HCF=0OF=0SF=0ZF=1PF=1addal,90HCF=0OF=0SF=1ZF=0PF=1moval,80HCF=0OF=0SF=1ZF=0PF=1addal,80HCF=1OF=1SF=1ZF=1PF=1moval,0FCHCF=1OF=1SF=1ZF=1PF=1addal,05HCF=1OF=0SF=0ZF=0PF=0moval,7DHCF=1OF=0SF=0ZF=0PF=0addal,0BHCF=0OF=1SF=1ZF=0PF=110.根据以下条件,写出相应的汇编程序。(1)将内存中10000H~1000FH这段空间作为栈,初始状态栈是空的;(2)设置AX=001AH,BX=001BH;(3)将AX、BX中的数据入栈;(4)然后将AX、BX清零;(5)从栈中恢复AX、BX原来的内容。movax,1000Hmovss,axmovsp,0010Hmovax,001AHmovbx,001BHpushaxpushbxsubax,axsubbx,bxpopaxpopbx