微机原理与接口习题答案.pdf
第1章1.1 I A-3 2 结构微处理器直至P 4,有哪几种?解 8 0 3 8 6、8 0 4 8 6、P e n t i u m、P e n t i u m P r o、P e n t i u m I R P e n t i u m H R P e n t i u m 4 1.2 8 0 3 8 6 与 8 0 8 6 在功能上有哪些主要区别?解从8 0 8 6 到8 0 3 8 6,处理器的功能有了质的飞跃。体现在:1 .从1 6 位寄存器发展为3 2 位寄存器2 .地址寄存器也发展为3 2 位。可寻址的地址范围达到4 G 字节,有了巨大的扩展。3 .增加了保护方式。使处理器有了两种工作方式:实地址方式和保护虚地址方式。实地址方式用于与8 0 8 6 兼容;保护方式才是3 2 位处理器能真正发挥其完整功能的工作方式。4 .引入了多任务、任务切换的概念。5 .引入了四级特权机制,引入了调用门、陷入门、中断门,使程序能在不同特权之间切换。6 .引入了存储管理单元(MMU),使采用8 0 3 8 6 的操作系统能方便地实现请页(每页为4 K字节)虚拟存储器管理。7 .增加了新指令(主要是保护方式的指令)1.3 从功能上,8 0 4 8 6 与 8 0 3 8 6 有哪些主要区别?解8 0 4 8 6 从功能上来说是8 0 3 8 6 +8 0 3 8 7 +片上缓存。1.4 奔腾相对于8 0 4 8 6 在功能上有什么扩展?解奔腾增加了第二条流水线,实现每个时钟执行两条指令;片上的一级缓存容量加倍;寄存器仍是3 2 位,但内部数据通路是1 2 8 和 2 5 6 位以加速内部数据传送,且猝发的外部数据总线己经增加至64位;增加了高级的可编程中断控制器(A d v a n c e d P r o g r a m m a b l eI n t e r r u p t C o n t r o l l e r (A P I C)以支持多奔腾处理器系统。1.5 P 口以上处理器基于什么结构?解P I I 是基于P 6 系列处理器又增加了 M M X 技术。1.6 微处理器、微型计算机和微型计算机系统三者之间有什么不同?解 把 C P U (运算器和控制器)用大规模集成电路技术做在一个芯片上,即为微处理器。微处理器加上一定数量的存储器和外部设备(或外部设备的接口)构成了微型计算机。微型计算机与管理、维护计算机硬件以及支持应用的软件相结合就形成了微型计算机系统。1.7 C P U 在内部结构上由哪几部分组成?CP U 应具备哪些主要功能?解C P U 主要由起运算器作用的算术逻辑单元、起控制器作用的指令寄存器、指令译码器、可编程逻辑阵列和标志寄存器等一些寄存器组成。其主要功能是进行算术和逻辑运算以及控制计算机按程序的规定自动运行。1.8 微型计算机采用总线结构有什么优点?解 采用总线结构,扩大了数据传送的灵活性、减少了连线。而且总线可以标准化。易于兼容和工业化生产。1.9 数据总线和地址总线在结构上有什么不同之处?如果一个系统的数据和地址合用一套总线或者合用部分总线,那么,要靠什么来区分地址和数据?解数器总线是双向的(数据既可能读也可能写),而地址总线是单向的。8 0 8 6 为了减少芯片的引脚数量,采用数据与地址线复用,既作数据总线也作为地址总线。它们主要靠信号的时序来区分。通常在读写数据时,总是先输出地址(指定要读/写数据的单元),过一段时间再读或写数据。1.1 0 控制总线传输的信号大致有哪几种?解主要是区分读/写存储器还是外部设备、读还是写以及外界输入的R EA DY 和 I N T 等信号L11在以下六个题中所用的模型机的指令系统如表1 所示:表 1 模型机指令系统指令种类助记符机器码功 能数据传送L D A,n3 E nn-*AL D H,n2 6 nn HL D A,H7 CH-AL D H,A6 7A-*HL D A,(n)3 A n以n为地址,把该单元的内容送A,BP (n)-AL D(n),A3 2 n把 A的内容送至以n 为地址的单元,A-(n)L D A,(H)7 E以H的内容为地址,把该单元的内容送A,(H)-AL D(H),A7 7把 A的内容送至以H的内容为地址的单元,A f(H)加法A DD A,nC6 nA+n-*AA DD A,H8 4A+H-AA DD A,(H)8 6A 与以H为地址的单元的内容相加,A+(H)-A减法S U B nD 6 nA -n-*AS U B H9 4A -H f AS U B(H)9 6A -(H)-A逻辑与A N D AA 7A A A-AA N D HA 4A A H-A逻辑或O R AB7A V A-*AO R HB4A V H-A异 或X O R AA FA A f AX O R HA CA H-A增 量I N C A3 CA+l.f AI N C H2 4H+i H减 量DEC A3 DA T-ADEC H2 5J P nC3 nn-P CJ P Z,nCA nZ=l,n-P CJ P N Z,nC 2 nZ=0,l P C无条件J P C,nDA nCy=l,n P C转移J P N C,nD2 nCy=0,n-P CJ P M,nF A nS=l,n-P CJ P P,nF 2 nS=0,LP C停机指令H A L T7 6停机在给定的模型机中,若有以下程序,分析在程序运行后累加器A中的位为多大。着此程序放 在 以10H为起始地址的存储区内,画出此程序在内存中的存储图。LDA,20HADDA,15HLDA,30HADDA,36HADDA,1FHHALT 解 程序在存储器中存放示意图如图1-1所示:地址内容指令10H3ELD A,20H11H2012HC6ADD A,15H13H1514H3ELD A,30H15113016HC6ADD A,36H17H3618HC6A D D A JFH19HIF1AH76HALT图1-1题1.11中程序在存储器中存放示意图。这段程序运行完后累加器A中的值为A=30H+36H+1FH=85H。1.1 2要求同题1.6,程序如下:LDA,50HSUB30HLDA,10HADDA,36HSUB1FHHALT分析程序运行后累加器中的值是多少,并且画出该程序在内存中的存储图。解程序在存储器中存放示意图如图1-2所示:图1-2题1.12中的程序在存储器中的存放示意图地址内容指令10H3ELD A,50H11H5012HD6ADD A,30H13H3014H3ELD AJOH15H1016HC6ADD A,36H17H3618HD6ADD A,1FH19HIF1AH76HALT这段程序运行完后累加器A 中的值为A=1()H+36H-1FH=27H。1.1 3 在给定的模型机中,写出用累加的办法实现15X15的程序。解HALTLDA,0LDH,15LOOP:ADDA,15DECHJPNZ,LOOP1.1 4 在给定的模型机中,写出用累加的办法实现20X20的程序。解 模型机的寄存器是8 位,其最大能表示的值为256。而 20X20=400超出了模型机中能表示的最大值。故此题在模型机中无法做。需要用8086中的寄存器对才能实现。1.1 5 在模型机中,用重复相减的办法实现除法的程序如下:L DA,(M 2);M 2 为放除数的存储单元L DH,AXO RAL O O P:L D(M 3),A;M 3 为放商的存储单元L DA,(M l);M l 为放被除数(或余数)的存储单元S UBHJ PC,D O N EL D(M l),AL DA,(M 3)I N CAJ PL O O PD O N E:M A L T若此程序放在以20H开始的存储区,画出它的存储图。解 程序在存储器中的存储图如图1-3所示。地址内容指令20H3ALD A,(M2)21HM222H67LD H,A23HAFXOR A24H32LD(M3),A25HM326H3ALD A,(Ml)27HMl28H94SUB H29HDAJP C,DONE2AH322BH76LD(Ml),A2CHMl2DH3ALD A,(M3)2EHM32FH3CINC A图1-3题I.15中的程序在存储器中存放的示意图30HC3JP LOOP31H2432H76HALT1.1 6在模型机中,把二进制数转换为BCD码的程序流程图如图卜4所示。图1-4题1.16程序流程图编写出该程序。解LDH,0:计数值H清零LDA,(Binary);把待转换的二进制数一AS1:SUBA,64H;待转换的二进制数-100JPM,S2;结果 0,转S2INCH;计数值加1JPSIS2:ADDA,64H;恢复剩余的二进制数LD(Binary),A:保存剩余的二进制数LD(BCD3),H;保存百位BCD码LDH,0;计数值H清零LDA,(Binary);剩余的二进制数一AS3:SUBA,0AH;剩余的二进制数-10JPM,S4;结果 0,转S4INCH;计数值加1JPS3S4:ADDA,0AH;恢复剩余的二进制数LD(BCD1),A;保存个位BCD码LDHALT(BCD2),H:保存十位BCD码第2章2.1 8086的基本程序执行寄存器是由哪些寄存器组成?解基本程序执行寄存器由以下寄存器组成:(1)通用寄存器。这八个寄存器能用于存放操作数和指针。(2)段寄存器。这些寄存器最多能保持四个段选择子。(3)FLAGS(程序状态和控制)寄存器。FLAGS寄存器报告正在抵行的程序的状态并允许有限地(应用程序级)控制处理器。(4)1P(指令指针)寄存器。1 P寄存器包合下一条要挑行的指令的16-位指针。2.2 8086的存储器是如何组织的?地址如何形成?解8086有20条地址引线,它的直接寻址能力为2*20=1M字节。所以,在一个8086组成的系统中,可以有多达1M字节的存储器。这1M字节逻辑上可以组织成 个线性矩阵。地址从00000H到FFFFFH。但是,在8086内部的AIU能进行1 6位运算,有关地址的寄存器如SP、I P,以及BP、SL DI等也都是16位的,因而8086对地址的运算也只能是16位。这就是说,对于8 0 8 6 来说,各种寻址方式,寻找操作数的范围最多只能是6 4 K 字节。所以,整个1 M 字节存储器以6 4 K 为范围分为若干段。在寻址一个具体物理单元时,必须要由一个基地址再加上由各种寻址方式确定的的1 6 位偏移量来形成实际的2 0 位物理地址。段基地址就是由8 0 8 8 中的段寄存器,中的1 6 位数自动左移4 位,然后与1 6 位偏移量相加,形成2()位物理地址。2.3 通用寄存器起什么作用?解通用寄存器主要用于:(1)逻辑和算术操作的操作数(2)用于地址计算的操作数(3)内存指针2.4 指令地址如何形成?解由段寄存器C S 确定的段基地址与由指令指针确定的偏移量相加形成指令地址。2.5 如何形成指令中的各种条件码?解指令中的条件码,即标志寄存器中的状态标志。它们主要由算术和逻辑运算指令设置或清除。指令系统中也有设置或清除进位标志的指令。2.6 8 0 8 6 的总线接口部件有哪些功能?请逐一说明。解总线接口单元(BI U)负责与存储器接口;执行单元(E U)执行各种操作。B I U 主要由段寄存器、指令指针、加法器(形成2 0 位地址)、预取的指令流队列等组成。2.7 8 0 8 6 的总线接口部件由哪儿部分组成?解8 0 8 6 中的总线接口单元(BI U)负责C P U 与存储器之间的信息传送。具体地说,BI U 既负责从内存的指定部分取出指令,送至指令队列中排队(8 0 8 6 的指令队列有6 个字节,而 8 0 8 8 的指令队列只有4个字节);也负责传送执行指令时所需的操作数。执行单元(E U)负责执行指令规定的操作。2.8 段寄存器C S=1 2 0 0 H,指令指针寄存器I P=F F 0 0 H,此时,指令的物理地址为多少?解指令的物理地址=1 2 0 0 0 H +F F 0 0 H =2 1 F 0 0 H2.9 8 0 8 6 的执行部件有什么功能?由哪几部分组成?解8 0 8 6 的执行部件负责指令的执行。它主要由算术逻辑单元和标志寄存器及通用寄存器等部分组成。2.10状态标志和控制标志有何不同?程序中是怎样利用这两类标志的?8 0 8 6 的状态标志和控制标志分别有哪些?解状态标志反映算术和逻辑运算的结果,主要用作于各种条件。控制标态实现一些控制作用。E F L A G S 寄存器有六个状态标志,它们是:(1)进位标志 C(C a r r y F l a g)当结果的最高位(字节操作时的D 7 或字操作时的D 1 5、双字操作的D 3 1)产生一个进位或借位,则 C=l,否则为0。这个标志主要用于多字节数的加、减法运算。移位和循环指令也能够把存储器或寄存器中的最高位(左移时)或最低位(右移时)放人标志C中。(2)辅助进位标志 A (A u x i l i a r y C a r r y F l a g)在字节操作时,则由低半字节(一个字节的低4 位)向高半字节有进位或借位,则 A=l,否则为0。这个标志用于十进制算术运算指令中。(3)溢出标志 0(0 v e r fl ow F l a g)在算术运算中,带符号数的运算结果超出了 8位、1 6 位 或 3 2 位带符号数能表达的范围,即在字节运算时十 1 2 7 或一 1 2 8,在字运算时+3 2 7 6 7 或一 3 2 7 6 8,在双字运算时+2*3 1-1 或 -2*3 1 此标志置位,否则复位。一个任选的溢出中断指令,在溢出情况下能产生中断。(4)符号标志 S.(S i g n F l a g)它的值与运算结果的最高位相同。即结果的最高位(字操作时为D 1 5)为 1,则 S=l;否则,S=0 o由于在I A-3 2 结构微处理器中,符号数是用补码表示的,所以S表示了结果的符号,0=正,1 =负。(5)奇偶标志 P(P a ri t y F l a g)若操作结果中“1”的个数为偶数,则 P=l,否则P=0。这个标志可用于检查在数据传送过程中是否发生错误。(6)零标志 Z (Z e ro f L a g)若运算的结果为0,则 Z=l,否则Z=0个控制标志,即方向标志 D(D i re c t i o n F l a g)若用指令置D=l,则引起串操作指令为自动减量指令,也就是从高地址到低地址或是“从右到左”来处理串;若使D=0,则串操作指令就为自动增量指令。S TD 和 C L D 指令分别地设置和清除D F 标志。第3章3.1 分别指出下列指令中的源操作数和目的操作数的寻址方式。(l)M O V S I,3 00(2)M O V C X,D A TA D I(3)A D D A X,B X S I(4)A ND A X,C X(5)M O V B P ,A X(6)P US HF 解源操作数为立即寻址,目的操作数为寄存器寻址。源操作数为变址寄存器加位移量寻址,目的操作数为寄存器寻址。源操作数为基址加变址寻址,目的操作数为寄存器寻址。(4)源操作数和目的操作数都为寄存器寻址。源操作数为寄存器寻址,目的操作数为寄存器间接寻址。(6)为堆栈操作。3 .2 试述指令 M O V A X,2 000H 和 M O V A X,D S:2 00011 的区别。解 前一条指令是立即寻址,即把立即数2 000H传送至寄存器A X。后一条指令是直接寻址,是把数据(D S)段中的地址为2 000H单元的内容传送至寄存器A X。3 .3写出以下指令中内存操作数的所在地址。(l)M O V A L,B X+10(2)M O V B P 十 10,A X(3)INC B Y TE P TR S I+5(4)M O V D L,ES:B X 十 S I(5)M O V B X,B P 十 D I 十 2 解(1)数据段中由B X+10单元(2)堆栈段B P +10单元(3)数据段S I+5 字节单元(4)附加段(ES 段)B X +S I单元(5)堆栈段B P +D I+2 单元。3.4 判断下列指令书写是否正确:(l)M O V A L,B X(2)M O V A L,C L(3)INC B X(4)M O V 5,A L(5)M O V B X ,S I(6)M O V B L,F 5 H(7)M O V D X,2 000H(8)P O P C S(9)P US H C S 解(1)不正确,A L 与 B X 数据宽度不同(2)正确(3)不明确是增量字节还是字(4)不正确,立即数不能作为目的操作数(5)不明确要传送的是字节还是字(应是 S I 而不表 S 1)(6)正确。但十六进制数F 5 H应写为O F 5 H(7)正确(8)不正确,C S 不能作为P O P 指令的操作数(9)不正确,C S 不能作为P US H指令的操作数3.5 设堆栈指针S P 的初值为1000H,A X=2 000H,B X=3 000H,试问:(1)执行指令P US H A X 后 S P=?(2)再执行 P US H B X 及 P O P A X 后 S P=?、A X=?、B X=?解 S P=0F F EH(2)S P=0F F EH、A X=3 000H、B X=3 000H3.6 要想完成把 3 000H 送 2 000H 中,用指令:M O V 2 000H,3 000H是否正确?如果不正确,应用什么方法?解 不 正 确。正确的方法是:M O V A L,3 000HM O V 2 000H,A L3.7 假如想从2 00中减去A L 中的内容,用 S UB 2 00,A L 是否正确?如果不正确,应用什么方法?解 不 正 确。正确的方法是:MOV BL,200SUB BL,AL3.8用两种方法写出从80H端口读入信息的指令。再用两种方法写出从4011 口输出10011的指令。解(1)IN AL,8011(2)MOV DX,80HIN AL,DX(3)MOV AL,100HOUT 40H,AL(4)MOV AL,100HMOV DX,40HOUT DX,AL3.9 假如:AL=20H,BL=10H,当执行 CMP AL,BL 后,问:(l)AL,B L中内容是两个无符号数,比较结果如何?影响哪几个标志位?(2)AL、B L中内容是两个有符号数,结果又如何,影响哪几个标志位?解(1)AL=20H,BL=10H,0=0,S=0,Z=0,A=0,P=0,C=0。因为两个都是符号正数,其结果同。3.1 0 若要使A L X 1 0,有哪几种方法,编出各自的程序段。解(1)使用乘法指令:MOV BL,1()MUL BL(2)使用移位指令:SHL AL,1MOV BL,ALSHL AL,2ADD AL,BL(3)使用加法指令:ADD AL,ALMOV BL,ALADD AL,ALADD AL,ALADD AL,BL3.11 8086汇编语言指令的寻址方式有哪几类?用哪一种寻址方式的指令执行速度最快?解寻址方式分为:立即数寻址方式、寄存器操作数寻址方式和存储器操作数寻址方式。其中寄存器操作数寻址方式的指令执行速度最快。3.1 2 直接寻址方式中,一般只指出操作数的偏移地址,那么,段地址如何确定?如果要用某个段寄存器指出段地址,指令中应如何表示?解 默认的数据访问,操作数在DS段;堆栈操作在S S段;串操作源操作数(S I)在DS段,目的操作数(D I)在ES段;用BP作指针在S S段。如果要显式指定段地址,则在操作数中规定段寄存器。例如:M O V A X,E S:(B X+1 O H)3.1 3 在寄存器间接寻址方式中,如果指令中没有具体指明段寄存器,那么,段地址如何确定?解 在寄存器间接寻址方式中,如果指令中没有具体指明段寄存器,段地址是隐含约定的,也就是隐含的选择段寄存器。如操作类型为指令,则指定代码段寄存器D S,如操作类型为堆栈操作,则指定堆栈段寄存器S S,,如表2 中所示:表 2 段寄存器的约定操作类型约定段寄存器可修改的段寄存器逻辑地址指令CS无1P堆栈操作SS无SP源串地址DSCS、ES、SSSI目的串地址ES无DIBP用作基止寄存器SSCS、DS、ES有效地址通用数据读写DSCS、ES、SS有效地址当需要超越约定时,通常用段替代前缀加冒号:”来表示段超越,它允许程序设计者偏离任何约定的段。例如:MOV ES:EBX,EAX这时数据将从寄存器EAX传送至附加段中由EBX寻址的存储单元,而不是传送到数据段中。3.14用寄存器间接寻址方式时,B X、B P、S I、D I 分别针对什么情况来使用?这四个寄存器组合间接寻址时,地址是怎样计算的?举例进行说明。解 在寄存器间接寻址情况下,B X 和 B P 作为间址寄存器使用,而 S I、D I 作为变址寄存器使用。除 B P 间址默认的段为堆栈段,其地的都默认为数据段。它们都可以单独使用,或加上偏移量或组合使用。如:B X +n B P +n S I +n D I +n B X +S I +n B X +D I +n B P +S I +n B P +D I +n 3.15设 D S=2 1 0 0 H,S S=5 2 0 0 H,B X=1 4 0 0 H,B P=6 2 0 0 H,说明下面两条指令所进行的具体操作:M O V B Y T E P T R B P ,2 0 0M O V W O R D P T R B X ,2 0 0 0 解 前一条指令是把立即数(应是字节)2 0 0,传送至堆栈段(BP的默认段)偏移量由B P 规定的字节单元(地址为:5 2 0 0 0 H +6 2 0 0 H =5 8 2 0 0 H )。第二条指令是把立即数2 0 0 0,传送至数据段(B X 的默认段)偏移量由B X 规定的字单元(地址为:2 1 0 0 0 H +1 4 0 0 H =2 2 4 0 0 H)。3.16使用堆栈操作指令时要注意什么问题?传送指令和交换指令在涉及内存操作数时分别要注意什么问题?解 使用堆栈指令可以把内存单元作为一个操作数(从内存到内存)。但堆栈固定在堆栈段且只能由S P 指向。且堆栈操作要修改堆栈指针。M O V 指令不能实现内存单元间的数据传送。XCHG是交换,有一个操作数必须是寄存器。3.1 7 下面这些指令中哪些是正确的?哪些是错误的?如是错误的,请说明原因。X CH G CS,A XM O V BX,1000X CH G BX,IPPUSH CSPOP CSIN BX,D XM O V BYTEBX,1000M O V CS,1000 解(1)错误,CS不能交换(2)错误,MOV指令不能在内存间传送(3)错误,IP不能交换(4)错误,C S 可能作为PUSH指令的操作数(5)错误,CS可能作为POP指令的操作数(6)错误,IN指令的目的操作数是累加器(7)错误,目的操作数是字节单元(8)错误,C S不能作为MOV指令的目的操作数3.1 8 以下是格雷码的编码表01234567890000000100110010011001110101010011001101请用换码指令和其他指令设计一个程序段,实现格雷码往ASCII码的转换。解MOVMOVMOVMOVTRAN:XLATMOVADDMOVINCLOOPBX,TABLESI,ASCII_TABAL,0CX,10TABLEDL,ALDL,30HSI,DLALTRAN3.1 9 用乘法指令时,特别要注意先判断用有符号数乘法指令还是用无符号数乘法指令,这是为什么?解 因为有符号数和无符号数,数的乘法是一样的。但结果的符号取决于两个操作数的符号。3.2 0字节扩展指令和字扩展指令用在什么场合?举例说明。解 主要用于字节相除和字相除之前,把被除数扩展为两倍宽度的操作数。3.2 1什 么 叫B C D码?什么叫组合的B C D码?什么叫非组合的B C D码?8 0 8 6汇编语言在对B C D码进行加、减、乘、除运算时,采用什么方法?解 B C D码为十进制编码的二进制数。组 合 的B C D数 是 把 两 位B C D加 在 个 字 节 中,高位的在高四位。非 组 合 的B C D码 是 把 一 位B C D数放在一个字节的低四位,高 四 位 为0。8 0 8 6在B C D加、减和乘以后用B C D调整指令把结果调整为正确的B C D数。在B C D除法前先用B C D调整指令再做除法。3.2 2用普通运算指令执行B C D码运算时,为什么耍进行十进制调整?具体讲,在 进 行B C D码的加、减、乘、除运算时,程序段的什么位置必须加上十进制调整指令?解 因 为8 0 8 6指令把操作数作为二进制数进行二进制运算,要得到正 确 的B C D结果,需要进行调整。在加、减、乘法指令之后加上B C D调整指令,而在除法指令之前先用B C D调整指令再用除法指令。3.2 3普通移位指令和循环移位指令(带C F的 和 不 带C F的两类)在执行操作时,有什么差别?在编制乘除法程序时,为什么常用移位指令来代替乘除法指令?试编写一个程序段,实 现 将B X中 的 数 乘 以10,结果仍放在B X中。解 这两种指令的区别在于是否把标志位(C F)的值放入循环中。左 移 位 相 当于乘2,右移一位相当 于 除2。故左移和右移可实现乘或除2的暴。而移位指令比乘法和除法指令要快得多。要 实 现B X中的 数 乘10,可 以 用 乘(2+8)实现,乘2即左移一位,乘8即左移三位,把左移一位和左移三位的数相加就行。S H L B X,1M O V A X,B XS H L B X,2A D D B X,A X3.2 4使用串操作指令时,特别要注意和S I、D I这两个寄存器及方向标志D F密切相关。请具体就指令 M O VS B /M O VS W、C M PS B /C M PS W S C A S B /S C A S W L O D S B /L O D S W 歹表说明和 S I、D I 及D F的关系。解 指令实现操作DFSIDIMOVSBDS:SI-ES:DI0+1+11-1-1MOVSWDS:SI-ES:DI0+2+21-2-2CMPSBDS:SI-ES:DI0+1+11-1-1CMPSWDS:SI-ES:DI0+2+21-2-2SCASBAL-ES:DI0+1+11-1-1SCASWAX-ES:DI0+2+21-2-2LODSBDS:SIf AL0+1+11-1-1LODSWDS:SI-AX0+2+21-2-23.2 5 用串操作指令设计实现如下功能的程序段:首先将10 0 H 个数从217 0 H 处搬到10 0 0 H 处,然后,从中检索相等于A L 中字符的单元,并将此单元值换成空格符。解M O VS I,217 0 HM O VD I,10 0 0 HM O VC X,10 0 HRE PM O VSD I,S INE X T:S C A S BJ ZN1L O O PNE X TNl:D E CD IM O VD I,20 HJ M PNE X T3.2 6在使用条件转移指令时,特别要注意它们均为相对转移指令,请解释“相对转移”的含义。如果要往较远的地方进行条件转移,那么,程序中应该怎样设置?解 相对转移即为相对于指令指针的转移。通常,偏移量是8 位数,这是短(s h o r t)转移,它可以规定16位偏移量,这就是段内(n e a r)转移。3.2 7 带参数的返回指令用在什么场合?设栈顶地址为30 0 0 H,当执行RE T 0 0 0 6后,S P 的值为多少?解 带参数的返回指令用于跳过在调用时通过堆栈传送的参数。执行RE T 0 0 0 6指令后,S P =2F F 6H。3.2 8在执行中断指令时,堆栈的内容有什么变化?中断处理子程序的入口地址是怎样得到的?解在执行中断指令后,处理器先推入标志寄存器,再推入断点处的指令指针和C S值。中断处理程序的入口地址由中断向量和中断向量(描述符)表得到。3.2 9在执行中断返回指令IRE T 和普通子程序返回指令RE T 时,具体操作内容有什么不同?解IRE T 除了弹出中断要返回的指令的地址(C S 和 IP)外,还要恢复中断前的标志寄存器。3.3 0设当前S S=20 10 H,S P=F E 0 0 H,BX=3457H,计算当前栈顶地址为多少?当执行P U S H BX指令后,栈顶地址和栈顶2 个字节的内容分别是什么?解 当前的栈顶为:20 I0 0 H+F E 0 0 H=2F F 0 0 H。执行P U S H B X后,栈顶为2F F 0 0 H-2=2F D F E,而 2F F 0 0 H中的内容为57H,2F D F F 中的内容为34H。第 4 章4.1 在下列程序运行后,给相应的寄存器及存储单元填入运行的结果:MOVA L,10 H1MOVCX f 1 UvUrlMOVBX,20 0 0 H 1MOV C X,A LX C HGC X,BXMOVD H,BX|MOVD L,0 1HX C HGC X,BXMOV BX,DLHL T1 解寄存器及存储单元的内容:A L =10 HBL =0 0 HBH=20 HC L 二 0 0 HC H=10 HD L 二 0 1HD H=10 H(10 0 0 H)=10 H(20 0 0 H)=0 1H4.2 要求同题4.1,程序如下:MOV A L,50 HMOV BP,10 0 0 HMOV BX,20 0 0 HMOV BP,A LMOV D H,20 HMOV BX,D HMOV D L,0 1HMOV D L,BX MOV C X,30 0 0 HHL T 解寄存器及存储单元的内容:A L =50 HBL =OOHBH 二 20 HC L =OOHC H=30 HD L =20 HD H 二 20 HBP =10 0 0 H(10 0 0 H)=50 H(20 0 0 H)=20 H4.3若在自10 0 0 H单元开始有一个10 0个数的数据块,要把它传送到自20 0 0 H开始的存储区中去,用以下三种方法,分别编制程序:(1)不用数据块传送指令;(2)用单个传送的数据块传送指令;(3)用数据块成组传送指令。解(1)L E AS I,10 0 0 HL E AD I,20 0 0 HMOVC X,10 0L I:MOVA X,S IMOV D I,A XL OOPL IHL T(2)L E AS I,10 0 0 HL E AD I,20 0 0 HMOVC X,10 0C L DL I:MOV S BL OOPL IHL T(3)L E AS I,10 0 0 HL E AD I,20 0 0 HMOVC X,10 0C L DRE PMOV S BHL T4.4利用变址寄存器,编一个程序,把 自10 0 0 H单元开始的10 0个数传送到自10 70 H开始的储存区中去。解L E A S I,10 0 0 HL E A D I,10 70 HMOV C X,10 0C L DRE P MOV S BHL T4.5要求同4.4,源地址为20 5 0 H,目的地址为20 0 0 H,数据块长度为50。解L E A S I,20 50 HL E A D I,20 0 0 HMOV C X,50S T DRE P MOV S BHL T4.6 编一个程序,把 自 10 0 0 H单 元 开 始 的 10 0 个 数 传 送 至 10 50 H开始的存储区中(注意:数据区有重叠)。解 L E A S I,10 0 0 HL E A D I,10 50 HA D D S I,63HA D D D I,63HMOV C X,10 0S T DRE P MOV S BHL T4.8条件同题4.7,但在传送过程中检查数的值,零不传送,不是零则传送到目的区。4.7在 自 0 50 0 H单元开始,存 有 10 0 个数。要求把它传送到10 0 0 H开始的存储区中,但在传送过程中要检查数的值,遇到第一个零就停止传送。解L E AS I,0 50 0 HL E AD I,10 0 0 HMOVC X,10 0N1:MOVA L,S IT E S TA L,0J Z,N2MOV D I,A LINCS IINCD IL OOPN1N2:HL T 解L E AS I,0 50 0 HL E AD I,10 0 0 HMOVC X,10 0Nl:MOVA L,S IT E S TA L,0J ZN2MOV D I,A LN2:INCS IINCD IL OOPN1HL T4.9把 在 题 4.7 中指定的数据块中的正数,传 送 到 自 10 0 0 H开始的存储区。解 L E A S I,0 50 0 HL E A D I,10 0 0 HMOV C X,10 0N1:MOVA L,S IT E S TA L,0J SN2MOV D I,A LN2:INCS IINCD IL OOPN1HL T4.1 0 把在题4.7中指定的数据块中的正数,传送到自10 0 0 H开始的存储区;而把其中的负数,传送到自1I0 0 H开始的存储区。且分别统计正数和负数的个数,分别存入120 0 H和120 1H单元中。解L E AS I,0 50 0 IIL E AD I,10 0 0 HL E ABX,11OOHMOVC X,10 0MOVD X,0Nl:MOVA L,S IT E S TA L,0J SN2MOV D I,A LINCD LINCS IINCD IJ MPN3N2:MOV BX,A LINCD HINCS IINCBXN3:L OOPN1L E ABX,120 0 HMOV BX,D LMOV BX+1,D HHL T4.1 1 自0 50 0 H单元开始,有10个无符号数,编一个程序求这10个数的和(用8位数运算指令),把和放到0 50 A及0 50 B单元中(和用两个字节表示),且高位在0 50 B单元。解L E ABX,0 50 0 HMOVA X,0MOVC L,10Nl:MOVD L,BX A D DA L,D LA D CA H,0INCBXD E CC LJ NZMOVN10 50 A H,A X4.1 2自0 20 0 H单元开始,有10 0个无符号数,编一个程序求这10 0个数的和(用8位数运算指令),把和放在0 264H和0 265H单元(和用两字节表示),且高位在0 265H单元。解L E ABX,0 20 0 HMOVA X,0MOVC L,10 0N1:MOVD L,BX A D DA L,D LA D CA H,0INCBXD E CC LJ NZN1MOV0 264H,A X4.1 3题同4.1 2,只是在累加时用16位运算指令编程序。解L E ABX,0 20 0 HMOVA X,0MOVC L,10 0Nl:MOVD X,BX A D DA X,D XINCBXD E CC LJ NZN1MOV0 264H,A X4.1 4若在0 50 0 H单元中有一个数x:(D利用加法指令把它乘2,且送回原存储单元(假定x*2后仍为一个字节);(2)x*4;(3)x*1 0(假定 x*1 0 W2 5 5)。解(1)L E AB X,0 5 0 0 HMO VA L,B XA D DA L,A LMO VB X,A L(2)L E AB X,0 5 0 0 HMO VA L,B XA D DA L,A LA D DA L,A LMO VB X,A L(3)L E AB X,0 5 0 0 HMO VA L,B XA D DA L,A LMO VD L,A LA D DA D DA D DMO VA L,A LA L,A LA L,D LB X,A L4.15题意与要求同题4.1 4,只是x*2后可能为两个字节。解L E A B X,0 5 0 0 HMO V A L,B XA D D A L,