微型计算机原理及应用习题集

更新时间:2024-05-04 16:08:01 阅读量: 综合文库 文档下载

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

第1章 概述

一、填空题

1.电子计算机主要由 运算器 、 控制器 、 存储器 、 输入设备 和 输出设备 等五部分组成。2. 运算器 和 控制器 集成在一块芯片上,被称作CPU。

3.总线按其功能可分 数据总线 、 地址总线 和 控制总线 三种不同类型的总线。4.计算机系统与外部设备之间相互连接的总线称为 系统总线(或通信总线) ;用于连接微型机系统内各插件板的总线称为系统内总线(板级总线) ;CPU内部连接各寄存器及运算部件之间的总线称为 内部总线 。5.迄今为止电子计算机所共同遵循的工作原理是 程序存储 和 程序控制 的工作原理。这种原理又称为 冯·诺依曼型 原理。

二、简答题

1.简述微处理器、微计算机及微计算机系统三个术语的内涵。

答:微处理器是微计算机系统的核心硬件部件,它本身具有运算能力和控制功能,对系统的性能起决定性的影响。微处理器一般也称为CPU;微计算机是由微处理器、存储器、I/O接口电路及系统总线组成的裸机系统。微计算机系统是在微计算机的基础上配上相应的外部设备和各种软件,形成一个完整的、独立的信息处理系统。三者之间是有很大不同的,微处理器是微型计算机的组成部分,而微型计算机又是微型计算机系统的组成部分。

2.什么叫总线?为什么各种微型计算机系统中普遍采用总线结构? 答:总线是模块与模块之间传送信息的一组公用信号线。

总线标准的建立使得各种符合标准的模块可以很方便地挂在总线上,使系统扩展和升级变得高效、简单、易行。因此微型计算机系统中普遍采用总线结构。 3.微型计算机系统总线从功能上分为哪三类?它们各自的功能是什么?

答:微型计算机系统总线从功能上分为地址总线、数据总线和控制总线三类。地址总线用于指出数据的来源或去向,单向;数据总线提供了模块间数据传输的路径,双向;控制总线用来传送各种控制信号或状态信息以便更好协调各功能部件的工作。

第2章 计算机中的数制与编码

一、填空题

1.写出下列原码机器数的真值;若分别作为反码和补码时,其表示的真值又分别是多少? (1) (0110 1110)二进制原码=(+110 1110)二进制真值=(+110)十进制真值

(0110 1110)二进制反码=(+110 1110)二进制真值=(+110)十进制真值 (0110 1110)二进制补码=(+110 1110)二进制真值=(+110)十进制真值

(2) (1011 0101)二进制原码=(-011 0101)二进制真值=(-53)十进制真值

(1011 0101)二进制反码=(-100 1010)二进制真值=(-74)十进制真值 (1011 0101)二进制补码=(-100 1011)二进制真值=(-75)十进制真值

2.写出下列二进制数的原码、反码和补码(设字长为8位)。 (1) (+101 0110)二进制真值=(0101 0110)原码=(0101 0110)反码=(0101 0110)补码

(2)

(-101 0110)二进制真值=(1101 0110)原码=(1010 1001)反码=(1010 1010)补码

3.[X]补=78H,则[-X]补=( 88 )H。

4.下面各二进制数分别代表原码、反码和补码时,其等效的十进制数值为多少? (1) (1111 1111)二进制原码=(-127)十进制真值

(1111 1111)二进制反码=(-0)十进制真值

(1111 1111)二进制补码=(-1)十进制真值

(2) (1000 0000)二进制原码=(+0)十进制真值

(1000 0000)二进制反码=(-127)十进制真值

(1000 0000)二进制补码=(-128)十进制真值

5.已知X1= +0010100,Y1= +0100001,X2= ?0010100,Y2= ?0100001,试计算下列各式(设字长为8位)。 (1) [X1+Y1]补= [X1]补+ [Y1]补= 0001 0100 + 0010 0001 = 0011 0101 (2) [X1-Y2]补= [X1]补+ [-Y2]补= 0001 0100 + 0010 0001 = 0011 0101 (3) [X2-Y2]补= [X2]补+ [-Y2]补= 1110 1100 + 0010 0001 = 0000 1101 (4) [X2+Y2]补= [X2]补+ [Y2]补= 1110 1100 + 1101 1111 = 1100 1011 6.将下列十六进制数分别转换成二进制、八进制、十进制和BCD数。 (1)(5D.BA)16=(0101,1101.1011,1010)2=(135.564)8=(93. 7265625)10 =(1001,0011.0111,0010,0110,0101,0110,0010,0101)BCD (2)(1001.0101,1)2=(9.34375)10=(11.26)8=(9.58)16

=(1001.0011,0100,0011,0111,0101)BCD 7.写出下列字符的ASCII码。 (1) ?9‘=(39H)ASCII码 (3) ?$‘ =(24H)ASCII码 (5) ?b‘ =(62H)ASCII码 (7) ?换行‘ =(0AH)ASCII码 二、选择题

1.下列无符号数中最小的数是(A)。

A.(01A5)H B.(1,1011,0101)B C.(2590)D D.(3764)O 2.下列有符号数中最大的数是(D)。

A.1002H B.1001 0011 0010 1100B C.2570O D.9614D 3.在机器数(A)中,零的表示形式是唯一的。

A.补码 B.原码 C.补码和反码 D.原码和反码 4.8位二进制数补码的数值表示范围为(A)。

A. -128~+127 B.-127~+127 C. 一129~+128 D.-128~+128

5.若下列字符码(ASCII)中有奇偶校验位,但没有数据错误,采用偶校验的字符码是(D)。

A.11001011 B.11010110 C.11000001 D.11001001 6.B9H可以看成(ABD )。

A.无符号数185

B.带符号数-71的补码

(2) (8)

?C‘ =(43H)ASCII码 (4) ?空格‘ =(20H)ASCII码 (6) ?回车‘ =(0DH)ASCII码 ?报警符‘ =(07H)ASCII码

C.十进制数99的组合BCD码 D.带符号数-57的原码

第3章 微处理器及其结构

一、填空题

1.8086/8088 CPU执行指令中所需操作数地址由 EU 计算出 16 位偏移量部分送 BIU ,由 BIU 最后形成一个 20 位的内存单元物理地址。 2.8086/8088 CPU在总线周期的T1 时刻,用A19/S6~A16/S3 输出 20 位地址信息的最高 4 位,而在其他时钟周期,则输出 状态 信息。

3.8086/8088 CPU复位后,从 0FFFF0H 单元开始读取指令字节,一般这个单元在 ROM 区中,在其中设置一条 跳转 指令,使CPU对系统进行初始化。

2

4.8086系统的存储体系结构中,1MB存储体分 2 个库,每个库的容量都是512K字节,其中和数据总线D15~D8相连的库全部由 奇地址 单元组成,称为高位字节库,并用

BHE作为此库的选通信号。

5.8086/8088系统中,可以有 64K 个段起始地址,任意相邻的两个段起始地址相距 16 个存储单元。 6.用段基值及偏移量来指明内存单元地址的方式称为 逻辑地址 。

7.通常8086/8088 CPU中当EU执行一条占用很多时钟周期的指令时,或者在多处理器系统中在交换总线控制时会出现 空闲 状态。

8.8086 CPU使用 16 根地址线访问I/O端口,最多可访问 64K 个字节端口,使用 20 根地址线访问存储单元,最多可访问 1M 个字节单元。 9.CPU取一条指令并执行该指令的时间称为 指令 周期,它通常包含若干个 总线 周期,而后者又包含有若干个 时钟 周期。

二、单项选择题

1.某微机最大可寻址的内存空间为16MB,其CPU的地址总线至少应有(E)条。 A.26 B.28 C.20 D.22 E.24

2.8086/8088 CPU的RESET引脚至少应维持(A)个时钟周期的正脉冲宽度才能有效复位。 A.4 B. 5 C.2 D.3

3.当RESET信号进入高电平状态时,将使8086/8088 CPU的(D)寄存器初始化为0FFFFH。 A.SS B.DS C.ES D.CS

4.8086/8088 CPU 与慢速存储器或I/O 接口之间进行数据传输,为了使传送速度匹配,有时需要在(C)状态之间插入若干等待周期TW。 A.T1 和T2 B.T2 和T3 C.T3 和T4 D.随机 5.8086/8088 CPU中标志寄存器的主要作用是( D )。 A.检查当前指令的错误 C.决定是否停机

B.纠正当前指令执行的结果与错误

D.产生影响或控制某些后续指令所需的标志

6.8086最小模式下的存储器读周期中地址锁存发生在总线周期的( A )时刻。 A.T1 B.T2 C.T3 D.T4 7.指令指针IP的作用是( A )。 A.保存将要执行的下一条指令的地址 C.保存运算器运算结果内容

B.保存CPU要访问的内存单元地址

D.保存正在执行的一条指令

8.8086CPU有两种工作模式,最小模式的特点是( A )。 A.CPU提供全部控制信号 B.由编程进行模式设定 C.不需要8282收发器

三、简答题

1.8086/8088 CPU 分为哪两个部分?如何协调工作?答:EU是执行部件,主要的功能是执行指令和形成有效地址。BIU是总线接口部件,与片外存储器及I/O接口电路传输数据,主要功能是形成实际地址、预取指令和存取操作数。EU经过BIU进行片外操作数的访问,BIU为EU提供将要执行的指令。EU与BIU可分别独立工作,当EU不需BIU提供服务时,BIU可进行填充指令队列的操作。

2.8086/8088 CPU的地址总线有多少位?其寻址范围是多少?答:8086/8088 CPU的地址总线共20 位,最大可寻址1MB空间

3.8086/8088 CPU使用的存储器为什么要分段?怎么分段?答:8086/8088为16位CPU,其内部的ALU、相关的地址寄存器(如SP、IP以及BX、BP、SI、DI)等都是16位的,因而对存储器地址的处理也只能是16位操作,即8086/8088的直接寻址能力在64KB范围内。而实际上8086/8088有20条地址线,它的最大寻址空间为1MB。这就产生了一个矛盾,

D.需要总线控制器8288

3

首单元地址:610A0H+1CE7H=62D87H末单元地址:62D87H+27H=62DAEH

地址 内容

即如何用16位的地址寄存器去表示一个20位的存储器物理地址?实超过64KB。这样,一个20位的物理地址就可以用―16位段基址:16位8086/8088的段寄存器中。

4.8086/8088 CPU 中有几个通用寄存器?有几个变址寄存器?有几

际使用的解决办法是:将1MB大小的存储空间分为若干―段‖,每段不偏移量‖的形式(称为逻辑地址)来表示了,其中段地址存放在

个指针寄存器?通常哪几个寄存器亦可作为地址寄存器使用?答:

BP、SP、SI、DI;2个变址寄存器SI、DI;2个指针寄存器BP、SP;

8086/8088 CPU 中共有:8个16位的通用寄存器AX、BX、CX、DX 、其中BX、BP、SI、DI 亦可作地址寄存器。

5.Intel 8086与8088有何区别?答:8086与8088的区别主要表现在以下几个方面:第一、8086的指令队列可以容纳6个字节,每个总线周期在存储器中取出2个字节指令代码填入队列。而8088只能容纳4个字节,且每个总线周期只能取出1个字节指令代码。第二、8086外部数据总线宽度为16位,8088外部数据总线宽度只有8位。注意:8086和8088外部数据总线的宽度不同将导致扩展主存储器及输入/输出接口时系统地址线和数据线连接方式的不同。第三、其他不同的引脚定义:(1)AD15~AD0,在8086中为地址/数据复用,而在8088中AD15~AD8 改为A15~A8只作地址线用;(2)34、28号引脚定义不同。

6.8086/8088CPU工作在最小模式时:当CPU访问存储器时,要利用哪些信号?当CPU访问外设接口时,要利用哪些信号?答:8086/8088 CPU工作在最小模式时,若访问存储器,需用到以下信号:号:

M/IO、ALE、DT/R、DEN、READY、BHE、WR、RD、AD0~AD15、A19/S6~A16/S3。若访问外设,需用到以下信

M/IO、ALE、DT/R、DEN、READY、WR、RD、AD0~AD15。

7.试指出下列运算后的各个状态标志,并说明进位标志和溢出标志的区别:(1)1278H+3469H答:CF=0 AF=1 ZF=0 SF=0 OF=0 PF=1(2)54E3H-27A0H 答:CF=0 AF=0 ZF=0 SF=0 OF=0 PF=0(3)3881H+3597H答:CF=0 AF=0 ZF=0 SF=0 OF=0 PF=1(4)01E3H-01E3H

答:CF=0 AF=0 ZF=1 SF=0 OF=0 PF=1其中,进位标志CF 用于判别无符号数运算是否超出数的表示范围,而溢出标志OF 用于判别带符号数运算是否超出数的表示范围。

奇偶标志PF 只能判断结果低8 位中―1‖的个数为奇数还是偶数。

8.什么是逻辑地址?什么是物理地址?它们之间有什么联系?各用在何处?答:逻辑地址由两个16 位的部分即段基址和偏移量组成,一般在程序中出现的地址都表示为逻辑地址形式;物理地址是一个20 位的地址,它是唯一能代表存储空间每个字节单元的地址,一般只出现在地址总线上。由于8086/8088CPU 中的寄存器只有16 位长,所以程序不能直接存放20 位的物理地址,而必须借助逻辑地址,即用两个16 位的寄存器来表示物理地址。他们之间的关系是:物理地址=段基址*16+偏移量;另外,一个物理地址可对应多个逻辑地址。

9.设现行数据段位于存储器0B0000H~0BFFFFH 单元,DS 段寄存器内容为多少?答: DS 段寄存器内容为0B000H。

10.在8086中,逻辑地址、偏移地址、物理地址分别指的是什么? 答:逻辑地址是在程序中对存储器地址的一种表示方法,由段基址和段内偏移地址两部分组成,都是16位的二进制代码,如1234H:0088H。偏移地址是指段内某个存储单元相对该段首地址的差值。物理地址是8086芯片引线送出的20位地址码,物理地址=段基址*16+偏移地址,用来指出一个特定的存储单元。

11.给定一个存放数据的内存单元的偏移地址是20C0H,(DS)=0C0E0H,求出该内存单元的物理地址。答:物理地址:0C2EC0H。

12.8086/8088为什么采用地址/数据引线复用技术?答:考虑到芯片成本和体积,8086/8088采用40条引线的封装结构。40条引线引出8086/8088的所有信号是不够用的,采用地址/数据线复用引线方法可以解决这一矛盾,从逻辑角度,地址与数据信号不会同时出现,二者可以分时复用同一组引线。 13.怎样确定8086的最大或最小工作模式? 答:引线

MNMX的逻辑状态决定8086的工作模式,MNMX引线接高电平,8086被设定为最小模式,

MNMX引线接低电平,8086被设定为最大模式。

14.8086基本总线周期是如何组成的?答:基本总线周期由4个时钟(CLK)周期组成,按时间顺序定义为T1、T2、T3、T4。 15.在基于8086的微计算机系统中,存储器是如何组织的?存储器是如何与处理器总线连接的?

BHE信号起什么作用?答:8086为16位微处理器,可访问1M字节的

存储器空间;1M字节的存储器分为两个512K字节的存储体,分别命名为偶存储体和奇存储体;偶体的数据线连接D7~D0,―体选‖信号接地址线A0;奇体的数据线连接D15~D8,―体选‖信号接

BHE信号;A0信号有效时允许访问偶体中的低字节存储单元,BHE信号有效时允许访问奇体中的高字节存储单元,实现8086的低字节访问、高字节

访问及字访问。

16.有一个由20个字组成的数据区,其起始地址为610AH:1CE7H。试写出该数据区首末单元的实际地址PA。

4

17.有两个16位的字31DAH、5E7FH,它们在8086系统存储器中的地址为00130H和00135H,试画出它们的存储器示意图。 18.试说明8086CPU的控制引脚ALE的作用。答:8086的低位地址线与数据线复用,为保证地址线维持足够的时间,需使用ALE信号将低位地址线通过锁存器保存,以形成系统地址总线。

00131H 第4章 8086/8088CPU指令系统

00132H 一、判断题

00133H 00134H

1.MOV AX,[BP]的源操作数物理地址为16×(DS)+(BP)。(×)2.OUT DX,AL指令的输出是16位操作数。

00135H

(×)3.不能用立即数给段寄存器赋值。 (√)4.所有传送指令都不影响PSW寄存器的标志位。

00136H

(×)5.堆栈指令的操作数均为字。 (√)6.段内转移指令执行结果要改变IP,CS的值。(×)

二、单项选择题

1.寄存器间接寻址方式中,操作数在(C)中。

A. 通用寄存器 B. I/O端口 C. 存储单元 D. 段寄存器 2.(A)寻址方式的跨段前缀不可省略。

A. DS:[BP] B. DS:[SI] C. DS:[DI] D. SS:[BP]

3.假设(SS)=2000H,(SP)=0012H,(AX)=1234H,执行PUSH AX后,(SP)=(C)。 A. 0014H B. 0011H C. 0010H D. 000FH

4.用BP作基址变址寻址时,操作数所在的段是当前(C)。 A. 数据段 B. 代码段 C. 堆栈段 D. 附加段

5.已知(IP)=1000H,CF=0,则执行指令JNC Short label后,下列各数中哪一个是可能的IP值?(B) (A)0FFFFH

(B)0FFEH

(C)10FEH

(D)1100H

6.执行下列指令后,(AX)=(A)。 MOV AX,1234H MOV CL,4 ROL AX,CL DEC AX MOV CX,4 MUL

CX

HLT

A. 8D00H B. 9260H C. 8CA0H D. 0123H

7.设(AL)= - 68,(BL)= 86,执行SUB AL,BL 指令后,正确的结果是(C)。 A. CF =1 B. SF =1 C. OF =1 D. ZF =1

8.已知(SI)=0004H,(DS)=8000H,(80004H)=02H,(80005H)=C3H。指令LEA AX,[SI]执行后(AX)=( C )。 A. 0002H B. 0005H C. 0004H D. C302H 9.条件转移指令JNE的条件是( C )。 A. CF=0 B. CF=1 C. ZF=0 D. ZF=1

5

31H 7F 5E 00130H

0DAH

10.在8086中,(BX)=0282H,且题中指令已在指令队列中,则执行 INC BYTE PTR(BX)指令需要的总线周期为( C )。

A. 0 B. 1 C.2 D. 3

三、多项选择题

1.下列指令中源操作数使用寄存器寻址方式的有(BF)。

A. MOV BX,BUF[SI] B. ADD [SI+50],BX C. SUB AX,2 D. CMP AX,DISP[DI] E. MUL VAR[BX] F. PUSH CX 2.将累加器AX的内容清零的正确指令是(BCD)。 A. CMP AX,AX B. SUB AX,AX C. AND AX,0 D. XOR AX,AX

3.正确将字变量WORD VARR偏移地址送寄存器AX的指令是(CD)。 A. MOV AX,WORD VARR B. LES AX,WORD VARR

C. LEA AX,WORD VARR D. MOV AX,OFFSET WORD VARR 4.调用CALL指令可有(ABDE)。

A. 段内直接 B. 段内间接 C. 短距离(SHORT) D. 段间直接 E. 段间间接

5.8086指令的操作数可能有(ABCD)。 A. 0 B. 1 C. 2 D. 3 四、填空题

1.与指令MOV BX,OFFSET BUF功能相同的指令是 LEA BX,BUF。

2.假设(BX)= 0449H,(BP)= 0200H,(SI)= 0046H,(SS)= 2F00H,(2F246H)= 7230H则执行XCHG BX,[BP+SI]指令后,(BX)= 7230H 。 3.执行下列指令序列后,完成的功能是将(DX,AX)的值除以16。

MOV

NEXT:

SHR

CX,4 DX,1

RCR AX,1 LOOP

NEXT

4.已知(AL)=0101 1101B,执行指令NEG AL后,再执行CBW后, (AX)= 0FFA3H 。

5.在数据传送类指令中,只有 SAHF 和 POPF 两条指令会影响标志位的值,其中指令 POPF 是唯一可以改变TF标志的指令。

6.设有100个字节数据(补码),存放在数据段中EA=2000H的存储单元中。以下程序应该从该数据区中找出最小的一个数据,并存入EA=2100H单元中,请将下面程序补充完整。

MIN:

MOV

BX, 2000H

AL,[BX] CX, 99 BX

MOV MOV

LOOP1:INC

6

CMP AL,[BX] JLE LOOP2 MOV

LOOP2:DEC

CX

JNZ LOOP1 MOV [2100H],AL

7.MOV AX,ES:[BX][SI]中,源操作数的物理地址计算式是: (ES)×16+(BX)+(SI)。 五、综合题

1.请指出以下各指令的源、目的操作数所使用的寻址方式。 (1)MOV SI,2100H(2)SBB (6)PUSH ES:[BP](7)CALL

DISP[BX],7(3)AND [DI],AX(4)OR DISP [DI]

AX,[609EH](5)MOV [BX+DI+30H],CX

AL,[BX]

答:(1)源操作数:立即数寻址;目的操作数:寄存器寻址(2)源操作数:立即数寻址;目的操作数:(带位移量的)基址寻址 (3)源操作数:寄存器寻址;目的操作数:变址寻址(4)源操作数:直接寻址; 目的操作数:寄存器寻址

(5)源操作数:寄存器寻址;目的操作数:(带位移量的)基址变址寻址(6)源操作数:带段超越的基址寻址;目的操作数:隐含寻址 (7)只有一个操作数,为(带位移量的)变址寻址 2.请指出下列各条指令的错误,并改正。

1)MOV [100],23H 2)ADD AX,[BX+BP+6] 3)PUSH

DL 4 )IN AX,[3FH] 5)OUT 3FFH,AL 6)LES SS,[SI] 7)POP [AX]

[BX],ES:AX 14)MOV AX,OFFSET [SI]

8)IMUL 4CH 9)SHL BX, 10)INT 300 11)XCHG DX,0FFFH 12)MOV AH,BX 13)MOV 15)MOV CS,AX 16)MOV DS,ES 17)MOV

DS,1000H

答:(1)不允许直接向段寄存器送立即数,可改为:MOV AX,1000H 或MOV DS,AX

(2)该指令在语法上是对的,即可以把一个立即数送入一个存储单元;但是如果考虑实际编译,则第一操作数前应加上BYTE PTR或WORD PTR说明,否则汇编程序会因不能确定操作数长度而指示出错。可改为:MOV ADD

BYTE PTR [100],23H(3)不能同时使用两个基址寄存器BX、BP进行间接寻址,可改为:

DX(5)在输入/输出指令中,8位端口地址应直接写

AX,[BX+DI+6](4)堆栈操作应以字为单位进行,而DL是一个字节。可改为:PUSH

在操作数处。可改为:IN AX,3FH(6)端口地址3FFH已超出8位二进制表示范围,16位端口地址应存于DX。可改为: MOV

DX,3FFH OUT

DX,AL(7)LES指令的目操作数应该是通用寄存器,不能是段寄存器。可改为:LES AX,[SI](8)AX不能用于间接寻

[BX](9)立即数不能做乘法指令的操作数,可改为:MOV BL,4CH

CL,5或SHL

BX,CL(11)操作数300 ? 255,已超出有效的中断类DX,CX

址,间接寻址只能用BX、BP、SI、DI四个寄存器之一。可改为:POP

或IMUL BL(10)当逻辑移位的次数大于1时,应该用CL指示次数。可改为:MOV

型码范围。(12)XCHG指令不允许立即数做它的操作数。可改为:MOV CX,0FFFH 或 XCHG

(13)源、目的字长不一致(14)在8086寻址方式中,AX不能作为基址寄存器使用,而且源、目的不能同时为存贮器寻址方式 (15)OFFSET只用于简单变量,应去掉(16)CS不能作为目的寄存器(17)段寄存器之间不能直接传送数据 3.设若标志寄存器原值为0A11H,(SP)=0060H,(AL)=4。下列几条指令执行后,标志寄存器、AX、SP的值分别是多少?

PUSHF LAHF XCHG PUSH

AH,AL AX

7

SAHF POPF

答:指令执行后标志寄存器的值为0411H,AX=0411H ,SP=005EH。 4.假如在程序的括号中分别填入指令: (1) LOOP L20(2) LOOPNE L20(3) LOOPE L20

试说明在三种情况下, 当程序执行完后, AX、BX、CX、DX四个寄存器的内容分别是什么?

BEGIN:

L20:

MOV

MOV MOV MOV INC ADD SHR

AX,01

BX,02 DX,03 CX,04 AX BX,AX DX,1

( )

答案: (1)(AX)= 5 (BX)= 16 (CX)= 0 (DX)= 0

(2)(AX)= 3 (BX)= 7 (CX)= 2 (DX)= 0 (3)(AX)= 2 (BX)= 4 (CX)= 3 (DX)= 1

5.变量N1和N2均为2字节的非压缩BCD数码,请写出计算N1与N2之差的指令序列。 答案:

MOV MOV SUB AAS MOV MOV SBB AAS MOV

DH, AL DL, AL AL, N1+1

AL, N2+1

AX, 0 AL, N1 AL, N2

6.在已学的指令中,可实现累加器清0的单条指令有哪些?比较它们的功能。

答:(1)MOV (2)SUB (3)AND (4)XOR

7.已知(DS)=2000H,有关的内存单元值为:(21000H)=00H,(21001H)=12H,(21200H)=00H,(21201H)=10H,(23200H)=20H,(23201H)=30H,(23400H)=40H,(23401H)=30H,(23600H)=60H,(23601H)=30H,符号COUNT的偏移地址为1200H。执行下列指令后,寄存器AX、BX、SI的值分别是多少?

MOV MOV

BX,OFFSET COUNT SI,[BX]

AX,0 ;仅将累加器清0,不会影响任何标志位

AX,AX;累加器清0的同时影响所有状态标志,具体地有:ZF、PF置1,CF、AF、SF、OF均清0 AX,0

;将累加器清0,ZF、PF置1,CF、OF、SF清0

AX,AX;将累加器清0,ZF、PF置1,CF、OF、SF清0

8

MOV AX,COUNT[SI][BX]

答:执行结果为(BX)=1200H,(SI)=1000H,(AX)=3040H。

8.设若内存单元DATA在数据段中偏移量为24C0H处,24C0H~24C3H单元中依次存放着55H、66H、77H、88H。下列几条指令执行后,寄存器AX、BX、CL、SI、DS的值分别是多少?

MOV LEA MOV LDS

AX,DATA SI,DATA CL,[SI] BX,DATA

答:执行结果为(AX)=6655H,(BX)=6655H,(CL)=55H,(SI)=24C0H,(DS)=8877H。

9.若(AX)=26D3H,(CX)=7908H,CF=1,执行下列指令后,寄存器AX、CX的值分别是多少?CF=?OF=? SAL RCR ROL

CH,1 AX,CL AL,1

答:执行结果为(AX)=0A64CH,(CX)=0F208H,CF=OF=0。

10.已知有程序段如下: MOV MOV AND AND MOV SHR MOV MUL ADD

AL,35H DL,AL DL,0FH AL,0F0H CL,4 AL,CL BL,10 BL AL,DL

执行之后,AL的值等于多少?该程序段完成了什么功能?

答:程序段执行后(AL)=23H。该程序段实现了将AL中的1个组合BCD码转换为十六进制数并存回AL中的功能。

11.下面的程序执行后,DX、AX的值分别是多少? ;以X为首址的字单元中的数据依次为1234H、5678H ;以Y为首址的字单元中的数据依次为8765H、4321H

LEA SI,X LEA DI,Y MOV DX,[SI+2]

9

MOV AX,X ADD AX,X ADC DX,[SI+2] CMP DX,[DI+2] JL

L2

CMP AX,Y JL

L1

JMP EXIT L1: MOV

JMP EXIT L2: MOV EXIT:……

答:执行结果为(AX)=2,(DX)=0ACF0H。

12.设VAR字单元的值为x,F1字单元的值为y,试编程按以下要求给y赋值:

y =

2 0 -2

x>30

AX,2 AX,1

30≥x≥1

x<1

答:一种可能的程序段实现如下:

MOV CMP JG CMP JL MOV JMP

PLUS2:MOV

JMP

F1,0 GO F1,2

;y=2 GO

AX,VAR ;AX ? x AX,30

PLUS2 ;x>30,则转PLUS2 AX,1 MIN2

;x<1,则转MIN2

;30≥x≥1,y=0

MIN2: MOV F1,-2 GO:……

;y = -2或00FEH ;后续处理

简析:本例中并未说明VAR字节单元是带符号数还是无符号数,读者在使用判断转移指令时可任意选用。若当作带符号数,应使用JG、JL、JGE、JLE等指令,如参考程序;若当作无符号数,则应使用JA、JB、JAE、JBE等指令。

10

第5章 汇编语言程序设计

一、填空题

1.段定义伪指令语句用 SEGMENT 语句表示开始,以 ENDS 语句表示结束。

2.ARRAY DW 10 DUP(5 DUP (4 DUP (20H,40H,60H))语句执行后共占 1200 字节存储单元。

3.汇编语句中,一个过程有NEAR和FAR两种属性。NEAR属性表示主程序和子程序 在同一个代码段中 ,FAR属性表示主程序和子程序不在同一个代码段中。 4.DOS系统功能号应放在 AH 寄存器中。

5.子程序又称 过程 ,它可以由 PROC 语句定义,由 ENDP 语句结束,属性可以是 NEAR 或 FAR 。

6.假设VAR为数据段中已定义的变量,则指令MOV BX,OFFSET VAR中源操作数的寻址方式是 立即数寻址 。 二、选择题

1.EXE文件产生在( D )之后。

A. 汇编 B. 编辑 C. 用软件转换 D. 连接 2.变量定义的伪指令助记符有( ABCEF )。 A. DB B. DW C. DD D. DF E. DQ F. DT 3.主程序与子程序之间传递参数可通过( ABC )进行。

A. 堆栈 B. 存储器单元 C. 通用寄存器 D. 指令队列 E. 其他 4.计算机系统软件中的汇编程序是一种(C)。 A. 汇编语言程序 B. 编辑程序

C. 翻译程序 D. 将高级语言转换成汇编程序的程序

5.若主程序段中数据段名为DATA,对数据段的初始化操作应为(B)。 A. MOV AX,DATA B. MOV AX,DATA MOV ES,AX MOV DS,AX C. PUSH DS D. MOV DS,DATA

6.8086宏汇编源程序中,若BUFF是字变量名,则执行指令MOV BX,BUFF后,BX中的值为BUFF单元的( A )。 A. 字数据值 B. 变量类型值 C. 段基址 D. 段内偏移量 三、综合题

1.下列标号为什么是非法的? (1) GET.DATA (2) 1_NUM (3) TEST-DATA (4) RET (5) NEW ITEM 答案:

(1)因为?.‘只允许是标号的第一个字符 (2)第一个字符不能为数字 (3)不允许出现?-‘ (4)不能是保留字,如助记符

11

(5)不能有空格

2.已知数据和符号定义

A1

A2 K1

DB DB EQU

100

? 8

判断下列指令的正误,并说明错误指令的原因。 (1)MOV K1,AX (2)MOV A2,AH (3)CMP A1,A2 (4)MOV BX,K1

MOV [BX],DX

EQU

200

(5)K1

答:(1)错误。K1 是符号,在此处相当于立即数100,故不能做目的操作数。

(2)正确。

(3)错误。A1、A2 都是字节变量,相当于两个存储器单元,故不能同时出现在一条指令中直接进行比较。 (4)正确。

(5)错误。用EQU 定义的符号不能重新赋值,除非已用PURGE 解除了原值。 3.若数据段中有定义

NUM1 EQU NUM2 DW

23H

0

则指令MOV NUM2,NUM1 的源、目操作数的寻址方式以及指令执行后NUM2+1单元的内容分别是什么? 答:指令MOV NUM2,NUM1 的源操作数使用立即数寻址,目的操作数使用直接寻址。指令执行后NUM2+1 单元的内容是0。

4.已知某数据段从物理地址03000H处开始,定义如下:

DSEG DSEG

SEGMENT ORG A1 A2 CNT A3 ENDS

2000H EQU

DD DB 20H DW

100 DUP(?)

2 DUP(7,1,?)

10 DUP(0,4,3 DUP(2),5)

请分别用分析运算符SEG、OFFSET、LENGTH、SIZE、TYPE求出A1、A2、A3的段基址、偏移量、类型及它们的LENGTH、SIZE。

答:(SEG A1)=0300H,(OFFSET A1)=2000H,(TYPE A1)=4, (LENGTH A1)=2,(SIZE A1)=2×3×4=24;

(SEG A2)=0300H,(OFFSET A2)=2018H,(TYPE A2)=1, (LENGTH A2)=10,(SIZE A2)=10×6×1=60;

(SEG A3)=0300H,(OFFSET A3)=2054H,(TYPE A3)=2, (LENGTH A3)=100,(SIZE A3)=100×2=200

12

DTSEG SEGMENT

ORG

10H

DATA1 DB 72H

DB 04H

DTSEG ENDS

5.下面两个数据段中偏移地址为10H和11H的两个存储单元中的数据一样吗?为什么?

DTSEG SEGMENT ORG 10H DATA1 DW 7204H DTSEG ENDS

答案:不一样。分别是72H, 04H和04H, 72H。存储字时低8位存在低字节,高8位存在高字节。

6.已知符号定义语句如下: ALPHA EQU 100 BETA

EQU 25

GAMMAEQU

2

分别求下列各表达式的值。 (1)ALPHA*4 GT BETA

(2)ALPHA MOD GAMMA+BETA (3)(BETA / 3)LE 5 (4)ALPHA AND BETA

(5)GAMMA XOR(BETA EQ 25)

答:(1)ALPHA*4 GT BETA = 100*4 GT 25 = 0FFFFH (2)ALPHA MOD GAMMA+BETA = 100 MOD 2+25 = 25 (3)(BETA / 3)LE 5 =(25 / 3)LE 5 = 0

(4)ALPHA AND BETA = 100 AND 25 = 64H & 19H = 0

(5)GAMMA XOR(BETA EQ 25)= 2⊕(25 EQ 25) = 0FFFDH

7.已知数据段定义如下:

DSEG

SEGMENT

ORG 6

VAR1 DB 2,18

ORG $ +2

VAR2 DW 569AH CONT EQU $–VAR2

DB ?AB‘

DSEG

ENDS

用示意图说明该数据段的分配情况。 答:有关存储单元的内容如下图所示。

13

8.判断以下说法是否正确,如有错,请说明原因并改正。 (1)伪指令在汇编过程中不会产生二进制代码。

(2)宏和过程的相同之处是都可用于简化源程序书写、精简目标代码。 (3)在计算机中,高级语言通常需要转换为汇编语言后才能执行。 (4)汇编语言程序上机一般包括编辑、汇编、链接和调试几个步骤。 答:(1)正确。 (2)错误。宏不能精简目标代码。 (3)错误。高级语言程序经编译或解释后直接转换为目标代码。 (4)正确。

9.执行下列指令后,AX寄存器中的内容是什么? TABLE DW 10,20,30,40,50

ENTRY DW

3

. . MOV

BX,OFFSET TABLE

ADD BX,ENTRY MOV

AX,[BX]

答:(AX)=1E00

10.指出下列程序中的错误: STAKSG SEGMENT

DB

100 DUP(?)

STA_SG ENDS DTSEG SEGMENT

DATA1 DB

? DTSEG END

CDSEG SEGMENT MAIN

PROC

FAR START: MOV DS,DATSEG MOV AL,34H ADD AL,4FH

MOV

DATA,AL

START ENDP CDSEG ENDS

END

答案: 改正后: STAKSG SEGMENT DB 100 DUP(?) STAKSG ENDS

14

DTSEG DATA DTSEG CDSEG MAIN ASSUME START: MOV MAIN CDSEG

SEGMENT DB ? ENDS

SEGMENT PROC FAR

CS: CDSEG, DS: DTSEG, SS: STAKSG AX, DTSEG MOV DS, AX MOV AL, 34H ADD AL, 4FH MOV DATA1, AL MOV AH, 4CH

INT 21H ENDP ENDS

END

START

11.请写出上述两条指令执行后,BX寄存器中的内容。

DATA DATA

MOV LEA

BX, TABLE_ADDR BX, TABLE_ADDR

SEGMENT TABLE_ADDR ENDS

DW

1234H

答案: MOV BX,TABLE_ADDR ;执行后(BX)=1234H

LEA BX,TABLE_ADDR

12.读下面程序,在其中的空处添上适当内容。该程序完成了什么功能?程序运行后,变量RS的值是多少? DATA

BUF

SEGMENT DB CNT DB RS

DATA STACK

DB ENDS

SEGMENT PARA STACK DB ENDS SEGMENT

ASSUME CS:CODE, DS:DATA, SS:STACK

START

PROC

FAR

DS AX,0 AX AX,DATA DS,AX BX,BUF CH,0 CL,

256 DUP(?) -13,24,5,-62 DB 77,20,-7,145,0 $ -BUF 0

;执行后(BX)=OFFSET TABLE_ADDR

STACK CODE

PUSH

MOV

MOV PUSH MOV MOV LEA MOV MOV

LP: AL,[BX]

15

INC ENDP ENDS

TEST JE INC LOOP RET

AL,80H BX LP

CONT RS

CONT:

START CODE

END START

答:程序空处可填CNT,字节变量RS的最后结果是04H。该程序实现的功能是:统计数据段中以BUF为首址的带符号字节数据表中负数的个数,CNT为表中所有数据的个数,即表的长度。需要注意的是:十进制数据―145‖在以二进制带符号字节数据形式存放时相当于―-111‖。

13.试编写一个汇编语言程序段,要求对键盘输入的小写字母用大写字母显示出来。 答案: abc: mov

int cmp jb cmp ja sub mov mov int jmp

ah,1

21h al,‘a‘ stop al,‘z‘ stop al,20h dl,al ah,2 21h abc

stop: ret

14.编写程序,比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示―MATCH‖,若不同则显示―NO MATCH‖。 答案:datarea segment

string1 string2 mess1 mess2 datarea

db db db db ends

?asfioa‘ ?xcviyoaf‘ ?MATCH‘,‘$‘ ?NO MATCH‘,‘$‘

prognam segment main

start:

proc

far

assume cs:prognam,ds:datarea push ds

16

sub ax,ax

;返回DOS

push ax mov ax,datarea mov ds,ax mov es,ax

begin: mov cx, string2-string1

;赋初值

mov bx, mess1-string2 cmp bx,cx jnz lea lea lea repe jne mov lea int ret

dispno

dx,addr ;若长度相同 si,string1

di,string2 ;地址指针赋初值 cmpsb dispno ah,9 dx,mess1 21h

;相同,显示MATCH

;比较

;比较两字符串的长度

dispno:

mov lea int

ret

ah, 9

;不同,显示NO MATCH

dx, mess2 21h

main prognam

endp ends end

start

15.编写一个完整的源程序,将数据35、-27、-13、6、-47、52、9、-3中的正数放入以BUFFER为首址的数据缓冲区中。 答:一种可能的程序如下实现: DATA

DATA STACK

STACK CODE

BEGIN: AGAIN: GO: CODE

SEGMENT BLOCK DB 35,-27,-13,6,-47,52,9,-3 COUNT EQU $-BLOCK BUFFER DB COUNT DUP(?) ENDS

SEGMENT PARA STACK?STACK‘ DW 40 DUP(?) ENDS

SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK MOV AX,DATA MOV DS,AX MOV ES,AX ;需用STOS串操作指令 MOV CX,COUNT LEA SI,BLOCK ;源数据区指针 LEA DI,BUFFER ;正数存放区指针 CLD ;自动增量 LODSB ;取源数据,并修改SI TEST AL,80H ;取符号位,不影响AL JS GO ;符号位=1,是负数,不存 STOSB ;存正数并修改DI LOOP AGAIN MOV AH,4CH ;退出循环,返回DOS INT 21H ENDS END BEGIN

17

16.从内存单元BUF开始的缓冲区中有7个8位无符号数,依次为13H、0D8H、92H、2AH、66H、0E0H、3FH。编程找出它们的中间值并放入RES单元,且将结果以―(RES) = ?‖的格式显示在屏幕上。

答:一种可能的程序如下实现: DATA

BUF RES STR

SEGMENT DB DB ENDS

SEGMENT PARA STACK?SSEG‘ ENDS SEGMENT ASSUME PROC

FAR PUSH XOR PUSH MOV MOV MOV MOV

CS:CODE,SS:SSEG,DS:DATA,ES:DATA DS AX,AX AX AX,DATA DS,AX ES,AX CX,6

;有STOS指令,需用ES ;外循环次数,比6次

;主程序

DB

100 DUP(?)

DB DB

13H,0D8H,92H,2AH,66H,0E0H,3FH

;中间数的存放单元

?(RES)=‘ ?,?,?$‘

;结果字符串

STR1 DATA SSEG

SSEG CODE

MAIN

AGN: MOV

INC

SI,OFFSET BUF MOV

DI,SI

DI MOV

;SI、DI指向相邻2数

;内循环次数,比6次

DX,6

AGN1: MOV

AL,[SI] CMP JB

AL,[DI]

;两个无符号数相比较

;小于则转,不互换

UNCH

EXCH: XCHG AL,[ DI ]

MOV INC DEC JNZ LOOP

;前1单元较大,则互换

;大数放在后面

;修改指针,指向下一个数

[ SI ],AL SI DX AGN

AGN1 DI

UNCH: INC

;未处理完,继续内循环

;外循环

DONE: MOV

AL,[SI-3] MOV AND MOV SHR CALL LEA CLD STOSB MOV AND CALL STOSB

;排序完成,取中间数

RES,AL AL,0F0H CL,4 AL,CL BATR

;调子程序,将AL值转换为ASCII码 ;DI指向结果单元

;分离高半字节

DI,STR1

;存放转换结果

AL,RES AL,0FH BATR

;分离并转换低半字节

18

MAIN

ENDP

LEA MOV INT RET

DX,STR AH,09H

21H

;显示整个字符串

;主程序MAIN结束

;子程序BATR,实现16进制数到ASCII码的转换 BATR

PROC

NEAR CMP JB ADD AL,‘0‘ RET

;子程序结束

AL,10

NUM

;字母

;入口参数为AL

;是数字,则转NUM

AL,‘A‘-10-‘0‘

NUM: ADD BATR CODE

ENDP ENDS

END MAIN

简析:本例的基本思路是:先把7个无符号数按大小排序,排序完成之后取位于中间的一个数即为中间值。然后将该16进制数转换为两个对应的ASCII码,再与要求的格式字符一起输出送显即可。

数据排序可以是从大到小、或从小到大排列,本参考程序完成从小到大排序,由一个双重循环结构实现。内循环完成一个数与其它数之间的一一比较,并使每次比较所得的小数置于低地址单元。外循环实现所有数之间的两两相较。共7个数据,故内、外循环中的比较次数均为6次。

编程时需注意:无符号数比较大小应使用JA、JB、JAE、JBE指令,本例完成从小到大的排列,故用JB控制转移到UNCH;若要从大到小排列,则用JA代替JB即可。 对两个循环体进行初始化时,需仔细考虑指针和循环控制寄存器的初值。在数据段的定义中,分别定义STR、STR1两个变量名字,是为了便于在STR1处存放转换结果;显示时使DX直接指向STR,以STR1末尾的―$‖为结束符。中间值找出之后,应把高、低半字节相分离,并分别转换为各所对应的ASCII码。

17.设某测试系统中,1号端口为测试口,所得数据是0~9之间的十进制整数;2号端口为显示口,对应于数字0~9的LED七段共阴显示码依次为:3FH、06H、5BH、4FH、66H、6DH、3DH、07H、7FH、6FH。编写一段查表送显的程序,要求:先从测试口读入一个数据,再查表将相应的显示码从显示口送出,如此反复进行直至读入数据―0FFH‖为止。

答:一种可能的程序如下实现: DATA TAB

SEGMENT

DB 3FH,06H,5BH,4FH,66H DB 6DH,3DH,07H,7FH,6FH ;0~9的七段码

DATA ENDS STACK SEGMENT PARA STACK?STACK‘

DW 50 DUP(?)

STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATA START: MOV AX,DATA MOV DS,AX LE BX,TAB ;BX指向表首址 NEXT: IN AL,1 ;从测试口输入 CMP AL,0FFH JE STOP ;是0FFH,结束 XLAT TAB ;不是0FFH,查表转换 OUT 2,AL ;向显示口输出七段码 JMP NEXT ;继续测试 STOP: MOV AH,4CH INT 21H CODE ENDS END START

第6章 存储器系统

一、选择题

1.下列(B)不是半导体存储器芯片的性能指标。

A. 存储容量 B. 存储结构 C. 集成度 D. 最大存储时间 2.高速缓存由(B)构成。

19

A. SRAM B. DRAM C. EPROM D. 硬磁盘

3.由2K×1bit的芯片组成容量为4K×8bit的存储器需要(D)个存储芯片。 A. 2 B. 8 C. 32 D. 16

4.安排2764芯片内第一个单元的地址是1000H,则该芯片的最末单元的地址是(D)。 A. 1FFFH B. 17FFH C. 27FFH D. 2FFFH

5.一片容量为8KB的存储芯片,若用其组成1MB内存,需( C )片。 A. 120 B. 124 C. 128 D. 132 6.外存储器包括 ( A B E F )。

A. 软磁盘 B. 磁带 C. SRAM D. BIOS E. 硬磁盘 F. 光盘 7.在多级存储体系结构中,Cache-主存结构主要用于解决( D )的问题。 A. 主存容量不足

B. 主存与辅存速度不匹配

C. 辅存与CPU速度不匹配 D. 主存与CPU速度不匹配

8.动态RAM的特点之一是( BD )。 A. 能永久保存存入的信息 C. 不需要刷新电路 二、填空题

1.在分层次的存储系统中,存取速度最快、靠CPU最近且打交道最多的是 Cache 存储器,它是由 DRAM 类型的芯片构成,而主存储器则是由 SRAM 类型的芯片构成。 2.将存储器与系统相连的译码片选方式有 线选法、部分地址译码法和 全地址译码 法。

3.若存储空间的首地址为1000H,存储容量为1K×8、2K×8、4K×8H 和8K×8的存储器所对应的末地址分别为 13FFH 、 17FFH 、 1FFFH 和 2FFFH 。 4.微机系统中存储器通常被视为 Cache 、 主存 、辅存 三级结构。 三、综合题

1.某微机系统中内存的首地址为3000H,末地址为63FFH,求其内存容量。 答:存储区总的单元数为:63FFH-3000H+1=3400H,故总容量13KB。

计算方法:若直接用十六进制表示,则总容量=(3*163+4*162)/1024;

若将地址表示成二进制,则总容量= 213B+212B+210B;

2.下图为SRAM6116芯片与 8088系统总线的连接图。 答:

(1)6116芯片的存储容量是2k*8bit

(2)第一片6116的内存地址范围是F1000H~F17FFH

第二片6116的内存地址范围是F1800H~F1FFFH

(1)写出6116芯片的存储容量;

(2)分析每片6116所占的内存地址范围。

B. 需要刷新电路

D. 存取速度高于静态RAM

20

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

Top