现代微型计算机原理与接口技术课后答案

更新时间:2023-04-08 05:32:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

全国高等学校“十一五”重点规划教材

(习题解答)

主编:杨文显

副主编:杨晶鑫

编著:黄春华胡建人宓双

清华大学出版社

习 题 一

1. 8086CPU 由哪几个部件构成?它们的主要功能各是什么?

8086 CPU 由指令执行部件EU 和总线接口部件BIU 两个部份组成。指令执行部件主要功能是执行指令。总线接口部件的主要功能是完成访问存储器或I/O 端口的操作:

? 形成访问存储器的物理地址;

? 访问存储器取得指令并暂存到指令队列中等待执行;

? 访问存储器或I/O 端口以读取操作数参与EU 运算,或存放运算结果。

2. 什么是逻辑地址?什么是物理地址?它们各自如何表示?如何转换?

程序中使用的存储器地址称为逻辑地址,由16位“段基址”和16位“偏移地址”(段内地址)组成。段基址表示一个段的起始地址的高16位。偏移地址表示段内的一个单元距离段开始位置的距离。访问存储器的实际地址称为物理地址,用20位二进制表示。将两个16位二进制表示的逻辑地址错位相加,可以得到20位的物理地址:

物理地址=段基址×16 + 偏移地址

在32位CPU 的保护模式下,“逻辑地址”的表示产生了一些变化,请参考第8章的相关内容。

3. 什么是?堆栈??它有什么用处?在使用上有什么特点?

堆栈是内存中的一块存储区,用来存放专用数据。例如,调用子程序时的入口参数、返回地址等,这些数据都按照“先进后出”的规则进行存取。SS 存放堆栈段的段基址,SP 存放当前堆栈栈顶的偏移地址。数据进出堆栈要使用专门的堆栈操作指令,SP 的值在执行堆栈操作指令时根据规则自动地进行修改。

4. 设X=36H ,Y=78H ,进行X+Y 和X -Y 运算后FLAGS 寄存器各状态标志位各是

什么?

5. 按照传输方向和电气特性划分,CPU 引脚信号有几种类型?各适用于什么场合?

CPU 引脚传输的信号按照传输方向划分,有以下几种类型: 输出:信号从CPU 向外部传送;

输入:信号从外部送入CPU ;

双向:信号有时从外部送入CPU ,有时从CPU 向外部传送。

双向信号主要用于数据信号的传输;输出信号用于传输地址信号和一些控制

信号;输入信号主要用于传输外部的状态信号(例如READY)和请求(中断、DMA)

信号。

按照信号的电器特性划分,有以下几种类型:

一般信号:用来传输数据/地址信号时,高电平表示“1”,低电平表示“0”;用来

表示正逻辑的控制/状态信号时,“1”表示有效,“0”表示信号无效;

用来表示负逻辑的控制/状态信号时,“0”表示有效,“1”表示信号无

效。

三态信号:除了高电平、低电平两种状态之外,CPU内部还可以通过一个大的电

阻阻断内外信号的传送,CPU内部的状态与外部相互隔离,也称为“悬

浮态”。CPU放弃总线控制权,允许其他设备使用总线时,将相关信

号置为“悬浮态”。

6.8086CPU以最小模式工作,现需要读取内存中首地址为20031H的一个字,如何执

行总线读周期?请具体分析。

为了读取内存中首地址为20031H的一个字,需要执行二个总线读周期。

第一个总线周期读取20031H字节内容,进行的操作如下。

T1状态:IO

M= 1,指出CPU是从内存读取数据。随后CPU从地址/状态复用线/

(A19/S6~A16/S3)和地址/数据复用线(AD15~AD0)上发出读取存储器的20位地址20031H。

为了锁存地址,CPU在T1状态从ALE引脚输出一个正脉冲作为地址锁存信号。

由于需要读取高8位数据线上的数据(奇地址),BHE= 0。

为了控制总线收发器8286接受数据,R

DT= 0。

/

T2状态:地址信息撤消,地址/数据线AD15~AD0进入高阻态,读信号RD开始变为低电平(有效),DEN=0,用来开放总线收发器8286。

T3状态: CPU检测READY引脚信号。若READY为高电平(有效)时,表示存储器或I/O端口已经准备好数据,CPU在T3状态结束时读取该数据。若READY为低电平,则表示系统中挂接的存储器或外设不能如期送出数据,要求CPU在T3和T4状态之间插入1个或几个等待状态Tw。

T W状态:进入T W状态后,CPU在每个T W状态的前沿(下降沿)采样READY信号,若为低电平,则继续插入等待状态T W。若READY信号变为高电平,表示数据已出现在数据总线上,CPU从AD15~AD0读取数据。

T4状态:在T3(T W)和T4状态交界的下降沿处,CPU对数据总线上的数据进行采样,完成读取数据的操作。

第二个总线周期读取地址为20032H字节的内容。CPU发出的信号与第一个周期类似,区别在于T1状态CPU发出存储器地址为20032H,由于只需要读取低8位数据线上的数据(偶地址),BHE=1。

在CPU内部,从20031H读入的低位字节和从20032H读入的高位字节被拼装成一个字。

7.8086CPU有几种工作方式?各有什么特点?

8086/8088 CPU有两种工作模式:最大工作模式和最小工作模式。

所谓最小工作模式,是指系统中只有一个8086/8088处理器,所有的总线控制信号都由8086/8088 CPU直接产生,构成系统所需的总线控制逻辑部件最少,最小工作模式因此得名。最小模式也称单处理器模式。

最大模式下,系统内可以有一个以上的处理器,除了8086/8088作为“中央处理器”之外,还可以配置用于数值计算的8087“数值协处理器”、用于I/O管理的“I/O协处理器”8089。各个处理器发往总线的命令统一送往“总线控制器”,由它“仲裁”后发出。

CPU两种工作模式由MX

MN接高电平,CPU工作在最小模式;

/

/

MN引脚决定,MX

将MX

MN接地,CPU工作在最大模式。

/

8.分析8086CPU两个中断输入引脚的区别,以及各自的使用场合。

INTR用于输入可屏蔽中断请求信号,电平触发,高电平有效。中断允许标志IF= 1时才能响应INTR上的中断请求。

NMI用于输入不可屏蔽中断请求信号,上升沿触发,不受中断允许标志的限制。CPU一旦测试到NMI请求有效,当前指令执行完后自动转去执行类型2的中断服务程序。

NMI引脚用于连接CPU外部的紧急中断请求,例如内存校验错,电源掉电报警等。INTR 引脚用于连接一般外部设备的中断请求。

9.什么是时钟周期、总线周期、指令周期?它们的时间长短取决于哪些因素?

时钟周期:CPU连接的系统主时钟CLK一个周期的时间。CLK信号频率越高,时钟周期越短。

总线周期:CPU通过外部总线对存储器或I/O端口进行一次读/写操作的过程称为总线周期。8086CPU总线周期一般由四个时钟周期组成,存储器/IO设备(接口)速度不能满足CPU要求时,可以增加一个或多个时钟周期。

指令周期:CPU执行一条指令的时间(包括取指令和执行该指令所需的全部时间)称为指令周期。指令周期的时间主要取决于主时钟的频率和指令的复杂程度,它也受到存储器或IO设备接口工作速度的影响。

10.在一次最小模式总线读周期中,8086CPU先后发出了哪些信号?各有什么用处?

T1状态:IO

M指出CPU是从内存(1)还是从IO端口(0)读取数据。随后CPU从/

地址/状态复用线(A19/S6~A16/S3)和地址/数据复用线(AD15~AD0)上发出读取存储器的20位地址,对IO端口访问时从AD15~AD0上发出16位地址。

为了锁存地址,CPU在T1状态从ALE引脚输出一个正脉冲作为地址锁存信号。

如果需要读取高8位数据线上的数据(奇地址/读取一个字),BHE= 0。

为了控制总线收发器8286数据传输方向,R

DT= 0。

/

T2状态:读信号RD开始变为低电平(有效),DEN=0,用来开放总线收发器8286。

T3状态: CPU检测READY引脚信号。若READY为高电平(有效),表示存储器或I/O 端口已经准备好数据,进入T4状态;若READY为低电平(无效),表示存储器或I/O端口尚未准备好数据,插入一个或多个T W状态,直到READY变为高电平。

T4状态:在T3(T W)和T4状态交界的下降沿处,CPU对数据总线上的数据进行采样,完成读取数据的操作。

11.结合指令?OUT 21H, AL?,具体叙述最大模式?总线写周期?总线上的相关信号。

T1状态:地址/数据复用线(AD15~AD0)上出现访问IO端口的16位地址21H。由于地址为奇数,需要通过高8位数据线访问端口,BHE= 0。

T2状态:IOW= 0,表示本周期对IO端口进行写操作。地址/数据复用线(AD15~AD0)上出现来自AL的8位数据。

T3状态:若READY为高电平(有效),表示I/O端口已经准备好接收数据。反之,表示I/O端口尚未准备好接收数据,需要CPU插入T W周期进行等待,直到READY出现高电平(有效)。

T4状态:CPU结束本周期。

习题二

1.内存储器主要分为哪两类?它们的主要区别是什么?

内存储器分为随机存取存储器RAM(Radom Access Memory)和只读存储器ROM(Read Only Memory)两类。

RAM中信息可以按地址读出,也可以按地址写入。RAM具有易失性,掉电后原来存储的信息全部丢失,不能恢复。

ROM 中的信息可以按地址读出,但是在普通状态下不能写入,它的内容一般不能被改变。ROM具有“非易失性”,电源关闭后,其中的信息仍然保持。

2.说明SRAM、DRAM、MROM、PROM和EPROM的特点和用途。

SRAM:静态RAM,读写速度快,但是集成度低,容量小,主要用作Cache或小系统的内存储器。

DRAM:动态RAM,读写速度慢于静态RAM,但是它的集成度高,单片容量大,现代微型计算机的“主存”均由DRAM构成。

MROM:掩膜ROM,由芯片制作商在生产、制作时写入其中数据,成本低,适合于批量较大、程序和数据已经成熟、不需要修改的场合。

PROM:可编程ROM,允许用户自行写入芯片内容。芯片出厂时,所有位均处于全“0”或全“1”状态,数据写入后不能恢复。因此,PROM只能写入一次。

EPROM:可擦除可编程只读存储器,可根据用户的需求,多次写入和擦除,重复使用。用于系统开发,需要反复修改的场合。

3.已知一个SRAM芯片的容量为8K×8b,该芯片有一个片选信号引脚和一个读/写控制

引脚,问该芯片至少有多少个引脚?地址线多少条?数据线多少条?

根据存储芯片地址线数量计算公式,k=log2(1024*8)= log2(213)=13,即总计有13根地址线。另有8根数据线、2根电源线。所以该芯片至少有25(=13+8+1+1+2)根引脚。

4.巳知一个DRAM芯片外部引脚信号中有4根数据线,7根地址线,计算它的容量。

根据存储容量计算公式S=2k×I,可得该芯片的存储容量为:214*4=16K×4bit(位),也可表示为64Kb=8KB(字节)。

5.32M×8b的DRAM芯片,其外部数据线和地址线为多少条?

根据存储芯片地址线数量计算公式,k=log2(1024*1024*32)= log2(225)=25,即需要25根地址线。但是,由于DRAM芯片的地址采用分时输入的方法,所以实际需要的地址线只有理论值的一半,此处为13根。数据线8根。

6. DRAM 为什么需要定时刷新?

DRAM 靠MOS 管极间电容存储电荷的有无决定所存信息是0还是1,由于漏电流的存在,它存储的信息不能长时间保存,需要定时重新写入,称为“刷新”。

7. 74LS138译码器的接线如图2.28所示,写出0Y 、2Y 、4Y 、6Y 所决定的内存地址范

围。

从图看出,该存储系统的片内地址线有13根(A12-A0),是一个由8KB 存储芯片组成的存储系统,A17地址线不确定。它的地址分布为:

00?0, CBA?, ????, ????, ????

其中,CBA 作为译码输入,与输出选择有关;“?”

表示可以为“0”,也可以为“1”。

于是:

0Y 对应的内存地址范围是:

00000H —01FFFH ;或20000H —21FFFH 。 2Y 对应的内存地址范围是:

04000H —05FFFH ;或24000H —25FFFH 。

4Y 对应的内存地址范围是:

08000H —09FFFH ;或28000H —29FFFH 。

6Y 对应的内存地址范围是:

0C000H —0DFFFH ;或2C000H —2DFFFH 。

8. 叙述EPROM 的编程过程,并说明EPROM 和EEPROM 的不同点。

EPROM 的编程过程

标准编程方式:

Vpp 上加编程电压,地址线、数据线上给出要编程单元的地址及其数据,并使CE =0、OE =1。上述信号稳定后,在PRG 端加上宽度为50±5ms 的负脉冲,就可将一个字节的数据写入相应的地址单元中。不断重复这个过程,将数据逐一写入。

快速编程方式:

使用100μs 的编程脉冲依次写完所有要编程的单元,然后从头开始校验每个写入的字节。若写得不正确,则重写这个单元。写完后再校验,不正确还可再写,直到全部正确。

EPROM 和EEPROM 的不同点:

EPROM 芯片用紫外线光照射擦除芯片的内容,擦除时需要把芯片从电路板上拔下,擦

图2-28

译码

除操作对整个芯片进行。EPROM芯片编程需要外加“高电压”,所以需要专用的“编程器”才能实现。EPROM的编程一般情况下对整个芯片进行。

EEPROM芯片的擦除用电信号实现,无需把芯片从电路板上拔下,可以进行“在系统编程”。EEPROM以字节为单位重写,EEPROM没有单独的擦除操作,写入就意味着擦除了原来的内容,所以使用比EPROM快速方便。相比较而言,EEPROM芯片的编程比较接近RAM 的写入,它们之间的区别主要体现在速度上:RAM写入与读出的速度相近,不需要其他的联络信号;EEPROM的写入比起读出明显要慢,为了掌握写入时间,EEPROM通常设置了一根“状态”引脚,供联络使用。

9.下列容量的ROM芯片除电源和地线,还有多少个输入引脚和输出引脚?写出信号名

称。

(1)64×4 (2)512×8 (3)128K×8 (4)16K×8 (5)1M×16 根据存储容量计算公式可得以上各芯片的地址、数据引脚分别为:

64×4:地址线k= log2(64)= log2(26)= 6根,数据线=4根;

512×8:地址线k= log2(512)= log2(29)= 9根,数据线=8根;

128k×8:地址线k= log2(128*1024)= log2(217)= 17根,数据线=8根;

16k×8:地址线k= log2(16*1024)= log2(214)= 14根,数据线=8根;

1M×16:地址线k= log2(1024*1024)= log2(220)= 20根,数据线=16根。

此外,所有ROM芯片都需要一根片选信号引脚;

对于PROM,EPROM通常还需要“输出允许”和“编程脉冲”输入引脚。

EEPROM芯片除了有“片选”、“输出允许”和“写允许”外,通常还有表示“写入完成”的状态信号引脚。

10.已知RAM芯片的容量为

(1)16K×8 (2)32K×8 (3)64K×8 (4)2K×8

如果RAM的起始地址为3400H、则各RAM对应的末地址为多少?

存储器的末地址=首地址+芯片内字节数(容量)-1

上述各芯片对应RAM的末地址为:

16K×8:末地址是3400H+4000H-1= 73FFH

32K×8:末地址是3400H+8000H-1= B3FFH

64K×8:末地址是3400H+10000H-1= 133FFH

2K×8:末地址是3400H+800H-1= 3BFFH

11.如果存储器起始地址为1800H,末地址为1FFFH,求该存储器的容量。

该存储器的容量为:

(1FFFH-1800H+1)×8 = 800H×8,该存储器有2048×8个位,也可以写作2KB。

12.有一个存储体,其地址线15条,数据线8条,则

1)该存储体能够存储多少个汉字?

2)如果该存储体由2K ×4位的芯片组成,需要多少片?

3)采用什么方法扩展?分析各位地址线的使用。

该存储体容量为215×8=32KB ,存储一个汉字需要二个字节,因此,它能够存储16384(16K )个汉字。

需要2K ×4位的芯片32片,[(32K ×8)/(2K ×4)=32 ]。

可采用字位全扩展方法,由2片4位的芯片组成1组8位的存储单元,16组扩展成32K 的8位存储体。芯片直接使用的地址线(片内地址)11根(A0-A10),另外需要4根高位地址,连接到4-16译码器输入端,产生16个译码信号用作16个芯片组的片选信号。剩余的地址线用来确定该存储体的首地址。

13. 试说明Flash Memory 芯片的特点及28F040的编程过程。

Flash Memory 也称为“闪速存储器”,有时直接称之为“Flash ”。Flash 既有ROM 非易失性的特点,又能够在线擦除和重写,既可读又可写,同时有很高的存取速度,具有集成度高,价格低,耗电少等优点。目前存取速度已突破了30ns ,掉电后信息可以保持10年。

Flash 的编程方法与E 2PROM 相同,28F040的编程写入过程采用字节编程方式。首先,向28F040状态寄存器写入命令10H ,再在指定的地址单元写入相应数据。接着查询状态,判断这个字节是否写好,若写好则重复上面过程写入下一个字节,直到全部字节写入。28F040的编程速度很快,一个字节的写入时间仅为8.6μs 。

14. 利用全地址译码将6264芯片接到8088系统总线上,地址范围为30000H ~31FFFH ,

画出逻辑图。

全地址译码可以保证存储器芯片上的每一个单元在整个内存空间中具有唯一的、独占的一个地址。参考教材相关内容,6264芯片有13根地址线,剩余的高位7根地址线通过译码组合确定该芯片的起始地址(30000H )。

由30000H 地址得出对应的地址线状态为:

0011 000 0 0000 0000 0000

可以看出A 13~A 19地址线为0011 000,所以译码组合

应逻辑为:

1CS = 13A ·41A

·15A ·A 16·A 17·18A ·19A

=(13A ·41A ·15A ·18A ·19A )·(A16·A17)

= A 13+A 14+A 15+A 18+A 19+ A 16·A 17

具体逻辑如右图所示。

15. 若用2164芯片构成容量为128KB 的存储器,需多少片2164? 至少需多少根地址线?其中多少根用于片内寻址?多少根用于片选译码?

2164A 是容量为64K ×1位的动态随机存储器芯片,构成128KB 的存储器需要2164A 芯全地址译码连接图

片16片[128K×8/(64K×1)=16 ]。

由于地址空间为128K,需要的地址线总数为17根(217=128K)。其中,片内地址线16根(216 =64K),片选地址线1根(17-16=1,)。每8个2164芯片构成一组,进行位扩展,得到64KB存储器。两个这样的“组”进行地址扩展,构成128KB的存储器。

16.某8088系统用2764 ROM芯片和6264 SRAM芯片构成16KB的内存。其中,RAM

的地址范围为FC000H-FDFFFH,ROM的地址范围为FE000H-FFFFFH。试利用74LS138译码,画出存储器与CPU的连接图,并标出总线信号名称。

2764和6264均为8KB的存储芯片,需要13根地址线(A0~A12)用于片内寻址。8088系统的其他地址线(A13~A19)用于产生片选信号。

FC000H的地址线状态为:1111 110 0 0000 0000 0000

FE000H的地址线状态为:1111 111 0 0000 0000 0000将A13~A15用作译码输入,其他地址(A16~A19=1111)用作译码控制,可以得到如下译码控制电路,连接如下图所示。

17.存储周期指的是(A )。

A.存储器进行连续读或写操作所允许的最短时间间隔B.存储器的读出周期

C.存储器进行连续写操作所允许的最短时间间隔D.存储器的写入周期存储周期是指连续两次访问存储器之间所需的最小时间。存取时间是CPU访问一次存储器(写入和读出)所需的时间。存储周期等于存取时间加上存储器的恢复时间。

所以应选择A。

18.某一EPROM芯片,其容量为32K×8,除电源和地线外,最小的输入引脚和输出引

脚分别为(C )。

A. 15和8; B.32和8; C.17和8; D.18和10;

容量为32K×8的EPROM芯片,其数据线为8根,地址线为15根,片选线1根,读写

控制线1根。其中地址线、片选线、读写控制线均为EPROM的输入信号,共17根。数据线在正常工作状态下用于EPROM输出,计8根。

所以应选择C。

19.掩膜ROM在制造时通过光刻是否连接MOS管来确定0和1,如果对应的某存储单元

位没有连接MOS管,则该位信息为(C )。

A.不确定; B. 0; C.1; D.可能为0,也可能为1;

掩膜ROM芯片内每一个二进制位对应于一个MOS管,该位上存储的信息取决于这个MOS管的栅极是否被连接到字线上。栅极被连接,该单元被选中时,漏极与“地”相通,输出低电平,该位存储的信息就是0。栅极未连接时,尽管字线被选中,输出端与“地”仍然不能导通,输出高电平,对应的信息为1。

所以应选择C。

20.SRAM和DRAM存储原理不同,它们分别靠(A )来存储0和1的。

A.双稳态触发器的两个稳态和极间是否有足够的电荷

B.内部熔丝是否断开和双稳态触发器

C.极间电荷和浮置栅是否积累足够的电荷

D.极间是否有足够的电荷和双稳态触发器的两个稳态

静态随机存储器(SRAM)的每一个位存储单元有一个双稳态触发器,由4个晶体管组成,它们的状态确定了该存储单元存储的1位二进制信息。而动态随机存储器(DRAM)一般采用单管电路组成,它由一个MOS管T1和一个电容C构成。写入时其信息通过位线(数据线)存人电容C中(写入“1”对电容充电,写入“0”则对电容放电);读出时存储在电容C上的电荷通过T1输出到位线上。

所以应选择A。

习题三

1.如果用24b储存一个无符号数,这个数的范围是什么?如果储存的是一个补码表示的

有符号数,那么这个数的范围又是什么?

答:如果用24b储存一个无符号数,这个数的范围应为:0~224-1

如果用24b储存一个补码表示的有符号数,这个数的范围应为:-223~+223-1

2.用符号?〉?把下面的数按从大到小的顺序?连接?起来

[X1]补=10110111 [X2]原=10110111 [X3]反=10110111 [X4]补=10110110 [X5]无符号数=10110111 解:X1=-0100 1001B, X2=-011 0111B, X3=-0100 1000B, X4=-0100 1010B, X5=+1011 0111B

因此:X5>X2>X3>X1>X4

3.用8位补码完成下列运算,用二进制?真值?的格式给出运算结果,并指出运算后

CF、OF、ZF、SF、PF标志位的状态。

(1)127+126 (2)126-127 (3)-100-120 (4)-100-(-120)

解:(1)127+126

[127]补=0111 1111,[126]补=0111 1110,

[127+126]补=1111 1101,[127+126]=-0000 0011(溢出)

COZSP=01010

(2)126-127

[126]补=0111 1110,[-127]补=1000 0001,

[126-127]补=1111 1111,[126-127]=-000 0001

COZSP=10011

(3)-100-120

[-100]补=1001 1100,[-120]补=1000 1000,

[-100-120]补=0010 0100,[-100-120]=+0010 0100(溢出)

COZSP=01001

(4)-100-(-120)

[-100]补=1001 1100,[-120]补=1000 1000,[ [-120]补]求补=0111 1000,

[-100-(-120)]补=0001 0100,[-100-(-120)]=+0001 0100

COZSP=00001

4.把二进制代码1001011101011000分别?看作?是:

1EH

30H

41H

42H

43H

0FFH

00H

0CAH

0FFH

00H

0FEH

0FFH

44H

43H 0020H

002EH X Y

(1)二进制无符号数(2)二进制补码(3)压缩BCD码(4)非压缩BCD码哪一种情况下它代表的?值?最大?

答:看作二进制无符号数时,它代表的“值”最大。

分析:看作二进制补码时,它代表一个负数,而其它的情况下,它均为正数。因此,看作二进制补码时,它代表的值最小。

把这组代码用十六进制数字形式写出:9758

对于无符号数,它的值等于十六进制的9758H;

对于压缩BCD码,它的值等于十进制的9758,显然小于9758H;

对于非压缩BCD码,它的值等于十进制的78,显然更小于9758H;

因此,看作二进制无符号数时,它代表的“值”最大。

5.某数据段内有如下数据定义:

X db 30, 30H, ‘ABC’, 2-3, ?, 11001010B

dw 0FFH,-2, ?CD?

Y dd 20 dup(15, 3 dup(?), 0)

Z db 3 dup(?)

W dw Z-X

假设变量X的偏移地址为20H。

(1)写出变量X各数据在内存中的具体位置和相关内存单元的值。

(2)写出变量Y,Z的偏移地址。

(3)写出变量W的值

答:(1)变量X各数据在内存中的具体位置和相关内存单元的

值如右图。

变量Y的偏移地址为002EH;

变量Z的偏移地址为002EH+4×5×20=01BEH

变量W的值等于变量Z和X偏移地址之差

01BEH-0020H=019EH

它等于变量X、Y所占用内存单元的字节数。

6.下列指令的源操作数段基址在哪个段寄存器中?

(1)MOV AX, [BP][SI] (2)MOV AX, CS:8[DI]

(3)MOV AX, 2[EBP*1] (4)MOV AX, FS:4[ESP]

(5)MOV AX, 2[EBP][EAX] (6)MOV AX, [ECX][EBP*4]

(7)MOC AX, [EDX][EBP] (8)MOV AX, ES:10[EBP][EAX*2]

答:各指令源操作数段基址使用的段寄存器如下:

(1)SS (2)CS (3)SS (4)FS

(5)SS (6)DS (7)DS (8)ES

7.判断下列指令是否正确。若不正确,指出错误原因

(1)MOV AX, [EBX] (2)MOV SI, DL

(3)MOV EBP, [ESP][EAX*3](4)LEA AX, 3006H

(5)MOV [BP][DI], 0 (6)MOV [SI], [DI]

(7)MOV ES, 1000H (8)MOV AX, X+2

(9)MOV AX, CX+2 (10)MOV [EAX][EAX*2], AL

答:(1)指令MOV AX, [EBX] 是正确的。

(2)指令MOV SI, DL是错误的,两个操作数类型不匹配。

(3)指令MOV EBP, [ESP][EAX*3] 是错误的,比例因子不能为3。

(4)指令LEA AX, 3006H是错误的,LEA指令的源操作数必须为内存操作数。

(5)指令MOV [BP][DI], 0是错误的,操作数类型无法确定。

(6)指令MOV [SI], [DI] 是错误的,不能同时出现两个内存操作数。

(7)指令MOV ES, 1000H是错误的,装载段寄存器时,源操作数不能为立即数。

(8)如果“X”是用常数表达式定义的符号(例如:X EQU 5+6),或者是用“DW”定义的内存变量,指令MOV A X, X+2是正确的。否则这条指令是错误的。

(9)指令MOV AX, CX+2是错误的,源操作数表达式CX+2不是一个可以直接计算的“常数表达式”。

(10)指令MOV [EAX][EAX*2], AL是正确的。

8.现有(DS)=2000H ,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,

(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21203H)=65H,说明下列指令执行后AX寄存器的内容。

(1)MOV AX, 1200H

(2)MOV AX, BX

(3)MOV AX, [1200H]

(4)MOV AX, [BX]

(5)MOV AX, 1100H[BX]

(6)MOV AX, [BX][SI]

(7)MOV AX, 1100H[BX][SI]

答:(1)指令MOV AX, 1200H执行后,(AX)=1200H (立即数操作数)。

(2)指令MOV AX, BX执行后,(AX)=0100H (寄存器操作数)。

(3)指令MOV AX, [1200H] 执行后,(AX)=4C2AH(直接地址,EA=1200H)

(4)指令MOV AX, [BX] 执行后,(AX)=3412H(寄存器间接寻址,EA=0100H)(5)指令MOV AX, 1100H[BX] 执行后,(AX)= 4C2AH(相对地址,EA=1200H)(6)指令MOV AX, [BX][SI] 执行后,(AX)=7856H(基址变址寻址,EA=0102H)(7)指令MOV AX, 1100H[BX][SI] 执行后,(AX)=65B7H

(相对基址变址寻址,EA=1202H)

9.下面两条指令的功能有什么区别?

MOV AX, BX

MOV AX, [BX]

答:指令“MOV AX, BX”把BX寄存器的内容装入到AX中。

指令“MOV AX, [BX]”把内存储器一个字的内容装入AX寄存器。该字的段基址在DS中,偏移地址在BX中。

10.写出执行以下计算的指令序列,其中各变量均为16位有符号数。

(1)Z←W+(Z-X)

(2)Z←W-(X+6)-(R+9)

(3)Z←(W*X)/(Y+6), R←余数

(4)Z←(W-X)/(5*Y)*2

解:

(1)MOV AX, W

MOV BX, Z

SUB BX, X

ADD AX, BX

MOV Z, AX

(2)MOV AX, W

MOV BX, X

ADD BX, 6

SUB AX, BX

MOV BX, R

ADD BX, 9

SUB AX, BX

MOV Z, AX

(3)MOV AX, W

IMUL X

MOV BX, Y

ADD B X, 9

IDIV BX

MOV Z, AX

MOV R, DX

(4)MOV AX, Y

MOV BX, 5

IMUL BX

MOV BX, AX

MOV AX, W

SUB AX, X

MOV CX, 2

IMUL CX

IDIVBX

MOV Z, AX

11.一个双字长有符号数存放在DX(高位)AX(低位)中,写出求该数相反数的指令序

列。结果仍存入DX,AX寄存器

解:NOT DX ;首先将(DX, AX)取反

NOT AX

ADD AX, 1 ;最低位加1,注意:不能用INC指令

ADC DX, 0 ;把进位(如果有)传递到高位

12.内存缓冲区BUFFER定义如下,按照要求,写出指令序列

BUFFER DB 20 DUP(?)

(1)将缓冲区全部置为0,并使执行时间最短

(2)将缓冲区全部置为空格字符(ASCII代码20H),使用的指令条数最少

(3)将缓冲区各字节依次设置为0,1,2,3,4,……,19

(4)将缓冲区各字节依次设置为0,-1,-2,-3,-4,……,-19

(5)将缓冲区各字节依次设置为30,29,28,27,……,11

(6)将缓冲区各字节依次设置为0,2,4,6,8,……,38

(7)将缓冲区各字节依次设置为0,1,2,3,0,1,2,3,……,3

解:

(1)XOR EAX, EAX

MOV DWORD PTR [BUFFER], EAX

MOV DWORD PTR [BUFFER+4], EAX

MOV DWORD PTR [BUFFER+8], EAX

MOV DWORD PTR [BUFFER+12], EAX

MOV DWORD PTR [BUFFER+16], EAX

(2)MOV AL, 20H

MOV CX, 20

LEA BX, BUFFER

ONE:MOV [BX], AL

INC BX

LOOP ONE

(3)XOR BX, BX

MOV CX, 20

ONE:MOV BUFFER[BX], BL

INC BX

LOOP ONE

(4)XOR BX, BX

XOR AL, AL

MOV CX, 20

ONE:MOV BUFFER[BX], AL

INC BX

DEC A L

LOOP ONE

(5)XOR BX, BX

MOV AL, 30

MOV CX, 20

ONE:MOV BUFFER[BX], AL

INC BX

DEC A L

LOOP ONE

(6)XOR BX, BX

XOR AL, AL

MOV CX, 20

ONE:MOV BUFFER[BX], AL

INC BX

ADD AL, 2

LOOP ONE

(7)XOR BX, BX

MOV CX, 5

ONE:

MOV BUFFER[BX], 0

MOV BUFFER[BX+1], 1

MOV BUFFER[BX+2], 2

MOV BUFFER[BX+3], 3

ADD BX, 4

LOOP ONE

13.编写循环结构程序,进行下列计算,结果存入RESUL T内存单元

(1)1+2+3+4+5+6+ …… +100

(2)1+3+5+7+9+11+ …… +99

(3)2+4+6+8+10+ …… +100

(4)1+4+7+10+13+ …… +100

(5)11+22+33+44+ …… +99

解:

(1)CODE SEGMENT

ASSUME CS: CODE

RESUL T DW ?

START:

XOR AX, AX

MOV CX, 100

AGAIN: ADD AX, CX

LOOP AGAIN

MOV RESUL T, AX

MOV AX, 4C00H

INT 21H

CODE ENDS

END S TART

(2)CODE SEGMENT

ASSUME CS: CODE

RESUL T DW ?

START:

XOR AX, AX

MOV CX, 50

MOV BX, 1

AGAIN: ADD AX, BX

ADD BX, 2

LOOP AGAIN

MOV RESUL T, AX

MOV AX, 4C00H

INT 21H

CODE ENDS

END S TART

(3)CODE SEGMENT

ASSUME CS: CODE

RESUL T DW ?

START:

XOR AX, AX

MOV CX, 50

MOV BX, 2

AGAIN: ADD AX, BX

ADD BX, 2

LOOP AGAIN

MOV RESUL T, AX

MOV AX, 4C00H

INT 21H

CODE ENDS

END S TART

(4)CODE SEGMENT

ASSUME CS: CODE

RESUL T DW ?

START:

XOR AX, AX

MOV CX, 34

MOV BX, 1

AGAIN: ADD AX, BX

ADD BX, 3

LOOP AGAIN

MOV RESUL T, AX

MOV AX, 4C00H

INT 21H

CODE ENDS

END S TART

(5)CODE SEGMENT

ASSUME CS: CODE

RESUL T DW ?

START:

XOR AX, AX

MOV CX, 9

MOV BX, 11

AGAIN: ADD AX, BX

ADD BX, 11

LOOP AGAIN

MOV RESUL T, AX

MOV AX, 4C00H

INT 21H

CODE ENDS

END S TART

14.已知ARRAY是5行5列的有符号字数组,编写程序,进行下列计算(假设和仍然为

16b,不会产生溢出)

(1)求该数组第4列所有元素之和(列号从0开始)

(2)求该数组第3行所有元素之和(行号从0开始)

(3)求该数组正对角线上所有元素之和

(4)求该数组反对角线上所有元素之和

解:假设数据段已定义如下:

DA TA SEGMENT

ARRAY DW 1, 6, 9, 23,12 ;定义数组ARRA Y

DW 54, 23, 15, -92, 37 ;每一行5个数据

DW -99, 231, 76, 81, 90 ;共5行

DW 33, 67, 81, -99, 0 ;共计25个数据

DW 123, -52, 77, -180, 89

SUM DW ? ;SUM存放结果

DA TA ENDS

(1)CODE SEGMENT

ASSUME CS: CODE, DS: DA TA

START: MOV AX, DA TA

MOV DS, AX

MOV AX, 0 ;累加器在循环之前清零

MOV CX, 5 ;计数器置初值

MOV SI, 4*2 ;第1行第4列元素在数组内的位移NEXT: ADD AX, ARRA Y[SI]

ADD SI, 5*2 ;SI指向下一行第4列元素

LOOP NEXT

MOV SUM, AX

MOV AX, 4C00H

INT 21H

CODE ENDS

END START

(2)CODE SEGMENT

ASSUME CS: CODE, DS: DA TA

START: MOV AX, DA TA

MOV DS, AX

MOV AX, 0 ;累加器在循环之前清零

MOV CX, 5 ;计数器置初值

MOV SI, 3*5*2 ;第3行第0列元素在数组内的位移NEXT: ADD AX, ARRA Y[SI]

ADD SI, 2 ;SI指向本行下一列元素

LOOP NEXT

MOV SUM, AX

MOV AX, 4C00H

INT 21H

CODE ENDS

END START

(3)CODE SEGMENT

ASSUME CS: CODE, DS: DA TA

START: MOV AX, DA TA

MOV DS, AX

MOV AX, 0 ;累加器在循环之前清零

MOV CX, 5 ;计数器置初值

MOV SI, 0 ;第0行第0列元素在数组内的位移NEXT: ADD AX, ARRA Y[SI]

ADD SI, 5*2+2 ;SI指向正对角线上下一个元素

LOOP NEXT

MOV SUM, AX

MOV AX, 4C00H

INT 21H

CODE ENDS

END START

(4)CODE SEGMENT

ASSUME CS: CODE, DS: DA TA

START: MOV AX, DA TA

MOV DS, AX

MOV AX, 0 ;累加器在循环之前清零

MOV CX, 5 ;计数器置初值

MOV SI, 4*2 ;第0行第4列元素在数组内的位移NEXT: ADD AX, ARRA Y[SI]

ADD SI, (5-1)*2 ;SI指向反对角线上下一个元素

LOOP NEXT

MOV SUM, AX

MOV AX, 4C00H

INT 21H

CODE ENDS

END START

15.变量X, Y, Z均为一字节压缩BCD码表示的十进制数,写出指令序列,求它们的和(用

本文来源:https://www.bwwdw.com/article/nnxl.html

Top