资源描述
《微型计算机原理》习题3(P117)参考答案
(部分题号与教材有错位,请注意)
3.1 为什么要研究8086/8088微处理器及其系统?这比直接研究32位微处理器及其系统有何优缺点?
解:尽管8086/8088后续的80286、80386、80486以及Pentium系列CPU结构和功能已发生很大变化,但从基本概念与结构以及指令格式上来讲,他们仍然是经典的8086/8088CPU的延续与提升。
3.2 8086 CPU有多少根数据线和地址线?它能寻址多少内存地址单元和I/O端口?8088CPU又有多少根数据线和地址线?为什么要设计8088CPU?
解:8086 CPU有16根数据线和20根地址线,可寻址1MB存储单元和64KB的I/O端口。
8088 CPU 有16位内部数据线和8条外部数据总线,20根地址线。
8088 CPU 是8086 CPU的向下兼容版,这样设计主要为了与INTEL原有的8位外围接口芯片直接兼容。
3.3 8086 CPU内部按功能可分为哪两大部分?他们各自的主要功能是什么?
解:从功能上讲,8086可分为两个部分,即总线接口单元(bus interface unit,BIU)和执行单元(execution unit ,EU)。
总线接口单元(BIU)的功能是负责CPU与存储器或I/O设备之间的数据传送。
EU的功能只是负责执行指令;执行的指令从BIU的指令队列缓冲器中取得,执行指令的结果或执行指令所需要的数据,都由EU向BIU发出请求,再由BIU经总线控制电路对存储器或外设存取。
3.4 8086 CPU内部的总线接口单元BIU由哪些功能部件组成?他们的基本操作原理是什么?
解:BIU内有4个16位的段地址寄存器CS、DS、SS和ES,16位指令指针IP,6字节指令队列缓冲器,20位地址加法器和总线控制电路。
基本操作原理是BIU要从内存取指令送到指令队列缓冲器;CPU执行指令时,总线接口单元要配合执行单元从指定的内存单元或者外设端口中取数据,将数据传送给执行单元,或者把执行单元的操作结果传送到指定的内存单元或外设端口中。
3.5 什么叫微处理器的并行操作方式?为什么说8086 CPU具有并行操作的功能?在什么情况下8086的执行单元EU才需要等待总线接口单元BIU提取指令?
解:并行操作,就是CPU执行完1条指令后就可以立即执行下一条指令,而不需要像以往8位CPU那样重复的进行先取指令和后执行的指令串行操作。16位CPU的这种并行操作的特点,提高了总线的信息传输效率和整个系统的执行速度。
只有当遇到转移指令、调用指令或返回指令时,或者当某一条指令在执行过程中,需要频繁访问内存以至于总线接口单元没有空闲从内存将指令提取到指令队列中时,才需要等待总线接口单元BIU提取指令。
3.6 逻辑地址和物理地址有什么区别?为什么8086微处理器要引入“段加偏移”的技术思想?段加偏移的基本含义又是什么?试举例说明。
解:
逻辑地址由16位段地址和16位段内偏移量(又称有效地址)组成,程序中指令必须通过逻辑地址访问内存。物理地址是由20条地址线信号指示的内存地址,在电路中必须使用这20条物理的地址信号线访问内存。物理地址=段地址×16+有效地址。
参考教材: ⑴ P54第3~11行
⑵ P56 “2。段寄存器”的第1段
⑶ P70 “3。3。5 ‘段加偏移’寻址机制允许重定位”
段加偏移的基本含义是:将段寄存器内容左移4位后与16位偏移地址相加。例:假设CS=FA00H,IP=0300H,这是物理地址为0FA300H。
3.7 在微处理器中设置指令队列缓冲器有什么作用?8086与8088 CPU中的指令队列有何区别?
解:指令队列缓冲器在执行指令的同时,可以从内存中取下面一条或几条指令,取来的指令就依次暂放在指令队列中。
区别:8086指令队列为6个字节,8088为4字节;8086指令队列只要空出2个,而8088只要空出1个指令字节时,BIU便自动执行取指操作,直到填满为止。
3.8 8086 CPU的基址寄存器BX和基址指针(或基址指针寄存器)BP有何区别?基址指针BP和堆栈指针SP在使用中有何区别?
解:基址寄存器BX在查表指令XLAT中存放表的起始地址,而基址指针BP用来存放堆栈地址。
指针寄存器SP和BP都用来指示存储位于当前堆栈段中的数据所在的地址,但SP和BP在使用上有区别。入栈和出栈指令是由SP给出栈顶的偏移地址,故称为堆栈指针寄存器。而BP则是存放位于堆栈段中的一个数据区的基地址的偏移地址,故称为堆栈基址指针寄存器。
3.9 段地址和段起始地址相同吗?两者是什么关系?8086的段起始地址就是段基址吗?它是怎样获得的?
解:不同。为了使8086/8088 CPU能够寻址1MB内存空间,在其内部设计了一组16位的段寄存器,用这些段寄存器的内容作为段地址,再由段寄存器左移4位形成20位的段起始地址。
8086的段起始地址就是段基址。由段寄存器左移4位形成20位的段基址。
3.10 微处理器在实模式下操作时,段寄存器的用途是什么?
解:为了使8086/8088 CPU能够寻址1MB内存空间,在其内部设计了一组16位段寄存器,用这些段寄存器的内容作为段地址,再由段寄存器左移4位形成20位的段起始地址,它们通常被称为段基址;这样,8086/8088就有可能寻址1MB存储空间并将其分为若干个逻辑段,提供在内存中的重定位功能。
3.11 在实模式下,若段寄存器中装入如下数值,试写出每个段的起始地址和结束地址。
(1)1000H (2)1234H (3)E000H (4)AB00H
解:(1)起始地址:10000H 结束地址:10000H+FFFFH=1FFFFH
(2)起始地址:12340H 结束地址:12340H+FFFFH=2233FH
(3)起始地址:E0000H 结束地址:E0000H+FFFFH=EFFFFH
(4)起始地址:AB000H 结束地址:AB000H+FFFFH=BAFFFH
3.12微处理器在实模式下操作,对于下列CS:IP组合,计算出要执行的下条指令的存储器地址。
(1)CS=1000H和IP=2000H (2)CS=2400H和IP=1A00
(3)CS=1A00和IP=B000H (4)CS=3456H和IP=ABCDH
解:(1)下条指令地址:10000H+2000H=12000H
(2)下条指令地址:24000H+1A00H=25A00H
(3)下条指令地址:1A000H+B000H=25000H
(4)下条指令地址:34560H+ABCDH=3F12DH
3.13 8086在使用什么指令时,用哪个存储器保存记数值?
解:在使用无条件重复指令REP时,CX寄存器用来保存记数值;
在使用循环控制指令LOOP时,CX寄存器用来保存记数值。
3.14 IP寄存器的用途是什么?它提供的是什么信息?
解:简单地说,IP寄存器指示即将执行的下一条指令的段内偏移地址。一般情况下,CPU每取一个指令字节,IP就自动加1,从而保证程序的顺序运行。程序控制类指令改变IP值,从而改变程序的运行顺序。
3.15 8086的进位标志位有哪些运算指令来置位?
解:当执行加法、减法、乘法指令、BCD调整指令、移位和循环指令都会影响进位标志,但使CF 置位的运算指令只有NEG指令(STC不算运算指令)。
3.16 如果带符号数FFH与01H相加,会产生溢出吗?
解:0FFH+01H=0H,所以不会产生溢出。
3.17 某个数包含有5个1,它具有什么奇偶性?
解:奇偶性为奇,标志PF=0
3.18 某个数为全0,它的零标志位为0吗?(题目不好,应该改为:某指令执行后,其结果为全0,它的零标志位为0吗?)
解:不为0,零标志ZF=1
3.19 用什么指令设置哪个标志位,就可以控制微处理器的INTR引脚?
解:用STI和CLI指令控制IF标志,就可以控制微处理器的INTR引脚。
3.20 微处理器在什么情况下才执行总线周期?一个基本的总线周期由几个状态组成?在什么情况下需要插入等待状态?
解:为了从存储器中取得指令或者与一个存储单元或I/O接口单元传送数据,需要它的总线接口单元执行一个总线周期。
一个总线周期由T1、T2、T3和T4这四个状态。
由于外设或存储器的速度较慢,不能及时的配合CPU传送数据。这时,外设或存储器就会通过“READY”的信号线在T3状态启动之前向CPU发一个“数据未准备好”信号,表示他们还来不及同CPU之间传送数据,于是,CPU会在T3之后自动插入一个或多个附加的时钟周期TW,这个TW就叫等待状态。
3.21 什么叫做非规则字,微处理器对非规则字是怎样操作的?
解:对内存中存放的字数据,其低位字节在奇数地址开始存放,称为非规则存放,存放的字叫非规则字。8086对非规则字必须分两次访问。
3.22 8086对1MB的存储空间是如何按高位库和低位库来进行选择和访问的?用什么控制信号来实现对两个库的选择?
解:8086的1MB存储空间分为两个512KB的存储体,又称存储库,分别叫高位库和低位库,低位库与数据总线D7—D0相连,该库中每个单元的地址均为偶数地址,高位库与数据总线D15—D8相连,该库中每个单元的地址均为奇数地址。
用A0对低位库和用BHE对高位库实现选择控制。
3.23 堆栈的深度由哪个寄存器确定?为什么说一个堆栈的深度最大为64kB?在执行一条入栈或出栈命令时,栈顶地址将如何变化?
解:堆栈的深度由堆栈指针SP来确定。
因为存储器中包括堆栈段在内的每一个逻辑段至多可包含64KB长的连续存储单元,所以一个堆栈的深度最大为64KB。
执行PUSH s指令时,先SP←SP-2,再[SS:SP]←S
执行POP d指令时,先d←[SS:SP],再SP←SP+2
3.25 8086/8088CPU对RESET复位信号的复位脉冲宽度有何要求?复位后内部寄存器的状态如何?
解:RESET复位信号的复位脉冲宽度不得小于4个时钟周期。复位后各个寄存器状态如下:
CS=0FFFFH,DS=ES=SS=0,F=0,指令队列清空。
3.26 ALE信号起什么作用?它在使用时能否被浮空?DT/R信号起什么作用?它在什么情况下被浮置为高阻状态?
解:它是8086/8088提供给地址锁存器8282/8283的控制信号,高电平有效。ALE在使用时不能被浮空。
在使用8286/8287作为数据总线收发器时,DT/R信号用来控制8286/8287的数据传送方向。在DMA方式时,它被置为高阻状态。
3.27 8086/8088CPU的哪些引脚采用了时分复用技术?哪些引脚具有两种功能?
解:地址/数据总线AD15—AD0,地址/状态总线A19/S6—A16/S3,BHE/S7采用了分时复用技术。
MN/MX、DT/R、M/IO、RQ/GT1、RQ/GT0具有两种功能。
3.28 8086/8088CPU的微机系统有哪两种工作方式?它们由什么引脚来实现控制?这两种工作方式的主要特点和区别如何?
解:8086/8088 CPU微机系统有最大和最小两种工作方式。他们由MN/MX引脚实现控制。
MN/MX接电源电压,系统工作于最小方式,即单处理机系统,适合于较小规模的应用。MN/MX接地,系统工作于最大方式,一般包含两个或多个微处理器,这样就要解决主处理器和协处理器之间的协调问题以及对总线的共享控制问题。最大方式和最小方式的主要区别是外加有8288总线控制器。
3.29 当8086/8088按最大方式操作时,8288总线控制器主要提供什么功能?8086/8088 CPU在最大方式下工作时有哪些专用引脚?它们的主要作用是什么?
解:通过它对CPU发出的控制信号进行变换和组合,以得到对存储器和I/O端口的读/写信号和对锁存器器8282及对总线收发器8286的控制信号,使总线控制功能更加完善。
在最大方式下使用的专用引脚有:
(1)QS1、QS0指令队列状态信号输出
这两个信号组合起来提供了本总线周期的前一个时钟周期中指令队列的状态,以便于外部对8086/8088内部指令队列的动作跟踪。
(2)LOCK 总线封锁信号输出
当LOCK为低电平时,系统中其他主部件就不能占有总线。
(3)RQ/GT1、RQ/GT0总线请求信号输入/总线
这两个信号端可供CPU以外的两个处理器用来发出使用总线的请求信号和接收CPU对总线请求信号的回答信号。
(4)S0、S1、S2状态信号,8288根据这三个状态信号和CLK时钟信号组合输出各种总线控制信号。
3.30 为什么要研究指令格式?8086/8088微处理器有哪些基本的指令格式?
解:指令格式是按指令系统的特定规范与要求精心设计的,了解指令格式,对完整的掌握一个成功设计的指令系统是十分必要的。
基本指令格式有:无操作数指令、单操作数指令、双操作数指令
3.31 在指令格式中,MOD字段指定了什么信息?它和R/M字段确定的有效地址EA的计算方法共有多少种?
解:MOD字段给定指令的寻址方式,即规定是存储器或寄存器的寻址类型,并确定在存储器寻址类型时是否有位移量。
它和R/M字段确定的有效地址EA计算方法共有24种
3.32 说明某些机器语言指令中的D位和W位是何作用?
解:D表示来自/到寄存器的方向。D=1,表示由指令REG字段所确定的某寄存器为目标;D=0,则表示该寄存器为源。
W表示操作数为字或字节处理方式。W=1,表示为字;W=0,则为字节。
3.33 假定指令是16位模式指令,如果指令寄存器字段(REG)的信息为001,W字段为0,试问寻址时选择什么寄存器?(题目自相矛盾)
解: 16位模式与W字段为0相互矛盾!
3.34 某机器语言16位模式指令的R/M=001,MOD=00,试问该指令指定了哪种存储器寻址方式?
解:指定了[BX+DI]存储器寻址方式
3.35 何谓寻址方式?8086/8088微处理器有哪几种主要的寻址方式?
解:寻址方式即寻找操作数的方式。主要的寻址方式有:固定寻址、立即数寻址、寄存器寻址、存储器寻址、串操作指令寻址、I/O端口寻址方式,其中存储器寻址又可分为:基址寻址、变址寻址、基址加变址。此外,程序控制指令还有直接、相对、寄存器间接、存储器间接等寻址方式。
3.36 试写出寻址存储器操作时计算有效地址EA的通式。
解:EA=基址值(BX/BP)+变址值(SI/DI)+位移量Disp(0/8/16位)
3.37 指出8086/8088下列指令源操作数的寻址方式。
(1)MOV AX,1200H (2) MOV BX,[1200H]
(3)MOV BX,[SI] (4) MOV BX,[SI+1200H]
(5)MOV [BX+SI],AL (6) ADD AX,[BX+DI+20H]
(7)MUL BL (8) JMP BX
(9)IN AL,DX (10)INC WORD PTR[BP+50H]
解:(1)立即数寻址 (2)存储器直接寻址
(3)变址寄存器间接寻址 (4)寄存器变址间接寻址
(5)基址加变址寄存器间接寻址 (6)基址加变址间接寻址
(7)寄存器寻址 (8)寄存器寻址
(9)端口间接寻址 (10)寄存器基址加变址间接寻址
3.38 指出8086/8088下列指令中存储器操作数物理地址的计数表达式。
(1)MOV AL,[DI] (2)MOV AX,[BX+SI]
(3)MOV 8[BX+DI],AL (4)ADD AL,ES:[BX]
(5)SUB AX,[2400H] (6)ADC AX,[BX+DI+1200H]
(7)MOV CX,[BP+SI] (8)INC BYTP PTR[DI]
解:(1)PA=DS×16+DI (2)PA=DS×16+(BX+SI)
(3)PA=DS×16+(BX+DI+8) (4)PA=ES×16+BX
(5)PA=DS×16+2400H (6)PA=DS×16+(BX+DI+1200H)
(7)PA=SS×16+(BP+SI) (8)PA=DS×16+DI
3.39 指出8086/8088下列指令的错误何在?
(1)MOV [SI],IP (2)MOV CS,AX
(3)MOV BL,SI+2 (4)MOV 60H,AL
(5)PUSH 2400H (6) INC [BX]
(7)MUL-60H (8)ADD [2400H],2AH
(9)MOV [BX],[DI] (10)MOV SI,AL
解:(1)IP不可与内部寄存器之间实现直接数据传送
(2)代码段寄存器CS不可与内部寄存器之间实现直接数据传送
(3)应是[SI+2]指示的内存单元的字节内容
(4)立即数60H不可做目的操作数
(5)PUSH的源操作数只能为寄存器操作数或内存操作数
(6)间接寻址存储器数据加1指令要用TYPE PTR类型操作符来标识数据类型
(7)MUL 指令的源操作数只能为寄存器操作数或内存操作数
(8)要用TYPE PTR类型操作符来标识数据类型
(9)两者不能同为存储器操作数
(10)AL为8位,SI为16位,数据类型不匹配
3.40 MOV CS,AX指令会带来什么错误?
解:这条指令不存在。如果有的话,将可以直接仅改变代码段的段基址而IP值不变,程序运行顺序发生变化,变到那里去了?很难控制。
3.41 阅读下列程序段,指出每条指令执行以后有关寄存器的内容是什么?
MOV AX,0ABCH ; AX= 0ABCH
DEC AX ; AX= 0ABBH
AND AX,00FFH ; AX= 00BBH
MOV CL,4 ; CL= 4
SAL AL,1 ;AL= 76H,CF=1
MOV CL,AL ;CL= 76H
ADD CL,78H ;CL= 0EEH,CF=0
PUSH AX ;AX=0076H
POP BX ;BX=0076H
解:执行完后,AX=0076H,CF=0,CL=0EEH
3.42 指出RET和IRET两条指令的区别,并说明各用在什么场合?
解:RET用于从过程返回,而IRET用于从中断中返回。
3.43 说明MOV BX,DATA和MOV BX,0FFSET DATA指令之间的区别。
解: MOV BX,DATA ;DATA是字变量名,指令功能是把DATA变量的内容→BX
MOV BX,0FFSET DATA ;把DATA变量的段内偏移地址→BX
3.44 给定DS=1100H,BX=0200H,LIST=0250H和SI=0500H。试确定下面各条指令寻址存储器的物理地址。
(1)MOV LIST[SI],EDX (2)MOV CL,LIST[BX+SI]
(3)MOV CH,[BX+SI] (4)MOV DL,[BX+100]
解:(1)PA=11000+0500+0250=11750H (2)PA=11000+0200+0500+0250=11950H
(3)PA=11000+0200+0500=11700H (4)PA=11000+0200+0100=11300H
3.45 假定PC机存储器低地址区有关单元的内容如下所示。
(20H)=3CH,(21H)=00H,(22H)=86H,(23H)=0EH
且CS=2000H,IP=0010H,SS=1000H,SP=0100H
FLAGS=0240H,这时若执行INT 8指令,试问:
(1)程序转向从何处执行(用物理地址回答)?
(2)栈顶6个存储单元的地址(用逻辑地址回答)及内容分别是什么?
解:(1)PA=0E86×10H + 003CH = 0E89CH
(2)LA=1000:00FAH~1000:00FFH
3.46 设SP=2000H,AX=3000H,BX=5000H,执行下列片段程序后,问SP=?AX=?BX=?
PUSH AX
PUSH BX
POP AX
解:SP=1FFEH,AX=5000H,BX=5000H
3.47 某程序段为
2000H:304CH ABC:MOV AX,1234H
。。。
2000H:307EH JNE ABC
试问代码段中跳转指令的操作数为何值?
解:操作数为4CH-(7E+2)=0CCH
3.48 若AX=5555H,BX=FF00H,试问在下列程序段执行后,AX=?BX=?CF=?
AND AX,BX ;AX=5500H
XOR AX,AX ;AX=0000H
NOT BX
解:AX=0000H,BX=00FFH,CF=0
3.49 若CS=E000H,说明代码段可寻址物理存储地址空间的范围。
解:代码段可寻址物理存储地址空间的范围是:E0000H—EFFFFH,共64KB的空间。
3.50 若DS=3000H,BX=2000H,SI=0100H,ES=4000H,计算出下述各条指令中存储器操作数的物理地址。
(1)MOV [BX],AH (2) ADD AL,[BX+SI+1000H]
(3)MOV AL,[BX+SI] (4)SUB AL,ES:[BX]
解:(1)PA=30000+2000=32000H (2)PA=30000+2000+0100+1000=33100H
(3)PA=30000+2000+0100=32100H (4)PA=40000+2000=42000H
3.51 试比较SUB AL,09H与CMP AL,09H这两条指令的异同,若AL=08H,分别执行下述两条指令后,SF=?CF=?OF=?ZF=?
解:在SUB指令中,将AL- 09H的值赋给AL,而CMP指令只影响标志,不保存结果。
SUB AL,09H ;SF=1,CF=1,OF=0,ZF=0,AL=FF
CMP AL,09 ;SF=1,CF=1,OF=0,ZF=0,AL=08
3.52 选用最少的指令,实现下述要求的功能。
(1)AH的高4位清零
(2)AL的高4位取反
(3)AL的高4位移到低4位,高4位清零
(4)AH的低4位移到高4位,低4位清零
解:(1)AND AH,0FH
(2)XOR AL,0F0H
(3)MOV CL,4
SHR AL,CL
(4)MOV CL,4
SHL AH,CL
3.53 设BX=6D16H,AX=1100H,写出下列两条指令执行后BX寄存器中的内容。
MOV CL,06H ;CL=06H
ROL AX,CL ;AX=4004H
SHR BX,CL ;BX=01B4H
解:BX=01B4H
3.54 设初值AX=0119H,执行下列程序段后AX=?
MOV CH,AH ;CH=01H
ADD AL,AH ; AL=1AH,AF=0,CF=0
DAA ;AL=20,AF=1,CF=0
XCHG AL,CH ;AL=01H,CH=20H
ADC AL,34H ;AL=01H+34H=35H
DAA ;AL=35H
MOV AH,AL ;AH=35H
MOV AL,CH ;AL=20H
HLT
解:AX=3520H
3.55 设初值AX=6264H,,CX=0004H,在执行下列程序段后AX=?
AND AX,AX ;AX=6264H,ZF=0
JZ DONE
SHL CX,1 ;CX=0008H
ROR AX,CL ;AX=6462H
DONE:OR AX,1234H ;AX=7676H
解:AX=7676H
3.56 写出可使AX清零的几条指令。
解: AND AX,0;
MOV AX,0;
XOR AX,AX。
3.57 什么叫堆栈?说明堆栈中数据进出的顺序以及压入堆栈和弹出堆栈的操作过程。
解:堆栈中数据的进出顺序为“先进后出”
PUSH S操作过程,先SP←SP-2,再[SS:SP]←S
POP D操作过程,先D←[SS:SP],再SP←SP-2
3.58 8086~80286微处理器中PUSH和POP指令在堆栈和寄存器或存储单元之间总是传送多少位数字?
解:传送16位数字
3.59 哪个段寄存器不能从堆栈中弹出?
解:SS段寄存器不能从堆栈中弹出。
3.60 如果堆栈底部定位在存储器位置02200H,试问SS和SP中将装入什么值?
解:SS=0220H,SP=0000H
3.61 带有OFFSET的MOV指令与LEA指令比较,哪条指令的效率更高?
解:MOV指令与LEA指令的功能不同,应用的地方也不同,应该说没有可比性。在二者都可用时,带有OFFSET的MOV指令的效率更高,因为在源程序汇编时已完成OFFSET处理。带有OFFSET的MOV指令不能完全替代LEA指令。
3.62 若AX=1001H,DX=20FFH,当执行ADD AX,DX指令后,请列出和数及标志寄存器中每个位的内容(CF、AF、SF、ZF和OF)。
解:AX=3100H, CF=0;AF=1;SF=0;ZF=0;OF=0。
3.63 假如想从200中减去AL中的内容,用SUB 200,AL是否正确?如果不正确,请写出正确的指令表示。
解:不可用立即数做目的操作数
MOV BL,200
SUB BL,AL
3.64 若DL=0F3H,BH=72H,当从DL减去BH后,列出差数及标志寄存器各位的内容。
解:差数为81H,AF=0,SF=1,ZF=0,OF=0
3.65 当两个16位数相乘时,乘积放在哪两个寄存器中?并指出积的高有效位和低有效位分别防在哪个寄存器中?CF和OF两个标志位是什么?
解:乘积放在DX,AX中,高位放在DX中,低位放在AX中,当DX≠0时,CF=OF=1,否则 CF=OF=0 。
3.66
3.67 写出一个程序段,求DL寄存器中一个8位数的3次方,起初将5装入DL,要确保结果是16位的数字。
解1:16位二进制数最大可以是40的三次方,而402 = 1600 > 256,故:
MOV AL,X ;X可以是0至40的任意数
MOV DL,AL ;
MUL DL ;求X2
MOV DH,AH ;保留X2的高8位
MUL DL ;X2的低8位再乘X
MOV BX,AX ;保存X2的低8位与X的乘积
MOV AL,DH
MUL DL ;X2的高8位再乘X,乘积不会超出8位
MOV CL,8
SHL AX,CL ;把X2的高8位与X的乘积左移8位(乘以256)
ADD AX,BX ;再加上X2的低8位与X的乘积= X3
结果在AX中
解2:如果X≤15,则152 ≤255,故:
MOV AL,X ;X可以是0至15的任意数
MOV DL,AL ;
MUL DL ;求X2,,且高8位AH=0
MUL DL ;X2再乘X
结果在AX中
3.68 叙述IMUL WORD PTR[SI]指令的操作。
解:DX、AX←(AX)×[SI],即AX中的和SI、SI+1所指内存单元中的两个16位有符号数相乘,结果送DX和AX中。
3.69 叙述IMUL BX,DX,200H指令的操作。(题目有错!)
解:
3.70 当执行8位数除法指令时,被除数放在哪个寄存器中?当执行16位除法指令时,商数放在哪个寄存器中?
解:8位除法时,被除数放在AX中;16位除法时,商数放于AX中。
3.71 执行除法指令时,微处理器能检测出哪种类型的错误?叙述它的处理过程。
解:若除法运算所得的商位数大于除数的位数,即超出指令允许的商的范围,则系统将其当作除数为0处理,自动产生类型0中断,CPU将转去执行类型0中断服务程序作适当处理,此时所得的商数和余数均无效。在进行类型0中断处理时,先是将标志位进栈,IF和TF清0,接着是CS和IP的内容进栈;然后将0、1两单元的内容填入IP,而将2、3两单元的内容填入CS;进入0号中断的处理程序。
3.72 试写出一个程序段,用CL中的数据除BL中的数据,然后将结果乘2,最后的结果的存入DX寄存器中的16位数。
解:MOV AH,0
MOV AL,BL ;装入被除数
DIV CL ;除以CL
MOV AH,0 ;忽略余数
SHL AX,1 ;商乘以2
MOV DX,AX ;转存入DX
3.73 BCD码算术运算使用哪些指令?这些指令的功能是什么?在使用时对它们在指令系列中所放的位置有什么要求?
解:BCD码算术运算使用DAA、DAS指令。DAA—加法十进制调整指令,必须跟在ADD或ADC指令之后使用。DAS—减法的十进制调整指令,必须跟在SUB或SBB指令之后。
3.74 ASCII码算术运算使用哪些指令?这些指令的功能的什么?
解:非组合BCD(ASCII)码算术运算使用AAA、AAS、AAM、AAD指令。AAA—加法的ASCII码调整指令;AAS—减法的ASCII码调整指令;AAM—非组合BCD码的乘法调整指令;AAD—非组合BCD码的除法调整指令。
3.75 解释AAM指令将二进制转换为BCD码的操作过程。
解:将AL寄存器中的结果除以10,所得的商数即为高位十进制数(十位)置入AH中,所得的余数即为低位十进制数(个位)置入AL中。
3.76 设计一个程序段,将AX和BX中的8位BCD数加CX和DX中的8位BCD数(AX和CX是最高有效寄存器),加法以后的结必须存入CX和DX中。
解:ADD DX,BX
ADC CX,AX
3.77 用AND指令实现下列操作。
(1)BX“与”DX,结果存入BX (2)0AEH“与”DH
(3)DI“与”BP,结果存入DI中 (4)1234H“与”AX
(5)由BP寻址的存储单元的数据“与”CX,结果存入存储单元中。
(6)AL和WAIT存储单元中的内容相“与”,结果存入WAIT。
解:(1)AND BX,DX (2)AND DH,0AEH
(3)AND DI,BP (4)AND AX,1234H
(5)AND [BP],CX (6)AND [WAIT],AL
3.78设计一个程序段,将DH中的最左三位清零,而不改变DH中的其他地位,结果存入BH中。
解:AND DH,1FH
MOV BH,DH
3.79 用“OR”指令实现下列操作。
(1)BL“或”DH,结果存入DH (2)0AEH“或”ECX
(3)DX“或”SI,结果存入SI (4)1234H“或”EAX
(5)由BP寻址的存储单元的数据“或”CX,结果存入存储单元中。
(6)AL和WHEN存储单元中的内容相“或”,结果存入WHEN中
解:(1)OR DH,BL (2)OR ECX,0AEH
(3)OR SI,DX (4)OR EAX,1234H
(5)OR [BP],CX (6)OR [WHEN],AL
3.80 设计一个程序段,将DI中的最右5位置1,而不改变DI中的其他位,结果存入SI中。
解:OR DI,001FH
MOV SI,DI
3.81 设计一个程序段,将AX中最右4位置1,将AX中的最左3位清零,并且把AX中的7、8、9位取反。
解:OR AX,000FH
AND AX,1FFFH
XOR AX,0380H
3.82选择正确的指令以实现下列任务。
(1)把DI右移3位,再把0移入最高位
(2)把AL中的所有位左移一位,使0移入最低位
(3)AL循环左移3位
(4)DX带进位循环右移1位
解:(1)MOV CL,3
SHR DI,CL
(2)SHL DI,1
(3)MOV CL,3
ROL AL,3
(4)RCR DX,1
3.83如果要使程序无条件的转移到下列几种不同距离的目标地址,应使用哪种类型的 JMP指令?
(1)假定位移量为0120H字节
(2)假定位移量为0012H字节
(3)假定位移量为12000H字节
解:(1)段内近转移
(2)段内短转移
(3)段间远转移
3.84 近转移和远转移分别通过什么改变哪些寄存器的值来修改程序地址?
解:近转移只需修改IP寄存器内容,而远转移不光要修改IP值还要修改段寄存器CS的内容。
3.85 试比较JMP [DI]与JMP FAR PTR[DI]指令的操作有什么区别?
解:二者都为间接转移,JMP [DI]的目标地址存放于存储器DS:[DI]的2个连续地址单元中,仅改变IP,属于段内转移;而JMP FAR[DI]的目标地址存放于存储器DS:[DI]的4个连续地址单元中,不但改变IP而且改变CS,属于段间远转移,程序会转移到另一代码段中的目标地址去执行后续命令。
3.86用串操作指令设计实现如下功能的程序段:先将100个数从6180H处搬移到2000H处;再从中检索出等于AL中字符的单元(一个?),并将此单元值换成空格符。
解:CLD CLD
MOV CX,100 MOV CX,100
展开阅读全文