您的当前位置:首页正文

微机原理课后答案

2020-04-15 来源:好走旅游网
习题一

1.1 电子计算机分成几代?各代计算机有那些特点?

解:大体上可以分为五代(电子管、晶体管、集成电路、VLSI,以及智能超级计算机时代),但是第五代计算机的定义尚未统一,也有第六代计算机的说法。 1.2 电子计算机有那些特点?有那些主要的应用?

解:速度快、精度高、具有记忆与逻辑判断能力、自动执行程序,交互性能好,多种信息表达方式,等等。

主要应用包括:科学计算、自动控制、信息处理、辅助设计、办公自动化、娱乐教育、通讯、电子商务,等等。

1.3 微型计算机与大中型计算机的主要区别是什么?

解:微型计算机广泛采用高集成度的器件,尽量做到小型化,以便家庭、办公室和移动便携的商业应用。

1.4 当前微型计算机的发展趋势是什么?

解:(1)发展高性能的32位微处理器;(2) 发展专用化的单片微型计算机;(3) 发展带有软件固化的微型计算机;(4) 发多微处理机系统和计算机网络;(5) 充实和发展外围接口电路。

1.6 为什么计算机采用二进制作为运算的基础?为什么计算机中同时又采用十进制和十六进制表示数字?

解:二进制数的运算简单且易于进行逻辑判断,与此相对应的两电平数字电路也容易实现且工作可靠。采用十六进制是为了简化表达,因为一位十六进制数字等于四位二进制数字。采用十进制是为了与常人的思维方式兼容,便于一般人员使用计算机。 1.7 二进制数字与十六进制数字之间有什么关系?

解:一位十六进制数字等于四位二进制数字。例如1010B用十六进制表示即为0AH 1.8 什么是模?钟表系统中小时、分钟、秒计数的模各是多少?

1

解:模数从物理意义上讲,是某种计量器的容量。在计算机中,机器表示数据的字长是固定的。对于n位数来说,模数的大小是:n位数全为1,且最末位再加1。 小时的模是12,分钟的模是60,秒的模是60。

1.9 计算机中为什么大都采用补码表示数据?它有什么优点?

解:数的原码表示形式简单,适用于乘除运算,但用原码表示的数进行加减法运算比较复杂,引入补码之后,减法运算可以用加法来实现,从而简化机器内部硬件电路的结构,且数的符号位也可以当作数值一样参与运算,因此在计算机中大都采用补码来进行加减法运算。而且用补码表示数据,0就只有一种表示方法。 1.10 什么是ASCII码?它能表示多少信息?

解:ASCII码英文全称America Standard Code for Information Interchange,中文意思:美国信息交换标准码。ASCII码划分为两个集合:128个字符的标准ASCII码和附加的128个字符的扩充和ASCII码。第0~32号及第127号(共34个)是控制字符或通讯专用字符,第33~126号(共94个)是字符,其中第48~57号为0~9十个阿拉伯数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。 1.11 什么是计算机发展中的“摩尔定律”?

解:30多年前,37岁的美国科学家戈登·摩尔在一本杂志上发表了一篇文章,大胆提出了后来为世人称之为\"摩尔定律\"的论 述。摩尔在文中提出了这样的观点:处理器(CPU)的功能和复杂性每年(其后期减慢为18个月)会增加一倍,而成本却成比例地递减。 1.12 分别用二进制、八进制和十六进制表示下列十进制数据: (1)100 (3)1000

(2)200 (4)10000

解:(1)1100100,144,64 (2)11001000,310,C8 (3)1111101000,1750,3E8 (4)10011100010000,23420,2710

2

1.13 将下列十进制数转换为二进制数: (1)175

(2)257 (4)0.156250

(3)0.625

解:(1)10101111(2)100000001(3)0.101(4)0.00101 1.14 将下列二进制数转换为BCD码: (1)1101

(2)0.01 (4)11011.001

(3)10101.101

解:(1)00010011(2)0.00100101 (3)00100001.011000100101 (4)00100111.000100100101

1.15 将下列二进制数分别转换为八进制数和十六进制数: (1)10101011

(2)1011110011 (4)11101010.0011

(3)0.01101011

解:(1)253,AB(2)1363, 2F3(3)0.326,0.6B(4)352.14,EA.3 1.16 分别选取字长为8位和16位,写出下列数据的原码、反码。 (1)X= +31 (3)Z= +169

(2)Y= -31 (4)W= -169

解:(1)00011111,00011111;0000000000011111,0000000000011111 (2)10011111,11100000;1000000000011111,1111111111100000 (3)0000000010101001,0000000010101001 (4)1000000010101001,1111111101010110

1.17 分别选取字长为8位和16位,写出下列数据的原码、补码。 (1)X= +65 (3)Z= +129

(2)Y= -65 (4)W= -257

解:(1)01000001,01000001;0000000001000001,0000000001000001 (2)11000001,10111111;1000000001000001,1111111110111111

3

(3)0000000010000001,0000000010000001 (4)1000000100000001,1111111011111111

1.18 已知数的补码形式表示如下,分别求出数的原码与真值。 (1)[X]补= 0 .10011 (3)[Z]补= FFFH

(2)[Y]补= 1 (4)[W]补= 800H

.10011

解:(1)0.10011,0.59375 (2)1.01101,-0.40625 (3)801H,-1 (4)800H,-0

1.19 如果将FFH与01H相加,会产生溢出吗? 解:不会(FF=-1,-1+1=0)

1.20 选取8位字长,分别用补码计算下列各式,并且判断是否有进位及溢出?

(1)01111001+01110000 (3)01111100-01111111

(2)-01111001-01110001 (4)-01010001+01110001

解:(1)11101001 最高有效位有进位,符号位无进位,有溢出 (2)00010110 最高有效位无进位,符号位有进位,有溢出 (3)11111101 最高有效位无进位,符号位无进位,无溢出 (4)00100000 最高有效位有进位,符号位有进位,无溢出 1.21 用16位补码计算下列各式,并判断结果是否有进位及溢出:

(1)1234+5678H (3)-3456H-8899H

(2)8888H-9999H (4)-7788H+0FFFFH

解:(1)68ACH,最高有效位无进位,符号位无进位,无溢出 (2)8001H, 最高有效位有进位,符号位有进位,无溢出 (3)4311H,最高有效位有进位,符号位有进位,无溢出 (4)0879H,最高有效位无进位,符号位有进位,有溢出

1.22 分别写出用下列表示方法所能够表示的有符号和无符号数据的范围:

4

(1)8位二进制 (3)16位二进制

(2)10位二进制 (4)32位二进制

解:(1)-128--+127,0—255 (2)-512--+511,0—1023 (3)-32768--+32767,0—65535

(4)-2147483648--+2147483647,0--4294967296 1.23 分别写出下列字符串的ASCII码: (1)10abc

(2)RF56

(3)Z#12

(4)W=-2

解:(1)00110001001100000110000101100010 (2)01010010010001100011010100110110 (3)01011010001000110011000100110010 (4)01010111001111010010110100110010

1.24 写出下列数字所代表的无符号数、有符号数和ASCII码:

(1)89H

(2)48H

(3)1234H (4)8899H

解:(1)137,-9,0011100000111001 (2)72,+72,0011010000111000

(3)4660,+4660,00110001001100100011001100110100 (4)34969,-2201,00111000001110000011100100111001

1.25 已知[x+y]补=7001H,[x-y]补=0001H,试求[2x]补,[2y]补,[x]补,[y]补,x和y。 解:7002H,7000H,3801H,3800H,3801H,3800H

1.26 对于字长为24位和32位的二进制补码,分别写出其数据的表示范围的一般表达式。

各自所能够表示的负数的最小值与正数的最大值是多少?

解:-2 -- +2 -1,-8388608,+8388607 -2 -- +2 -1,-2147483648,+2147483647

1.27 将下列十进制数转换为24位(8位阶符阶码+16位符号及尾数)浮点数:

5

(1)+8.5 (3)12.48

(2)-4.825

(4)-8800

解:(1)00000100 0100010000000000 (2)00000011 1100110100110011 (3)00000100 0110001111010111 (4)00001110 1100010011000000

1.28 设二进制浮点数的阶码为3位、阶符1位,尾数为6位、尾符1位,分别将下列各数

表示成规格化的浮点数:

(1)1111.0111B (3)-12/128

(2)-1111.10101B

(4)189/64

解:(1)01000111101 (3)10111110000

(2)01001111110 (4)00100101111

习题二

2.1 典型的“与”门、“或”门与“非”门是用什么电路实现的? 解:可以用简单的二极管和三极管实现(详见电子技术基础教材)。 2.2 试利用三种基本门电路设计Y=A+B+C的逻辑电路。 解: Y A B C

6

1 Y A B C &

题2.2 题2.3 2.3 试利用三种基本门电路设计Y=A•B•C的逻辑电路。

2.4 什么是三态门?什么情况下需要使用三态门?试分析三态门的工作原理。 解:高电平,低电平,高阻态称为三态。可以具备这三种状态的门器件就叫做三态门。 2.5 试利用3-8译码器74LS138设计一个4-16译码器。 解:

2.6 组合逻辑电路与时序逻辑电路有什么区别?各自的用途是什么?

解:组合逻辑电路可以有若个输入变量和若干个输出变量,其每个输出变量是其输入的逻辑函数,其每个时刻的输出变量的状态仅与当时的输入变量的状态有关,与本输出的原来状态及输入的原状态无关,也就是输入状态的变化立即反映在输出状态的变化。

时序逻辑电路任意时刻的输出不仅取决于该时刻的输入,而且还和电路原来的状态有关。也就是说,组合逻辑电路没有记忆功能,而时序电路具有记忆功能。 2.7 布尔代数和真值表是怎样的关系?各自的特点是什么?

解:布尔代数亦称开关代数或逻辑代数,可写成下述表达式:Y=f(X,Y,Z, „)。它有两个特点:1、其中的变量X,Y,Z, „等都只有两种可能的数值:0和1。2、函数f只有三种基本逻辑操作:“与”、“或”及“非”。

7

真值表又称功能表,它是指由自变量的各种取值组合而成,反映与函数值之间对应关系的一种表格。函数取值为“1”的项数,表明函数运算多项式中的项数。 从真值表写出布尔代数式的方法可以用下面两段话来描述:

⑴ 写布尔代数式先看真值表中结果为1的项,有几项就有几个“或”项;

⑵ 每一项的各因素间是“与”关系。写该项时每个因素都写上,然后酌情取“反”。至于哪个因素要取反,要看该因素在这项里是否是“0”状态,是“0”状态则取“反”,否则不取“反”。 2.8 简述TTL电路和CMOS电路的异同之处和各自的特点。 解:TTL和CMOS电路比较:

1)TTL电路是电流控制器件,而CMOS电路是电压控制器件。 2)TTL电路的速度快,传输延迟时间短(5-10ns),但是功耗大。 CMOS电路的速度慢,传输延迟时间长(25-50ns),但功耗低。

CMOS电路本身的功耗与输入信号的脉冲频率有关,频率越高,芯片集越热,这是正常现象。 3)CMOS电路的锁定效应:

CMOS电路由于输入太大的电流,内部的电流急剧增大,除非切断电源,电流一直在增大。这种效应就是锁定效应。当产生锁定效应时,CMOS的内部电流能达到40mA以上,很容易烧毁芯片。 特点:

1. TTL逻辑电平即Transistor-Transistor Logic。最小输出高电平VOHmin:2.4V ,输出低电平VOLmax:0.4V。在室温下,一般输出高电平是3.5V 输出低电平是0.2V。最小输入高电平VIHmin:2.0V ,最大输入低电平VILmax:0.8V ;它的噪声容限是0.4V。

2. CMOS逻辑电平即Complementary metal-oxide-semiconductor 。逻辑电平电压接近于电源电压,0逻辑电平接近于0V。而且具有很宽的噪声容限。

2.9 请列出常用的TTL组合逻辑电路型号和CMOS组合逻辑电路型号。 解:TTL组合逻辑电路型号:

5400/7400系列是最流行的TTL集成器件,如:74--、74S--、74LS--、74AS--、74ALS--、74F--。 CMOS组合逻辑电路型号:

8

4000系列(前缀为MC的产品,则标为MC14000),40000系列为互补场效应管系列;54/74HC,54/74HCT,54/74AHC,54/74AHCT及54/74HCU系列为高速CMOS电路。 2.10 为什么常用数字电路中有2-4译码器和3-8译码器,却没有1-2译码器? 解:用反相器即可完成1-2译码器的功能。

2.11 电子计算机主要包括哪几个组成部分?其基本功能是什么? 解:电子计算机主要包括输入设备、输出设备、存储器、运算器和控制器。

输入设备的作用是将程序、原始数据、文字、字符、控制命令或现场采集的数据等信息输入到计算机。

输出设备把外算机的中间结果或最后结果、机内的各种数据符号及文字或各种控制信号等信息输出。

存储器的功能是存储程序、数据和各种信号、命令等信息,并在需要时提供这些信息。 运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。 控制器是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。 2.12 半加器与全加器之间的主要区别是什么?

解:半加器电路要求有两个输入端,用以两个代表数字(A0,B0)的电位输入;有两个输出端,用以输出总和S0及进位C1。从真值表得出布尔代数式: C1=A0×B0,S0=A0⊕B0

可以用“与门”及“异或门”(或称“异门”)来实现真值表的要求。

全加器电路的要求是:有3个输入端,以输入Ai,Bi和Ci,有两个输出端,即Si及Ci+1。布尔表达式如下: Si = Ai⊕Bi⊕Ci

Ci+1 = Ai Bi + Ai Ci + Bi Ci

故Si可用“异或门”来实现,进位Ci+1可用3个“与门”及一个“或门”来实现。 2.13 判断溢出的方法有几种?各自有何特点?在电路中如何实现? 解:设:被操作数为:[X]补=Xs,X1X2„Xn

9

操作数为:[Y]补=Ys,Y1Y2„Yn 其和(差)为:[S]补=Ss,S1S2„Sn ⑴采用一个符号位

采用一个符号位检测溢出时,当Xs=Ys=0,Ss=1时,产生正溢;当Xs=Ys=1,Ss=0时,产生负溢。

溢出判断条件为: 溢出=Ss+Xs Ys ⑵采用进位位判断

两数运算时,产生的进位为:Cs,C1C2„Cn,其中:Cs为符号位产生的进位,C1为最高数值位产生的进位。

两正数相加,当最高有效位产生进位(C1=1)而符号位不产生进位(Cs=0)时,发生正溢;两负数相加,当最高有效位不产生进位(C1=0)而符号位产生进位(Cs=1)时,发生负溢。 故溢出条件为 :溢出=Cs⊕C1 ⑶采用变形补码(双符号位补码)

在双符号位的情况下,把左边的符号位Ss1叫做真符,两个符号位都作为数的一部分参加运算。这种编码又称为变形补码。 双符号位的含义如下:

Ss1Ss2=00 结果为正数,无溢出 Ss1Ss2=01 结果正溢 Ss1Ss2=10 结果负溢

Ss1Ss2=11 结果为负数,无溢出 溢出条件为:溢出=Ss1⊕Ss2

2.14 什么是锁存器?它在计算机的电路中有什么作用?

解:锁存器是一种存储逻辑信号的电路,由触发器构成,它的输出端有输出使能控制,它可以使输出状态不随输入端状态的变化而改变,处在保持状态。

10

它把当前的状态锁存起来,使CPU送出的数据在接口电路的输出端保持一段时间锁存后状态不再发生变化,直到解除锁定。

2.15 什么是ALU?它在计算机中起什么作用?

解:ALU(Arithmetic Logical Unit)计算机的中央处理器(CPU)中的算术与逻辑单元;运算器。

主要负责执行所有数学与逻辑功能。 2.16 微处理器内部是由哪些主要部件所组成的?

解:CPU的内部结构可分为控制单元、逻辑单元和存储单元三大部分。 2.17 简述冯•诺依曼计算机的体系结构与工作原理。 解:工作原理: 存储程序(或程序存储)。 体系结构:

1.计算机完成任务是由事先编号的程序完成的;

2.计算机的程序被事先输入到存储器中,程序运算的结果,也被存放在存储器中。 3.计算机能自动连续地完成程序。

4.程序运行的所需要的信息和结果可以通输入\\输出设备完成。 5.计算机由运算器、控制器、存储器、输入设备、输出设备所组成; 2.18 计算机中的三种总线分别是什么?控制总线传输的信号大致有哪些? 解:地址总线、数据总线和控制总线。

控制总线传输控制信号和状态信号,使得计算机各部分协调工作。 2.19 微处理器、微型计算机与微型计算机系统有何区别?

解:微处理器:一般也称中央处理器(CPU),是本身具有运算能力和控制功能,是微型计算机的核心。

微型计算机:由CPU、存储器、输入输出接口电路和系统总线构成。

微型计算机系统:以微型计算机为主体,配上系统软件和外部设备以后,就成为了计算机

系统。

2.20 微型计算机的分类方法有几种?可以分为几个类别?

11

解:1. 按CPU字长分类:微型计算机按字长可以分为:8位机、16位机、32位机、64位机。

2. 按结构分类:按结构可以分为:单片机,单板机,多板机。 3. 按用途分类:按用途可分为:工业控制机,数据处理机。

4. 按CUP型号分类:按CPU的型号可以分为:286机、386机、486机、Pentium。

习题三

3.1 8086 CPU有多少根数据线和地址线?它能寻址多少内存单元和I/O端口?

8088 CPU又有多少根数据线和地址线?为什么要设计8088 CPU?

解:16,20,1M

8,20,为了方便与8位外部接口或设备相连。

3.2 8086 CPU按功能可以分为哪两大部分?它们各自的主要功能是什么?

解:8086微处理器从功能结构上可以划分为执行部件EU(Execution Unit)和总线接口部件BIU (Bus Interface Unit)两大部分.

总线接口部件具有下列功能:物理地址的形成、预取指令、指令队列排队、读/写操作数和总线控制。

指令执行部件的功能是进行指令译码并执行指令。

3.3 什么是微处理器的并行操作功能?8086 CPU是否具有并行操作功能?

在什么情况下8086的执行单元EU才需要等待总线接口单元BIU提取指令?

解:并行操作是同时完成取指/操作数和执行指令操作,有。

在遇到系统复位或执行转移指令等特殊情况,指令队列被刷新时,EU才需要等待BIU进行取指操作。或者在EU需要操作数而BIU正忙时, EU需要等待BIU执行完当前的操作,再去取操作数,等到EU得到操作数以后,才能进行这条指令的执行操作。 3.4 逻辑地址和物理地址有何区别?段加偏移的基本含义是什么?

12

解:逻辑地址也称相对地址或虚拟地址,它是目标程序中的地址。物理地址也称绝对地址或实地址,它是物理存贮器的单元地址。物理地址=段基地址×16+偏移地址。 3.5 基址指针BP和堆栈指针SP在使用中有何区别?

解:BP则是用来存放位于堆栈段中的一个数据区基址的偏移地址的,称作基址指针寄存器。SP给出栈顶的偏移地址,称为堆栈指针寄存器。 3.6 段地址和段起始地址是否相同?两者是什么关系?

解:段地址为段的起始单元的物理地址(低4位一般为0)除以16的结果。 段起始地址为段的起始单元的物理地址,它必须能被16整除。 段地址=段起始地址/16

3.7 8086 CPU一般使用哪个寄存器来保存计数值? 解:CX

3.8 寄存器IP的用途是什么?它提供的是什么信息? 解:用于微处理器在程序中顺序寻址代码段中的下一条指令。

给出接着要执行的指令在代码段中的偏移。

3.9寄存器FLAGES的用途是什么?它提供的是什么信息? 解:反映处理器的状态和运算结果的某些特征。

进位标志,零标志,符号标志,溢出标志,奇偶标志,辅助进位标志,方向标志,中断

允许标志,追踪标志

3.10 对于数字0,对应的零标志是否为1? 解:不是,零标志是用于反映运算结果的。

3.11 在实模式下,对于如下段寄存器内容,写出相应的段起始地址和结束地址:

(1) 1000H (3) E000H

(2) 1234H (4) AB00H

解:(1)10000H~1FFFFH (2)12340H~2233FH

(3)E0000H~EFFFFH (4)AB000H~BAFFFH

3.12 在实模式下,对于如下的CS:IP组合,写出相应的存储器地址:

13

(1) 1000H:2000H (3) 1A00H:E000H

(2)25A00H

(2) 2400H:1A00H (4) 3456H:AB00H (3)28000H

(4)3E060H

解:(1)12000H

3.13 什么是总线周期?微处理器在什么情况下才执行总线周期?

解:把执行外部总线对存储器或I/O端口进行一次信息的输入或输出所需要的时间 称为总线周期。

①在指令的执行过程中,根据指令的需要,由执行单元EU,请求BIU执行一个总线周期。 ②当指令队列寄存器已经空出两个字节,BIU必须填写指令队列的时候。 3.14 一个基本的总线周期由几个状态组成?在什么情况下需要插入等待状态? 解:至少由4个状态组成,分别 成为T1,T2,T3,T4. 在总线周期的T3和T4之间插入一些必要的等待状态

3.15 什么叫做非规则字?微处理器对非规则字的存取是如何进行的?

解:其低位字节可从奇数地址开始,这种方式为非规则存放,这种存放的宇为非规则字

若存放的数据为8位,则将它们按顺序进行存放;若存入的数据为一个16位的字,则将字的最高字节存于高地址单元,低位字节存于低地址单元;若存放的数据为32位的双字(这通常是指地址指针数据),则将地址指针的偏移量(字)存于低地址的字单元中,将地址指针的段基址(字)存于高地址的字单元中。对非规则字的存取需要两个总线周期。 3.16 什么是存储器的分体结构?用什么信号来实现对两个存储体的选择?

解:1M字节的存储空间分成两个512K字节的存储体,一个是偶数地址存储体,其数据线与系统总线高8位相连,用BHE=0作为选通信号;一个是奇数地址存储体。其数据总线与系统总线低8位相连,用A0=0作为选通信号 两个存储体采用字节交叉编址方式

3.17 为什么8086微处理器要采用分体结构?而8088微处理器不采用分体结构?

解:8086是16位数据总线,故在组织1MB的存储器时,被分成两个512KB的存储体,分别叫做高位库和低位库。高位库与8086数据总线中的D15~D8相连,库中每个单元的地址均为奇数;低位库与数据总线中的D7~D0相连,库中每个单元的地址均为偶数。

14

8088因为外中数据总线为8位,因此,它所对应的1MB的存储空间是一个不分高位库和低位库的单一存储体。

3.18 堆栈的深度由哪个寄存器确定?为什么一个堆栈的深度最大为64KB?

解:堆栈的深度由SP值决定,由于16位的SP=FFFFH可最大寻址64KB,故深度最大为64KB。 3.19 在实模式下,若SS=1000H,SP=2000H,AX=3000H,写出执行PUSH AX指令后SS、

SP和相应的堆栈中的内容。

解:SS=1000H SP=1FFEH

(2000H)=30H (1FFFH)=00H

3.20 在实模式下,若SS=2200H,SP=1100H,写出执行POP AX指令后SS、SP的内容。 解:SS=2200H SP=1102H

3.21 微处理器的和引脚信号各表示什么操作?

解:写控制,有效时,表示CPU正在写出数据给存储器或I/O端口

读控制,有效时,表示CPU正在从存储器或I/O端口读入数据

3.22 微处理器的ALE信号有什么作用?

解:地址锁存允许有效时,表示复用引脚:AD7~AD0和A19/S6~A16/S3正在传送地址信息 3.23 微处理器的DT/信号有什么作用?它在什么情况下被浮置为高阻状态? 解:数据发送/接收,表明当前总线上数据的流向. 在DMA方式下,DT/被浮置为高阻状态

3.24 8086系统的最小模式和最大模式的区别是什么?是由什么引脚的信号决定的? 解:工作在最小模式时,是一个单处理器系统,所有总线控制信号有CUP直接产生。 工作在最大模式时,系统中除了主CPU外,还有其他协处理器,是一个多处理器系统,这时CPU仅向总线控制器8288提供状态信号S2 S1 S0,,而由8288产生所有总线控制信号,以支持构成多处理器系统。 MN/MX

3.25 微处理器中为什么要使用堆栈这样的数据结构?

15

解:因为硬件和软件堆栈已经用于支持4个主要的计算领域:表达式计算,子程序返回地址存储,动态分配局部变量存储器和子程序参数传递。

习题四

4.1 简述存储介质和半导体存储器的基本分类情况。

解:存储器按存储介质分,有半导体存储器、磁存储器和光存储器。

半导体存储器按工作方式分,有随机存取存储器(RAM)和只读存储器(ROM);RAM又可分为双极型半导体和单极MOS型;MOS型RAM还可以分为静态和动态的。ROM可分为掩膜ROM和可编程ROM,可编程ROM又分为可编程PROM,可擦除可编程EPROM和电可擦除可编程EEPROM。 4.2 简述静态RAM与动态RAM的区别与各自的优缺点。

解:静态RAM是靠双稳态触发器来记忆信息的;动态RAM是靠MOS电路中的栅极电容来记忆信息的。动态RAM需要设置刷新电路。但动态RAM比静态RAM集成度高、功耗低,从而成本也低,适于作大容量存储器。所以主内存通常采用动态RAM,而高速缓冲存储器(Cache)则使用静态RAM。

4.3 简述掩模ROM、PROM、EPROM和EEPROM的主要特点和应用场合。

解:MASK ROM价格便宜,但程序在出厂时已经固化,适合程序固定不变的应用场合。

OTP ROM的价格适中,同时又拥有一次性可编程能力,适合既要求一定灵活性,又要求低成本的应用场合,尤其是功能不断翻新、需要迅速量产的电子产品。

EPROM的写入要用专用的编程器,并且往芯片中写内容时必须要加一定的编程电压。特点是具有可擦除功能,擦除后即可进行再编程,但是缺点是擦除需要使用紫外线照射一定的时间。

EEPROM的擦除不需要借助于其它设备,它是以电信号来修改其内容的,而且是以Byte为最小修改单位,不必将资料全部洗掉才能写入,彻底摆脱了EPROM Eraser和编程器的束缚。它的最大优点是可直接用电信号擦除,也可用电信号写入。

16

4.4 当前新型存储器都有哪些?今后的发展趋势如何?

解:铁电存储器(FeRAM),具有高速、高密度、低功耗和抗辐射等优点;磁性随机存储器(MRAM);相变存储器(OUM),优点在于产品体积较小、成本低、可直接写入(即在写入资料时不需要将原有资料抹除)和制造简单。

向更高密度、更大带宽、更低功耗、更短延迟时间、更低成本的主流DRAM技术方向发展。 4.5 存储器和CPU连接时应考虑哪几方面的问题?

解:存储器与CPU连接,要遵循三条总线对应连接的总原则,同时还要考虑:CPU总线的负载能力;CPU与存储器速度的配合问题;存储器的地址空间分配;读/写控制信号的连接;数据线的连接;地址线的连接与存储芯片片选信号的产生。

4.6 一片静态RAM芯片通常包含哪些引脚?这些引脚各起什么作用?

解:A-A是地址输入信号引脚; 是芯片选择引脚; 是写入启用引脚;V是供电引脚;D是数

据输入引脚;D是数据输出引脚;GND是接地引脚。有的SRAM还有OE引脚,功能同 引脚相对,

它让SRAM知道要进行读取操作而不是写入操作。 4.7 下列存储器各需要多少条地址线和数据I/O线?

(1)1K×8 (3)16K×1

(2)4K×4 (4)256K×8

解:(1)10条地址线,8条数据线 (2)12条地址线,4条数据线 (3)14条地址线,1条数据线 (4)18条地址线,8条数据线

4.8 分别用1K×4位16K×1位芯片构成64K×8位的存储器,各需要多少片芯片? 解:128;32

4.9 试为某8位微机系统设计一个具有16KB的ROM和48KB的RAM的存储器。ROM选用2716(2K*8),地址从0000H开始;RAM紧随其后,芯片采用6264(8K×8)。

4.10 某RAM芯片的引脚中有12根地址线,8根数据I/O线,该存储器芯片的容量为多大?若该芯片在系统中的起始地址为1000H,其结束地址是多少?

17

解:4K*8,5095H

4.11 某CPU有16根地址线(A0~A15),试分析下图中片选信号、所指定的存储器地址范围。 解:

:0000H-6FFFH,或者1000H-7FFFH,或者8000H-EFFFH : 0000H-6FFFH

4.12 试为8088CPU设计192K×8位存储器系统。其中程序区为64K×8位,置于CPU寻址空间最高端,采用27256(32K×8位);数据区为128K×8位,采用62256(32K×8位),置于寻址空间最低端。写出地址分配关系,画出所设计的电路图。 解:

RAM: 00000-07FFFH ROM: 20000-27FFFH

08000-0FFFFH 28000-2FFFFH 10000-17FFFH 18000-1FFFFH

18

习题五

5.1 分别指出下列指令中源操作数和目的操作数的寻址方式。

(1) MOV BX,1000H

(2) MOV BL,[BX]

(3) MOV BUF[BX],AX (4) MOV BX,[BP][SI] (5) MOV [DI],DL

(6) MOV AX,RESULT

解: (1)源:立即数寻址;目的:寄存器寻址

(2)源:寄存器间接寻址;目的:寄存器寻址 (3)源:寄存器寻址;目的:寄存器相对寻址 (4)源:基址变址寻址;目的:寄存器寻址 (5)源:寄存器寻址;目的:寄存器间接寻址 (6)源:直接寻址;目的:寄存器寻址 (7)源:寄存器寻址:目的:直接寻址; (8)源:相对基址变址寻址;目的:寄存器寻址

5.2 设已知:(BX)=2000H,(SI)=120H,(DS)=1200H,(SS)=200H,(BP)=3000H,符号地址VARE=1000H。试回答在以下各种寻址方式下操作数存放于何处,如果是在存储单元中,则计算单元的物理地址是什么?

(1)使用BX的寄存器寻址(例如:MOV AX,BX) (2)立即数寻址(例如:MOV AX,1234)

(3)使用BX的寄存器相对寻址(例如:MOV AX,[BX]) (4)直接寻址(例如:MOV AX,[1234])

(5)使用SI的寄存器间接寻址(例如:MOV AX,[SI]) (6)使用BP和SI的基址变址寻址(例如:MOV AX,[BP][SI]) (7)使用BX和SI的相对基址变址寻址(例如:MOV AX,[BX][SI]) 解: (1)操作数在BX寄存器中;

(2)操作数在指令中;

19

(3)操作数在存储单元中,物理地址=15000H; (4)操作数在存储单元中,物理地址=13000H; (5)操作数在存储单元中,物理地址=12120H; (6)操作数在存储单元中,物理地址=05120H; (7)操作数在存储单元中,物理地址=15120H。

5.3 现有(DS)=2000H,(BX)=100H,(SI)=2H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H),(21203H)=65H。试指出下列各条指令单独执行后累加器中的内容是什么?

(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]

(8) MOV AL,[BX]

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

解: (1)(AX)=1200H; (2)(AX)=100H; (3)(AX)=4C2AH; (4)(AX)=3412H

(5)(AX)=4C2AH; (6)(AX)=7856H; (7)(AX)=65B7H; (8)(AX)=××12H

5.4 指出下列指令的错误是什么?

(1) MOV BL,AX (2) MOV [BX],[BP+SI] (3) MOV CS,AX (4) MOV DS,1000H (5) MOV BX,[SI][DI] (6) MOV [2000H],10

解: (1)类型属性不匹配; (2)两操作数都是存储单元; (3)把CS用作目的操作数

(4)立即数送段寄存器; (5)源操作数中两个均为变址寄存器;(6)类型属性不明确

20

5.5 设当前数据段寄存器的内容为1B00H,在数据段偏移地址为2000H开始的单元内,含有一个内容为0FF10H和8000H的指针,它们是一个16位变量的偏移地址和段地址,试写出把该变量装入AX的指令序列,并画出内存图。 解: LDS BX,[2000H]

MOV AX,[BX]

5.6 设当前(SP)=0100H,(AX)=2000H,(BX)=0B100H,试回答:

执行指令 PUSH AX后,(SP)为多少?画出堆栈示意图。

再执行指令 PUSH BX 和 POP AX 后,(SP)为多少?画出堆栈示意图。 解: (1) 执行 PUSH AX 后: (SP)=00FEH

(2) 执行 PUSH BX 和 POP AX 后: (SP)=00FEH

5.7 要求从85号端口读入一个字节数据,然后到数据段首地址为1000H的表格中换取相应的数据码,再将该数据输出至3000号端口,试编写指令序列。 解: IN AL,85

MOV BX,1000H XLAT

MOV DX,3000 OUT DX,AL

5.8 试编写将某十进制数字转换成七段代码的程序段。设该十进制数字存储在名为BCDKEY的字节变量中,要求将转换的结果送入RESULT变量(十进制数字与相应七段代码的对应表如下)。

十进制数字 0 1 2 3 4 5 6 7 8 9 七段代码 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH

十进制数字 0 1 2 3 4 5 6 7 8 9

21

七段代码 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH

十进制数字 0 1 2 3 4 5 6 7 8 9 七段代码 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH

十进制数字 0 1 2 3 地址下重叠 5 6 7 8 9

七段代码 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH

十进制数字 0 1 2 3 4 5 6 7 8 9七段代码 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH

十地址不重叠

0 1 2 3 4 5 6 7 8 9七段代码 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH

十进制数字 0 1 2 3 4 5 6 7 8 9七段代码 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH

十进制数字 0 1 2 3 地址下重叠 5 6 7 8 9

七段代码 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH

十进制数字 0 1 2 3 4 5 6 7 8 9七段代码 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH

22

十进制数字 0 1 2 3 4 5 6 7 8 9 七段代码 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH

十进制数字 0 1 2 3 4 5 6 7 8 9 七段代码 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH

十进制数字 0 1 2 3 地址下重叠 5 6 7 8 9

七段代码 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH

十进制数字 0 1 2 3 4 5 6 7 8 9七段代码 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH

十地址不重叠

0 1 2 3 4 5 6 7 8 9七段代码 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH

十进制数字 0 1 2 3 4 5 6 7 8 9七段代码 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH

十进制数字 0 1 2 3 地址下重叠 5 6 7 8 9

七段代码 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH

23

解: MOV AL,BCDKEY

MOB BX,DISPLAY XLAT

MOV RESULT,AL

5.9 根据以下要求编写相应的指令:

(1)将AX寄存器和BX寄存器的内容相加,结果存入BX寄存器。 (2)用增量指令使采用BX寄存器间接寻址的单元中的字节内容加1。

(3)用BX寄存器和位移量300H的寄存器相对寻址方式把存储器中的一个字和(CX)相加,结果送回该存储单元中。

(4)用寄存器BX和SI的基址变址寻址方式,把存储器中的一个字节与AH寄存器的内容相加,并保存在AH中。

(5)采用合适的指令,将1000H单元中的字与1200H单元中的字相加,结果存入1000H单元。 解: (1) ADD BX,AX

(2) INC BYTE PTR[BX] (3) ADD [BX+300H],CX (4) ADD AH,[BX][SI] (5) MOV BX,1000H MOV AX,[1200H] ADD [BX],AX

5.10设以下表达式中的变量名均为16位带符号数所在单元的地址,编写指令序列,完成下列运算(出发运算的余数舍去):

(W×Y)/(A+70)→X (A-B×C)/(X-Y)→Z 解:(1) MOV AX,W

IMUL Y

24

MOV BX,A ADD BX,70 IDIV BX MOV X,AX (2) MOV AX,B

IMUL C MOV BX,AX MOV CX,DX MOV AX,A CWD SUB AX,BX SBB DX,CX MOV BX,X SUB BX,Y IDIV BX MOV Z,AX

5.11 变量VARA1和变量VARA2已定义如下:

VARA1 DW 23A8H,0280H VARA2 DW 0A210H,1248H

(1)将VARA1和VARA2单元中的对应字数据相加,结果存入VARA2指示的单元中 (2)将VARA1单元中的两个字作为双字和VARA2单元中的两个字组成的双字相加,结果存放在VRAR2单元中,双字的存放格式都是低位字在低地址单元、高位字在高地址单元中。

解: (1) MOV AX,VARA1

ADD VARA2,AX

25

(2) MOV AX,VARA1

ADD VARA2,AX MOV AX,VARA1+2 ADC VARA2+2,AX

5.12 写出完成以下组合式BCD码计算的指令序列:

BCD1+BCD2-BCD3→DX 解: MOV AL,BCD1

ADD AL,BCD2 DAA MOV DL,AL MOV AL,BCD1+1 ADC AL,BCD2+1 DAA MOV DH,AL MOV AL,DL SUB AL,BCD3 DAS MOV DL,AL MOV AL,DH SBB AL,BCD3+1 DAS MOV DH,AL

5.13 指出下列各条指令是否正确,如不正确,则指出其错在何处。

(1) MOV CS,1000H

(2) ADC BX,25H

26

(3) ADD [BX],20 (4) MUL AX,BL

(5) PUSH CS (6) MOV DX,2000H (7) ADD [BX+SI],30H (8) POP CS (9) INC [SI]

(10)MOV [BX],[SI]

解: (1)错误 (2)正确 (3)错误 (4)错误 (5)正确

(6)正确 (7)错误 (8)错误 (9)错误 (10)错误

5.14 用逻辑运算指令分别写出完成下列要求的指令:

将BX寄存器中的高4位清零。 将CX寄存器中的第0、1两位置1。 将AL寄存器的中间4位变反。 测试AX的最高位和次高位是否为0。 解:(1) MOV AX,0FFFH

AND BX,AX (2) MOV AX,3

OR CX,AX (3) MOV BL,3CH

XOR AL,BL (4) MOV BX,3FFFH

TEST AX,BX

5.15 设(BX)=0A6H,(CL)=3,CF为1,试指出下列各条指令单独执行后BX中的值。

(1) SAR BX,1 (2) SHR BX,CL (3) SHL BL,CL (4) SAL BL,1 (5) ROR BX,CL (6) RCL BX,CL (7) ROL BH,1 (8) RCR BL,1

27

解: (1)(BX)=0053H (2) (BX)=0014H (3) (BX)=0030H (4) (BX)=004CH

(5)(BX)=0C014H (6) (BX)=0534H (7) (BX)=0A6H (8) (BX)=00D3H

5.16 已知有一32位的无符号数在(DX,AX)中,试编写指令序列,将该32位数左移4位,将低4位用0填补;将移出的高4位存入CH的低4位中。 解: MOV CL,4

MOV CH,DH SHR CH,CL SHL DX,CL MOV BL,AH SHR BL,CL SHL AX,CL OR DL,BL

5.17 利用移位指令、传送指令和加法指令完成乘法运算(AX)×10。 解: SAL AX,1

MOV BX,AX MOV CL,2 SAL AX,CL ADD AX,BX

5.18 试分别指出在下列3种条件下执行指令 SUB AX,BX 时,对标志位OF、CF、SF、ZF影响的情况:

(1) (AX)=14C6H , (BX)=80DCH (2) (AX)=42C8H , (BX)=608DH

28

(3) (AX)=0D023H , (BX)=9FD0H 解: (1) OF=1,CF=1,SF=1,ZF=0

(2) OF=0,CF=1,SF=1,ZF=0 (3) OF=0,CF=0,SF=0,ZF=0

5.19 在8086/8088指令系统中,哪些指令可以加重复前缀?重复前缀共有哪几种形式?它们的操作功能是什么?

解: 可加重复前缀的指令有:MOVS、STOS、SCAS、LODS、CMPS; 重复前缀的形式有:REP、REPE/REPZ、REPNE/REPNZ

5.20 在一个名为STRING、长度为100字节的字符串中查找是否含有字符“$”,如果有则将第一次发现的“$”字符所在单元的偏移地址送入BX寄存器中;如果未曾找到,则将0FFFFH送入BX寄存器中。 解: CLD

MOV AL,‘$’ LEA DI,STRING MOV CX,100 REPNE SCASB JNE ZER DEC DI MOV BX,DI JMP STOP

ZER: MOV BX,0FFFFH STOP: HLT

29

5.21 将2000H段中名为BUFST的缓冲区中长度为200个字节的数据串移到3000H段中名为DSTST的缓冲区中。编写两种采用不同指令实现该功能的程序段。 解:(1) MOV AX,2000H

MOV DS,AX MOV AX,3000H MOV ES,AX MOV CX,200 CLD

LEA SI,BUFST LEA DI,DSTST REP MOVSB HLT

(2) MOV AX,2000H

MOV DS,AX MOV AX,3000H MOV ES,AX MOV CX,200

MOV SI,OFFSET BUFST MOV DI,OFFSET DSTST AGN: MOV AL,[SI]

MOV ES:[DI],AL INC SI INC DI LOOP AGN HLT

30

5.22 将1000段中名为DATSTR的字符串,向高地址方向平移20个字节,字符串的长度为45字节。 解: STD

MOV AX,1000H MOV DS,AX MOV ES,AX LEA SI,DATSTR+44 LEA DI,DATSTR+64 MOV CX,45 REP MOVSB HLT

5.23 用其它指令完成与下列指令同样的功能

(1) REP MOVSB (3) REP STOSB

(2) REPE CMPSW (4) REPNE SCASB

解: (1) AGAIN:MOV AL,[SI] (2)AGAIN: MOV AL,[SI]

MOV ES:[DI],AL CMP AL,ES:[DI] INC SI INC DI

INC SI INC DI

LOOP AGAIN LOOPE AGAIN

(3) AGAIN: MOV ES:[DI],AL (4)AGAIN: CMP AL,[DI]

INC DI

INC DI

LOOP AGAIN LOOPNE AGAIN

31

5.24 有100个学生的计算机课程成绩存放在COMPUT缓冲区中,编写指令序列统计85分以上、60~85分、60分以下各有多少人,并把统计结果存入ORDER开始的三个字节单元中。 解: LEA SI,COMPUT

MOV CX,100 MOV BL,10 MOV BH,0 MOV DX,0 AGAIN: MOV AL, [SI]

CBW IDIV BL CMP AL,9 JGE RANGE1 CMP AL,8 JE GE85 CMP AL,6 JGE RANGE2 INC BH JMP NEXT GE85: CMP AH,5

JGE RANGE1 RANGE2: INC DL

JMP NEXT RANGE1: INC DH NEXT: INC SI

LOOP AGAIN MOV ORDER,DH

32

MOV ORDER+1,DL MOV ORDER+2,BH HLT

5.25 在内存数据区从4000H开始存放着由30个字符组成的字符串,编写指令序列,查找并统计串中空格符的个数,并将统计结果存入4020H单元中。 解: MOV SI,4000H

MOV CX,30 SUB BL,BL MOV AL,20H AGAIN: CMP AL,[SI]

JNZ NEXT INC BL NEXT: INC SI

LOOP AGAIN MOV SI,4020H MOV [SI],BL HLT

5.26 编写一指令序列,统计寄存器BX中内容含“1”的个数,将统计结果送入CX寄存器中。 解: SUB CX,CX GOON: CMP BX,0

JZ STOP SHR BX,1 JNC JUMP INC CX

33

JUMP: JMP GOON STOP: HLT

5.27 试分析下列程序段:

ADD AX,BX JNO L1 JNC L2 SUB AX,BX JNC L3 JNO L4 JMP L5

如果AX和BX的内容给定如下: AX BX

(1) 147BH 80DCH (2) 0B568H 54B7H (3) 4C28H 608DH (4) 0D023H 9FD0H (5) 94B7H 0B568H

问在该5种条件下,以上程序执行完后程序将转向哪里? 解: (1) L1; (2) L1; (3) L2; (4) L5; (5) L5

5.28 设在内存数据段中有一个由28个字节数据组成的数组,数组的起始地址为2000H,试编写程序段,将其分成正数组和负数组,正数组存放于2020H开始的单元中;负数组存放于2040H开始的单元中。

解: MOV BX,2000H

MOV CX,1CH

34

MOV SI,2020H MOV DI,2040H LOOP1: MOV AL,[BX]

SUB AL,0 JS NEGAT MOV [SI],AL INC SI JMP NEXT NEGAT: MOV [DI],AL

INC DI

NEXT: LOOP LOOP1

HLT

5.29 在首地址为VALU的字数组中,存放有10个无符号数,编写指令序列,求出它们的平均值并存放于BL寄存器中(只取整数)。再统计出数组中有多少个小于平均值的数,将结果存于DL寄存器中。

解: MOV SI,0

MOV DX,0 MOV CX,DX

AVERAGE: MOV AL,VALU[SI]

CBW ADD DX,AX INC SI LOOP AVERAGE MOV AX,DX MOV BL,10

35

DIV BL MOV BL,AL MOV SI,0 MOV DX,0 MOV CX,0

COMPARE: MOV AL,VALU[SI]

CMP AL,BL JAE GOON INC DL GOON: INC SI

LOOP COMPARE HLT

5.30 有20个ASCII码表示的分离式BCD码存放在缓冲区UNPBCD中,编写指令序列将它们转换成组合式BCD码,即把两个相邻字节单元的数码合并成一个字节单元,高地址单元存放在高4位,低地址单元存放在低4位,转换结果存放于PABCD缓冲区中。 解: MOV CX,14H

LEA SI,UNPBCD LEA DI,PABCD CONVERT: PUSH CX

MOV AL,[SI] SUB AL,30H MOV BL,AL MOV AL,[SI+1] SUB AL,30H MOV CL,4

36

SHL AL,CL ADD AL,BL MOV [DI],AL POP CX ADD SI,2 INC DI LOOP CONVERT HLT

习题六

6.1 请指出变量与标号都有哪些属性?它们的主要区别是什么? 解:变量的属性有:段属性,偏移属性,类型属性。

标号的属性有:段属性,偏移属性,距离属性。

变量和标号都是一种符号地址。变量的内容是代表存放在某些存储单元中的数据,变量名就代表这些单元的起始地址;标号是代表一条指令目标代码的起始地址。

6.2 在一个数据段中,试用伪指令定义下列数据或字符变量,并画出内存分配示意图。 ⑴ 为十进制数58定义字节变量DEDAT

⑵ 为二进制数11011010B定义字节变量BINDAT ⑶ 为十六进制数B7A2H定义字变量HEXDAT ⑷ 定义6个0的字变量

⑸ 为字符串‘I have a pen’定义字节变量STRING 解: (1) DEDAT DB 58

37

(2) INDAT DB 11011010B (3) HEX DW 0B7A2H (4) DW 6 DUP(0)

(5) STRING DB ‘I have a pen’

6.3 已知在某数据段中有如下变量定义: VRWD

DW 256 DUP(?)

现要求对这些变量单元既能进行字操作,同时在另一种场合又能进行字节操作,请问应该如何解决?

解: 用LABEL伪指令进行字节定义:

VRBD LABEL BYTE VRWD DW 256(?)

6.4 已知有如下赋值语句: ALPHA

EQU 100

BETA EQU 25 GAMMA

EQU 2

试指出下列表达式的值为多少? ⑴ ALPHA*100

⑵ ALPHA MOD GAMMA+BETA ⑷ (BETA/3) MOD 5

⑶ (ALPHA+2)*BETA-2

⑸ (ALPHA+3)*(BETA MOD GAMMA) ⑹ ALPHA GE GAMMA ⑺ BETA AND 7

⑻ GAMMA OR 3

解: (1) 10000 (2) 26 (3) 2446 (4) 3

(5) 309 (6) 0FFFFH (7) 08H (8) 0BH

6.5 分析如下程序,画出堆栈最满时各单元的地址及内容。

38

STASEG SEGMENT AT 1000H

DW 200 DUP(?)

TOP LABEL WORD STASEG ENDS CODSEG SEGMENT

ASSUME CS:CODSEG,SS:STASEG

START:MOV AX,STASEG

MOV SS,AX MOV SP,OFFSET TOP PUSH

DS

SUB AX,AX PUSH PUSH PUSHF „„ „„ POPF POP BX POP AX „„

AX BX

CODSEG ENDS

END START

解: (1) 10000 (2) 26 (3) 2446 (4) 3

6.6 编写一完整的汇编语言源程序,在数据段中定义一双字变量VARLD,再在附加段中也定义一双字变量VARLE,然后将这两个双字内容相加,结果存放于数据段的RESU变量中。

39

解: DATA SEGMENT WVLD LABEL WORD VARLD DD 58A027B4H RESU DW ?,? DATA ENDS EXTR SEGMENT WVLE LABEL WORD VARLE DD 0F4C2380H EXTR ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:EXTR START: MOV AX,DATA MOV DS,AX MOV AX,EXTR MOV ES,AX MOV AX,WVLD ADD AX,ES:WVLE MOV RESU,AX MOV AX,WVLD+2 ADC AX,ES:WVLE+2 MOV RESU+2,AX MOV AH,4CH INT 21H CODE ENDS END START

40

6.7 循环程序一般由哪几部分构成?各部分的功能是什么?

解: (1)循环初始化部分。主要是设定循环的初始状态,为循环作准备。如设置循环最大次数,循环过程中相关寄存器所需的初始值等等。

(2)循环工作部分。这是循环程序的主体部分,它完成该循环体所要实现的主要功能,如数据的传送、运算等。

(3)循环参数调整部分。主要功能是用于修改某些数据,以保证每次循环时参与运行的某些信息能发生有规律的变化,使完成的功能不完全重复。

(4)循环控制部分。循环控制部分是循环程序设计的关键,它根据循环控制条件来控制循环的运行和结束,该控制功能由循环控制指令完成。

6.8 设有一汇编语言源程序如下:

DATSEG SEGMENT

CONDAT DB 3EH,0F7H,68H,9CH,7FH ORG 1000H SUM DW ? DATSEG ENDS PROSEG SEGMENT

ASSUME CS:PROSEG,DS:DATSEG MAIN

PROC FAR

DS

START: PUSH

SUB AX,AX PUSH

AX

MOV AX,DATSEG MOV DS,AX LEA BX,CONDAT MOV CX,5

41

XOR DX,DX

MOV AL,[BX]

NMP:

AND AL,AL JS NEXT ADD DL,AL JNZ NEXT INC DH

NEXT: INC BX

LOOP

NMP

LEA BX,SUM MOV [BX],DX RET

MAIN ENDP PROSEG ENDS

END START

简要说明此程序的功能,指出程序运行后四个通用寄存器AX、BX、CX、DX中的内容各是什么?程序运行的结果是什么?保存在什么地方?

解: 程序功能是,统计CONDAT数据区的9个字节,将正数之和送入1000H单元;将前几个为0的数的个数送入1001H单元。

程序执行结果:(AX)=0010H (BX)=1000H (CX)=0 (DX)=023EH。

正数之和等于3EH保存于1000H单元中;数组前面0的个数是2,保存于1001H单元中。

6.9设内存自1000H开始的存储区中,存放有20个带符号数,试编一程序段,找出其中最小的数,存于数据区2000H中。

解: MOV AX,1000H MOV DS,AX

42

LEA BX,BUFF MOV CX,[BX] MOV AX,0 SCAN: ADD BX,2 MOV DX,[BX] CMP DX,AX JGE NEXT XCHG AX,DX NEXT: LOOP SCAN MOV [BX],2000H MOV [BX],AX HLT

6.10 在内存的BUFF缓冲区中,存放有一个数据块,数据块的长度存放在BUFF和BUFF+1单元中,从BUFF+2开始存放的是以ASCII码表示的十进制数。编写程序段,将这些ASCII码转换成组合式BCD码(即把两个相邻字节单元的数码并成一个字节单元),高地址的放在高4位。转换后的压缩BCD码存放到BUFF+2开始的单元中。

解: CODE SEGMENT ASSUME CS:CODE CONVER PROC FAR PUSHF PUSH AX PUSH BX PUSH CX PUSF DX PUSH SI

43

PUSU DI LEA SI,ASCDES MOV DI,10 MOV CX,5 MOV AX,0 CONTI:

MUL DI

MOV BL,[SI] MOV BH,0 SUB BL,30H ADD AX,BX INC SI LOOP CONTI MOV BYDAT,AX POP DI POP SI POP DX POP CX POP BX POP AX POPF RET CONVER ENDP CODE ENDS END 44

6.11 设有一由无符号数组成的数组,数组名为ORDER,数组长度为60。编写程序,求该数组中的最大值。

解: DATA SEGMENT ORDER DW 60 DUP(?) MAX DW ? DATA ENDS ;

STACKS SEGMENT DW 256 DUP(0) TOP LABEL WORD STACKS ENDS ;

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACKS START:

MOV AX,DATA

MOV DS,AX MOV AX,STACKS MOV SS,AX

MOV SP,OFFSET TOP LEA SI,ORDER MOV CX,60

CALL FAR PTR SUBPRG MOV MAX,AX MOV AH,4CH INT 21H CODE ENDS

45

CODE1 SEGMENT ASSUME CS:CODE1 SUBPRG PROC FAR PUSHF CMP CX,2 JZ STOP DEC CX ADD SI,2 CALL SUBPRG STOP: MOV AX,[SI] CMP AX,2[SI] JNC NEXT XCHG AX,2[SI] MOV [SI],AX NEXT: MOV AX,[SI] SUB SI,2 POPF RET

SUBPRG ENDP CODE1 ENDS END START

6.12 编写子程序,将从键盘输入的小写字母用大写字母在屏幕显示出来,如不是字母则结束。

解: CODE SEGMENT ASSUME CS:CODE

46

KEYIN PROC FAR PUSH AX PUSH DX NEXT:

MOV AH,1

INT 21H CMP AL,61H JB EXIT CMP AL,7AH JA EXIT SUB AL,20H MOV DL,AL MOV AH,02H INT 21H JMP NEXT POP DX POP AX RET KEYIN ENDP CODE ENDS END KEYIN

6.13 编写子程序,要求从键盘输入一个4位的十六进制数,然后将其转换成二进制数并在屏幕上显示出来。

解: DATPRO SEGMENT BUFF DB 5 DB ?

47

DB 5 DUP(?) DATPRO ENDS PROSEG SEGMENT

ASSUME CS:PROSEG,DS:DATPRO START:

MOV AX,DATPRO

MOV DS,AX LEA DX,BUFF MOV AH,0AH INT 21H

MOV BL,[BUFF+1] LEA SI,BUFF+2 AGAIN:

MOV AL,[SI]

CMP AL,30H JB EXIT CMP AL,39H JBE DECI CMP AL,61H JB EXIT CMP AL,66H JA EXIT SUB AL,27H DECI:

SUB AL,30H

MOV CL,4 SHL AL,CL MOV CX,4 LOOP1:

SHL AL,1

48

JC ONE MOV DL,30H JMP DISPL ONE: MOV DL,31H DISPL:

PUSH AX

MOV AH,2 INT 21H POP AX LOOP LOOP1 INC BL INC SI CMP BL,0 JNZ AGAIN EXIT: MOV AH,4CH INT 21H PROSEG ENDS END START

6.14 编写一个子程序,实现8位无符号数的除法运算,被除数、除数、商和余数存放在自DATA开始的存储单元中。

解: CODESUB SEGMENT ASSUME CS:CODESUB SUBPRO PROC FAR PUSH AX PUSH BX PUSH DX

49

MOV AL,DATA CBW

DIV DATA+1 PUSH AX CBW CALL DISPL POP AX MOV AL,AH CBW CALL DISPL POP DX POP BX POP AX RET

SUBPRO ENDP ;

DISPL PROC NEAR MOV BL,100 DIV BL PUSH AX ADD AL,30H MOV DL,AL MOV AH,2 INT 21H POP AX MOV AL,AH

50

CBW

MOV BL,10 DIV BL PUSH AX ADD AL,30H MOV DL,AL MOV AH,2 INT 21H POP AX MOV DL,AH ADD DL,30H MOV AH,2 INT 21H MOV DL,‘,’ MOV AH,2 INT 21H RET DISPL ENDP CODESUB ENDS END

6.15设有一个由30个数据组成的数组DGRP,编写一完整的汇编语言程序,将该数组分成正数组PGRP和负数组NGRP,并且统计和显示这两个数组中数据的个数。

解: DATSEG SEGMENT DGRP DW 30 DUP(?) PGRP DW 30 DUP(?)

51

NGRP DW 30 DUP(?) DATSEG ENDS PROSEG SEGMENT MAIN PROC FAR

ASSUME CS:PROSEG,DS:DATSEG START:

PUSH DS

SUB AX,AX PUSH AX MOV AX,DATSEG MOV DS,AX MOV CX,30 MOV DX,0 LEA BX,DGRP LEA SI,PGRP LEA DI,NGRP NEXT: MOV AX,[BX] AND AX,AX JL NEGD INC DH MOV [SI],AX ADD SI,2 JMP GOON NEGD: INC DL MOV [DI],AX ADD DI,2 GOON: ADD BX,2

52

LOOP NEXT MOV BL,10 MOV AL,DL CALL DISPL MOV AL,DH CALL DISPL RET MAIN ENDP ;

DISPL PROC NEAR CBW DIV BL PUSH AX ADD AL,30H MOV DL,AL MOV AH,2 INT 21H POP AX ADD AH,30H MOV DL,AH MOV AH,2 INT 21H MOV DL,‘,’ MOV AH,2 INT 21H RET

53

DISP ENDP PROSEG ENDS END START

6.16 设有一组考核数据以字节为单位存放在名为TEST的内存缓冲区中,这些数据都是不超过100的正整数,其中第1个单元存放的是该数组中数据的个数。若将小于60的数划分为等第C,60~80划分为等第B,大于80的数划分为等第A,编程分别统计这三个等第中数据的个数,并在屏幕上显示出统计结果。

解: DATASEG SEGMENT TEST DB 256 DUP(?) A DB 0 B DB 0 C DB 0 DATASEG ENDS ;

CODESEG SEGMENT MAIN PROC FAR

ASSUME CS:CODESEG,DS:DATASEG START: PUSH DS SUB AX,AX PUSH AX

MOV AX,DATASEG MOV DS,AX LEA SI,TEST MOV CL,[SI] MOV CH,0

54

INC SI STATI:

MOV AL,[SI]

CMP AL,80 JBE BCRANK INC A JMP NEXT BCRANK:

CMP AL,60

JB CRANK INC B JMP NEXT CRANK: INC C NEXT: INC SI LOOP STATI MOV AL,A CALL DISPL MOV AL,B CALL SISPL MOV AL,C CALL DISPL RET MAIN ENDP ;

DISPL PROC NEAR CBW

MOV BL,100 DIV BL

55

PUSH AX ADD AL,30H MOV DL,AL MOV AH,2 INT 21H POP AX MOV AL,AH CBW

MOV BL,10 DIV BL PUSH AX ADD AL,30H MOV DL,AL MOV AH,2 INT 21H POP AX ADD AH,30H MOV DL,AH MOV AH,2 INT 21H MOV DL,‘,’ MOV AH,2 INT 21H RET DISP ENDP CODESEG ENDS

56

END START

6.17 从键盘输入某班学生某门课程的成绩,存入内存中,然后将成绩进行分析统计,分别求出九十分以上、八十至八十九分、七十至七十九分、六十至六十九分、六十分以下这五个分数段中各有多少人?五个分数段分别用A、B、C、D、E表示,全班的平均成绩是多少(只取整数)?并将统计结果在屏幕上显示出来。

.MODEL SMALL .DATA

data DB 10 DUP(?)

buffer DB \"Please input 10 scores between 00 and 99.$\" buffer1 DB \"The new order:$\" buffer2 DB \"ave=$\" buffer3 DB \"Scores<$\" below60 DB 0 below70 DB 0 below80 DB 0 below90 DB 0 below100 DB 0

.CODE

newline PROC ;换行 ;

dispave PROC;将buffer2中的内容作为一行显示

PUSH AX PUSH DX MOV AH,02H MOV DL,0DH INT 21H MOV DL,0AH INT 21H POP DX POP AX RET

newline ENDP

PUSH AX PUSH DX

MOV DX,OFFSET buffer2 MOV AH,09H INT 21H POP DX

57

POP AX

RET

dispave ENDP ;

ave PROC PUSH AX PUSH BX PUSH CX PUSH DX

MOV BX,OFFSET data MOV CX,10 MOV AX,0 CLC next:

ADD AL,[BX] DAA ADC AH,0 CLC INC BX LOOP next MOV CL,10H DIV CL

MOV BX,AX MOV AH,02H MOV CL,4

MOV DL,BL SHR DL,CL ADD DL,'0'

INT 21H POP DX POP CX

POP BX POP AX RET

ave ENDP ;

detail PROC

PUSH AX PUSH BX PUSH CX PUSH DX MOV CX,10

MOV SI,OFFSET data

start5: MOV BL,[SI]

.IF BL>=0&&BL<60H

58

INC below60

.ELSEIF BL>=60H&&BL<70H INC below70

.ELSEIF BL>=70H&&BL<80H INC below80

.ELSEIF BL>=80H&&BL<90H INC below90

.ELSEIF BL>=90H&&BL<=99H INC below100 .ENDIF

INC SI LOOP start5 POP DX POP CX POP BX POP AX RET

detail ENDP ;

dispscores PROC

PUSH AX PUSH DX

MOV DX,OFFSET buffer3 MOV AH,09H INT 21H

MOV AH,02H INT 21H POP DX MOV AL,DL INT 21H POP AX RET

dispscores ENDP .STARTUP

MOV DX,OFFSET buffer MOV AH,09H INT 21H

CALL newline CALL newline MOV DI,OFFSET data MOV CX,10 start: MOV DX,0

MOV AH,01H

INT 21H

59

SUB AL,'0' MOV BL,16 MUL BL MOV DL,AL MOV AH,01H INT 21H SUB AL,'0' ADD DL,AL MOV [DI],DL INC DI MOV DL,20H MOV AH,02H INT 21H LOOP start CALL newline CALL dispave CALL ave CALL newline CALL newline

MOV DX,OFFSET BUFFER1MOV AH,09H INT 21H CALL newline CALL detail MOV AL,'A' MOV DL,below100 CALL dispscores MOV AL,'B'

MOV DL,below90 CALL dispscores MOV AL,'C' MOV DL,below80 CALL dispscores

MOV AL,'D' MOV DL,below70 CALL dispscores MOV AL,'E' MOV DL,below60 CALL dispscores .EXIT END

60

习题七

7.1 什么是中断?中断有什么作用?

解:中断是指在计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的时间处理程序。待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。

利用中断,计算机可以较好的实现CPU与外部设备之间的同步工作,进行实时处理,可以大大提高CPU的工作效率。

7.2 8086/8088系统中,中断分为哪几类?

解:硬件中断(外部中断);软件中断(内部中断)。

硬件中断又可分为:非屏蔽中断、可屏蔽中断。

7.3 8086/8088CPU上中断请求和中断响应信号是什么? 解:INTA

7.4 中断标志IF的作用是什么?

解:IF中断标志位,IF=1表示允许CPU响应可屏蔽中断。 7.5 什么是中断向量? 中断向量表? 解:中断向量是中断服务程序的人口地址。

中断向量表是将各个中断服务程序的入口地址有次序地存放在内存一片连续区域中,所形成的地址表被称为中断向量表,也称为中断服务程序的入口地址表。 7.6 中断类型码为50H,则其对应的中断向量存放在哪几个存储单元? 解:500H

7.7 设78H号中断的中断向量为1000:2340H,写出该中断向量在内存中的具体存放情况。 解:

10H 00H 61

23H 40H 7.8 简述8259A的工作原理。

解:第一个负脉冲到达时,IRR的锁存功能失效,使当前中断服务寄存器ISR中的相应位置1,并使IRR寄存器中的相应位清零。

第二个负脉冲到达时,中断类型寄存器中的内容ICW2送到数据总线的D7~D0,CPU将此作为中断类型码

第二个脉冲结束时,将第一个脉冲到来时设置的当前中断服务寄存器ISR的相应位清零。 7.9 一片8259A可提供多少个中断类型码? 解:8个

7.10 8259A的设定中断优先级方式有几种?各有什么特点? 解:全嵌套方式:固定优先级,IR0最高,IR7最低。

特殊全嵌套:响应同级中断请求。

优先级自动循环:某级被响应后,降为最低。 优先级特殊循环方式:编程指定最低优先级。 7.11 8259A的中断结束方式有几种?各有什么特点?

解:(1)自动结束方式:8259A收到INTA#后自动把ISRn位清0。 (2)非自动结束方式:

(a)一般结束方式:8086发命令清除ISR中级最高的位,结束中断。 (b)特殊结束方式:将ISR中指定位清0。 7.12 8259A屏蔽中断源的方式有几种?各有什么特点?

解:(1)普通屏蔽方式:IMR某位置1,对应的中断被屏蔽;IMR某位置0,允许该级中断产生。

(2)特殊屏蔽方式:IMR某位置1,同时使ISR的对应位复位以屏蔽本级中断,开放较低级别中断。

7.13 8259A连接数据总线的方式有几种?各有什么特点?

解:缓冲方式:在多片8259A级联的大系统中,8259A通过总线驱动器与系统数据总线相连。

62

非缓冲方式:在只有单片8259A或片数不多8259A时,将8259A直接于数据总线相连。 7.14 8259A的中断请求触发方式有几种?各有什么特点?

解:边沿触发方式:上升沿作为中断请求信号,IR出现上升沿信号后,可一直保持高电平。 电平触发方式:高电平作为中断请求信号,但必须在EOI命令或CPU开放中断之前撤除高电平。 7.15 在8259A中,通过奇地址访问的寄存器有几个?通过偶地址访问的寄存器有几个? 解:(1)奇地址四个:ICW2、ICW3、ICW4、OCW1 (2)偶地址三个:ICW1、OCW2、OCW3

7.16 8259A初始化时设置为非中断自动结束方式,编写中断服务程序时应注意什么? 解:需要8086发命令清除ISR中级最高的位或其他指定的位,才可以产生中断。 7.17 8259A初始化的过程如何?

解:(1)顺序逻辑复位,准备按ICW2,ICW3,ICW4的顺序接收初始化字; (2)清除ISR和IMR;

(3)指定优先级次序为IR0、IR1„„; (4)从片的地址设置为7; (5)设定为普通屏蔽方式; (6)设置为非自动中断结束方式; (7)状态读出电路预置为IRR。

7.18 外设向CPU提出中断申请,但没有得到响应,其原因有哪些? 解:(1)中断请求被屏蔽

(2)中断不是开放的或者是允许的 (3)在现行指令的结束后才响应中断

7.19 编程对8259A初始化。设系统中有一片8259A,中断请求信号为边沿触发,中断类型码为58H~5FH,一般全嵌套方式,不用缓冲方式,中断自动结束。8259A的端口地址为20H、21H。 解:

PIC1 EQU 20H PIC2 EQU 21H ICW1 EQU 13H ICW2 EQU 58H

63

ICW4 EQU 3H OCW1 EQU 0FFH INIT PROC NEAR MOV AL,ICW1 OUT PIC1,AL MOV AL,ICW2 OUT PIC2,AL MOV AL,ICW4 OUT PIC2,AL MOV AL,OCW1 OUT PIC2,AL STI INIT ENDP

7.20 写操作命令字实现禁止8259A的IR0和IR7引脚的中断请求,然后撤消这一禁止命令。设8259A的端口地址为200H、202H。 解:MOV AL,110000001B

MOV DX,200H OUT DX,AL MOV AL,100000000B OUT DX,AL

习题八

8.1 什么是I/O端口?8086CPU最多可以访问多少个I/O端口?访问时用什么指令? 解:I/O接口是位于系统与外设间、用来协助完成数据传送和控制任务的逻辑电路,I/O接口中可以由CPU进行读或写的寄存器被称为I/O端口 。 64K个8位端口,或者32K个16位端口。 输入输出指令。

8.2 解释IN指令和OUT指令的数据流动方向。 解:IN指令:输入指令,数据从外部设备流向CPU;

64

OUT指令:输出指令,数据从CPU流向外部设备。 8.3 直接寻址I/O指令的I/O端口号存储在何处?

解:只用于寻址00H ~ FFH前256个端口,操作数i8表示端口号 8.4 间接寻址I/O指令的I/O端口号存储在何处?

解:可用于寻址全部64K个端口,DX寄存器的值就是端口号,对大于FFH的端口只能采用间接寻址方式

8.5 16位IN指令将数据输入到那个寄存器? 解:AX

8.6 通常I/O接口内有哪三类寄存器?它们各自的作用是什么?

解:用于存取数据的寄存器,存取命令信息的寄存器以及存取外设所处状态的寄存器,习惯上把这些寄存器称为端口: 1、数据端口;2、命令端口; 3、状态端口。

1数据端口:用于中转数据信息。一种情况是CPU通过数据总线,将待传送给外设的数据先传送到数据端口,然后由I/O设备通过与I/O接口电路相连接的数据线取得该数据。另一种情况是I/O设备首先将输入数据锁存于数据端口,然后,CPU通过数据端口将该数据读入CPU中。 2命令端口:用于传送对I/O设备的命令信息。CPU将命令信息通过数据总线写入I/O接口电路的命令寄存器中,然后传送到I/O设备,以便控制外设的操作。

3状态端口:用于传送外设所处的状态信息。状态端口是输入端口,CPU通过读取状态端口的数据,以此了解外设当前所处的工作状态。 8.7 为什么I/O设备必须通过接口才能与CPU相连?

解:因为CPU与外部设备通信在运行速度和数据格式上差异很大。 8.8 接口芯片具有哪些功能?

解:(1)设置数据的寄存、缓冲逻辑,以适应CPU与外设之间的速度差异,接口通常由一些寄存器或RAM芯片组成,如果芯片足够大还可以实现批量数据的传输; (2)能够进行信息格式的转换,例如串行和并行的转换;

(3)能够协调CPU和外设两者在信息的类型和电平的差异,如电平转换驱动器、数/模或模/数转换器等;

65

(4)协调时序差异;

(5)地址译码和设备选择功能;

(6)设置中断和DMA控制逻辑,以保证在中断和DMA允许的情况下产生中断和DMA请求信号,并在接受到中断和DMA应答之后完成中断处理和DMA传输。 8.9 接口芯片分为哪几类?

解:(1)并行接口,EPP口(增强并行口)和ECP口(扩展并行口)(2)串行接口 (3)磁盘接口,可分为IDE接口,EIDE接口和SCSI接口(4)USB接口(5)I/O扩展槽,可分为ISA插槽,EISA插槽,VESA插槽,PCI插槽

8.10比较存储器映像编址I/O与独立编址I/O的优缺点。 解:(1)统一编址

优点:不需要设立专门的I/O指令,用访问内存的指令就可以访问外设,指令类型多,功能齐全,还可以对端口进行算术运算,逻辑运算以及移位操作等。I/O端口空间不受限制。 缺点:是I/O端口占用了内存空间,减少了内存容量。 (2)独立编址

优点:不占用内存空间,使用专门I/O指令访问I/O端口,I/O速度快。

缺点:CPU的引脚上必须具有能区分出访问内存还是访问I/O端口的信号,作为I/O接口电路中端口译码电路以及存储器片选译码电路的输入信号。 8.11 8086系统中采用哪种I/O编址方式? 解:独立编址。

8.12 当G1输入为高电平, 和 均为低电平时,74LS138译码器的输出是什么? 解:此时译码器处于工作状态,输出的是与输入的二进制代码相对应的高、低电平信号。 8.13设计一个I/O端口译码器,使用一个74LS138,产生8位端口地址:10H、12H、 14H、

16H、18H、1AH、1CH、1EH。

解:

8.14 简述CPU与外设之间数据传送的几种方式。

66

解:外围设备和内存之间的常用数据传送控制方式有四种 :

(1)程序直接控制方式:就是由用户进程直接控制内存或CPU和外围设备之间的信息传送。这种方式控制者都是用户进程。

(2)中断控制方式:被用来控制外围设备和内存与CPU之间的数据传送。这种方式要求CPU与设备(或控制器)之间有相应的中断请求线,而且在设备控制器的控制状态寄存器的相应的中断允许位。

(3)DMA方式:又称直接存取方式。其基本思想是在外围设备和内存之间开辟直接的数据交换通道。

(4)通道方式:与DMA方式相类似,也是一种以内存为中心,实现设备和内存直接交换数据的控制方式。与之不同的是,在DMA方式中数据传送方向、存放数据内存始址以及传送的数据块长度等都是由CPU控制,而在通道方式中这些都是由专管输入输出的硬件——通道来进行控制。 8.15 CPU以并行通讯方式从外设输入信息。设状态端口地址为286H,数据端口地址为287H,已将数据读走标志为D0=1。请编写一个程序,利用查询方式实现100个字节数据的输入。输入的数据存放在数据段中以BLOCK开始的地址中(请在程序中加上相应的注释说明)。 解: .MOCEL SMALL .DATA

BLOCK DB 100 DUP(?)

.CODE .STARTUP MAIAN:

MOV BX,OFFSET BLOCK MOV SI,0

MAIN1:

MOV DX,0286H IN AL,DX

67

AND AL,02H JZ MAIN1 MOV DX,0287H IN AL,DX MOV [BX+SI],AL INC SI CMP SI,100 JNE MAIN1

.EXIT END

8.16 CPU以并行通讯方式向外设输出信息。设状态端口地址为216H,数据端口地址为217H。外设准备好标志为D7=1,D7=0为外设未准备好(忙)。输出数据选通信号为D0=1。请编写一个程序,利用查询方式实现50个字节数据的输出。输出的数据存放在数据段中以BUFFER开始的地址中(请在程序中加上相应的注释说明)。 .MOCEL SMALL .DATA

BLOCK DB 50 DUP(?)

.CODE .STARTUP MAIAN:

MOV BX,OFFSET BLOCK MOV SI,0

MAIN1:

MOV DX,0216H IN AL,DX AND AL,80H

68

JZ MAIN1 MOV DX,0217H MOV AL,[BX+SI] OUT DX,AL INC SI CMP SI,50 JNE MAIN1

.EXIT END

8.17 一个完整的中断过程包括那几个阶段?其中哪些步骤由系统自动完成?哪些环节由用 户完成?

解:一个完整的中断过程由中断请求、中断响应和中断处理3个阶段组成。 一次中断处理过程通常要经过如下几个步骤完成: 1中断请求:由中断源发出并送给CPU的控制信号。

2关中断:保证在此之后的一小段时间内CPU不能响应新的中断请求。

3保存断点,保护现场:用中断隐指令实现。断点和现场信息一般保存在堆栈中,保存信息一定要完整完成,以保证被停下来的程序得以继续正常运行。

4判别中断源,转中断服务:找出中断服务程序的入口地址。多个中断源时找出中断优先级最高的中断源。

5开中断,以便尽快地进入可以响应更高级别中断请求的运行状态。 6若有更高级别中断请求到来,则进行新的中断响应过程。 7执行中断服务程序,完成后准备返回主程序,为此,执行关中断。 8恢复现场,恢复断点。

9开中断。关中断和开中断是为了保证能完整的恢复现场的操作。开中断之后,若有更高级别中断请求来到,则进入新的中断响应过程。

69

10返回断点。

其中第3与第8步由系统自动完成,2,4,5,7,9,10步由用户完成。 8.18 中断方式与DMA方式相比有何不足?各用在什么场合? 解:中断方式传送数据的速度比DMA慢,不适于高速外设的要求。

中断方式主要应用于处理复杂随机事件、控制中低速1/O;DMA方式高速、批量数适用于据的简单传送。

8.19 某字符输出设备的数据端口地址是100H,控制/状态端口地址是101H,当状态端口D7位为1时表示设备准备好,用D0对输出设备选通。试编写查询方式输出数据的程序,将存储器中以BUF为首地址的一串字符(以$为结束符)输出给该设备。 解: .MOCEL SMALL .DATA

BUF DB \"I am a good student!$\"

.CODE .STARTUP MAIAN:

MOV BX,OFFSET BUF MOV SI,0

MAIN1:

MOV DX,0101H MOV AL,01H OUT DX,AL IN AL,DX AND AL,80H JZ MAIN1 MOV DX,0100H

70

MOV AL,[BX+SI] CMP AL,'$' JE MAIN3 OUT DX,AL INC SI JNE MAIN1

MAIN3: .EXIT END

8.20 简述DMA传送的过程。

解:一次DMA传送过程由传送前的预处理、数据传送、传送结束3个阶段组成。

预处理是由CPU完成的。当CPU执行到读写I/O设备调用语句时,启动DMA传送过程,向DAM卡送入设备识别信号、启动设备,测试设备运行状态,送入内存地址初值,传送数据个数,DMA的功能控制信号等,之后,CPU继续执行原来程序。

数据传送在DMA卡控制下自动完成。DMA卡向CPU发出请求总线使用权的信号,若总线空闲,总线控制器将送响应回答信号给DMA卡,DMA卡取得总线使用权,清“0”DMA请求触发器以撤消请求总线的信号,并启动数据传送过程。DMA在传送过程中还要完成对内存地址计数器和数据数量计数器的计数操作,并通过检查数据数量计数器是否为0,决定要启动下一次传送,还是结束本批全部数据的传送过程。

传送结束处理,是由数据数量计数器的值为0引发出来的。当数据数量计数器的值为0时,DMA将向CPU发出中断请求信号,CPU响应这一请求后,转入中断服务程序;检查是否结束数据传送。 8.21 8089IOP在微型计算机系统中的作用是什么?

解:8089是专门用于配合8086/8088进行I/O操作的芯片。它有自己的指令系统并且支持DMA传送,它与CPU并行工作,从而把CPU从大量的I/O操作中解放出来,使系统的整体效率大幅度提高。

8.22 一般从哪几个方面评价一种总线的性能?

71

解:⑴总线的带宽:指的是单位时间内总线上可传送的数据量。 ⑵总线的位宽总线的位宽指总线能同时传送的数据位数。

⑶总线的工作频率:工作频率越高,总线工作速度越快,总线带宽越宽。 8.23 简述SPP、EPP、ECP接口的用途与特点。

解:SPP,即Standard Parallel Port,标准并口。这是最初的并口模式,数据是半双工单向传输的.传输速率为15KB/S,速度较慢,现在几乎所有的并口外设都支持该模式。

EPP,即Enhanced Parallel Port,增强型高速并口。这是一种在SPP的基础上发展起来的新型并口模式,也是现在应用最多的并口模式,采用双向半双工数据传输,传输速度达2MB/S。目前市面上的大多数打印机、 扫描仪都能与PC进行双向通讯,都支持EPP模式。

ECP,即 Extended Capability Port,扩充功能并口。这可以算是目前最先进的并口模式,采用双向全双工数据传输,传输速率比EPP高,但是该模式需要设置DMA通道,既消耗资源,又容易引起冲突,目前支持ECP的外设很少。 8.24 简述RS-232C的电气特性。

解:在TxD和RxD上:逻辑1(MARK)=-3V~-15V 逻辑0(SPACE)=+3~+15V

在RTS、CTS、DSR、DTR和DCD等控制线上: 信号有效(接通,ON状态,正电压)=+3V~+15V 信号无效(断开,OFF状态,负电压)=-3V~-15V

8.25 用RS-232接口进行两台计算机之间的双向通信最少需要几根连线? 解:3根,发送端(TXD),接受端(RXD)和地(GND) 8.26 USB总线有什么优点?

解:USB总线具有低成本、使用简单、支持即插即用、易于扩展等优点,已被广泛地用在PC机及嵌入式系统上。

72

习题九

9.1 I/O接口的基本功能是什么? 解:(1)进行端口地址译码设备选择

(2)向CPU提供I/O设备的状态信息和进行命令译码

(3)进行定时和相应时序控制

(4)对传送数据提供缓冲,以消除计算机与外设在“定时”或数据处理速度上的差异,

提供有关电气的适配

(5)还可以中断方式实现CPU与外设之间信息的交换

9.2 I/O接口有几种基本类型?

解:(1)I/O接口芯片 (2)I/O接口控制卡 9.3 8255A有几个端口?

解:四个端口,三个数据端口和一个控制端口。 9.4 8255A有多少个可编程的I/O引脚? 解:32

9.5 8255A有哪三种工作方式?各有什么特点?

解:方式0:方式0为基本的输入/输出方式,传送数据时不需要联络信号。A口、B口和c口(或C高4位口及c低4位口)均可独立设置成方式0输入口或方式0输出口。

方式1:方式l为选通输入/输出方式,即需要进行联络的输入/输出。A组、B组的8

位口(A口或B口)可被设置为方式1输人口或方式1输出口,而这时要用相应C口的3根线作联络线。

方式2:方式2为双向传送。该方式要使用c口的5根线作联络线。由于c口只有8根线,

因此只能有一组使用方式2确定为A组。当A组被设置成方式2时,A口被设置成双向端口,即既可以输入数据,也可以输出数据,c口的5根线被指定为联络线。

9.6 当8255A工作在方式1时,端口C被分为两个部分,分别作为端口A和端口B的控制/状态信息。这两个部分是如何划分的?

73

解:A组、B组的8位口(A口或B口)可被设置为方式1输人口或方式1输出口,而这时要用相应C口的3根线作联络线。

9.7 8255A的方式选择控制字和按位置位/复位控制字都是写入控制端口的,那么,它们是由什么来区分的?

解:由控制字的最高位来区分。最高位若为1,则是方式选择控制字;若为0,则是按位置位/复位控制字。

9.8 8255A的端口A的工作方式是由方式选择控制字的哪一位决定的? 解:第5与第6位,决定端口A的工作方式。

9.9 8255A的端口B的工作方式是由方式选择控制字的哪一位决定的? 解:第3位

9.10 8255A接口芯片地址为60H~63H,请指出下列程序段功能 (1) MOV AL,80H (2) MOV AL,08H OUT 63H,AL

OUT 63H,AL

解:(1)设置8255A的端口A工作于方式0输出,端口B工作于方式0输出,端口C也是输出。

(2)置PC为0

9.11 设8255A的地址范围是100H~103H,试编写分别完成下列功能的初始化程序。

(1)A口工作于方式0、输入;B口工作于方式0、输出;PC7输入、PC0输出。 (2)A口工作于方式1、输出,PC7、PC6输入;B口工作于方式0、输入;PC2输入。

解:(1)MOV AL,98H MOV DX,103H OUT DX,AL (2)MOV AL,0ABH MOV DX,103H OUT DX,AL

74

9.12 8255A的地址由哪两部分构成?试利用74LS138译码器设计一个地址为260H~263H的8255A接口电路。

解:端口地址,控制口地址。

9.13 8255A的3个数据端口在使用上有什么不同?

解:端口A可以工作在3种工作方式的任一一种,而且A口作为输入或者输出时,数据均受到锁存,A口常作为独立的输入或输出端口;端口B有两种工作方式,当用作输出时,数据受到锁存,也是作为独立的输入或输出口;端口C通过控制令被分为2个4位端口,分别为A口和B口提供控制信号和状态信号。

9.14 当数据从8255A的端口C读到CPU时,8255A的控制信号 、 、A1、A0分别是什么电平? 、解: =0, =0, =1,A1A0=11.

9.15 使用8255A与打印机接口的示意图如图9-38所示。当A15~A2=10100011010101时,译码器输出为0。编写程序将存储单元BUF的内容送打印机打印。(BUSY为1表示打印机忙,PC7输出一个负脉冲启动打印。) 解: MOV DX,0A357H

MOV AL,10000001B OUT DX,AL MOV AL,00001111B OUT DX,AL

PRINTC PROC

PUSH AX PUSH DX

PRN: 图9-38

MOV DX,0A356H

IN AL,DX AND AL,04H JNZ PRN

75

MOV DX,0A354H MOV AL,AH OUT DX,AL NOP NOP

MOV AL,00001111B OUT DX,AL POP DX POP AX RET

PRINTC ENDP

9.16设某压力报警控制系统电路如图9-39所示。压力正常时,开关K0断开,绿灯亮,红灯灭。压力降低时,开关K0闭合,红灯亮,绿灯灭。试写出8255A的4个端口地址并编写初始化程序和控制程序。 图9-39

解:端口地址:7CH,7DH,7EH,7FH

76

MOV AL,10010000B OUT 7FH,AL IN AL,7CH AND AL,01H JZ LP1

LP0: MOV AL,0

OUT 7EH,AL MOV AL,00000101B OUT 7EH,AL JMP EXIT

LP1: MOV AL,1

OUT 7EH,AL MOV AL,00000100B OUT 7EH,AL

EXIT:

9.17 根据传输线路不同,串行通信可分为哪些方式?每种方式有什么特点? 解:分为单工,全双工和半双工。

单工中,信息只能单方向传送。

全双工中,对数据的两个传输方向采用不同的通路,这种系统可以同时进行发送和接收。 半双工中,输入和输出采用同一通路。

9.18 什么叫同步通信?什么叫异步通信?它们各有什么优缺点?

解:同步通信是按照软件识别同步字符来实现数据的发送和接收,异步通信是一种利用字符的再同步技术的通信方式。

同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。这里的信息帧与异步通信中的字符帧不同,通常含有若干个数据字符。它们均由同步字符、数据字符和校验字符

HLT

77

(CRC)组成。其中同步字符位于帧开头,用于确认数据字符的开始。数据字符在同步字符之后,个数没有限制,由所需 传输的数据块长度来决定;校验字符有1到2个,用于接收端对接收到的字符序列进行正确性的校验。同步通信的缺点是要求发送时钟和接收时钟保持严格的同步。 异步通信中,在异步通行中有两个比较重要的指标:字符帧格式和波特率。数据通常以字符或者字节为单位组成字符帧传送。字符帧由发送端逐帧发送,通过传输线被接收设备逐帧接收。发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。

接收端检测到传输线上发送过来的低电平逻辑\"0\"(即字符帧起始位)时,确定发送端已开始发送数据,每当接收端收到字符帧中的停止位时,就知道一帧字符已经发送完毕。

9.19 8086系统中,8251A的C/ 端应当和哪个信号相连,以便实现对状态端口、数据端口、控制端口的读/写? 解:与地址线的低位相连。

9.20 对8251A进行编程时,必须遵守哪些约定? 解:对8251A进行编程时,必须遵守的约定主要有3个:

(1)芯片复位以后,第一次使用奇地址端口写入的操作为模式字进入模式寄存器。 (2)如果模式字中规定了8251A工作的同步模式,那么,CPU接着往奇地址端口输入一个或两个字节就是同步字符,同步字符被写入同步寄存器。如果有两个同步字符,则会按先后分别写入第一个同步寄存器和第二个同步寄存器。

(3)这之后,只要不是复位命令,不管是同步模式还是异步模式,由CPU用奇地址端口写入的值将作为控制字送到控制寄存器,而用偶地址端口写入的将作为数据送到数据输出缓冲寄存器。

9.21 什么是波特率?若要产生一个波特率为2400的串行信号,且波特率因子编程为16,那么串口发送/接收时钟的频率是多少?

解:波特率是指单位时间内传送二进制数据的位数,以位/秒为单位。38400Hz

9.22 设计一个采用异步通信方式输出字符的程序段,规定波特率因子为64,7个数据位,1个停止位,偶校验,断口地址为40H、42H,待输出字符存放在2000H:4000H单元。

78

解:MOV AL,01111011B

OUT 42H,AL MOV AL,35H OUT 42H,AL MOV DI,0 MOV CX,2000

L0: IN AL,42H

;发送2000个字符 ;读取状态字

TEST AL,02H JZ L0 IN AL,40H

MOV DX,2000H MOV [DX+DI],AL INC DI IN AL,42H

;测试有无帧校验错

TEST AL,38H JZ ERR LOOP L0 JMP EXIT

ERR: CALL ERR-OUT EXIT:

...

;调出错处理

9.23 设8251A为异步工作方式,波特率因子为16,7位数据位,奇校验,2位停止位。8251A端口地址为2A1H、2A2H。编写程序从串口输出100个字符,设字符存放在BUF开始的缓冲区中。 解: MOV AL,0EAH

MOV DX,2A2H OUT DX,AL MOV AL,35H

79

OUT DX,AL MOV DI,0 MOV CX,100

BEG: IN AL,DX TEST AL,02H JZ BEG

MOV DX,2A1H IN AL,DX MOV DX,OFFSET BUF MOV [DX+DI],AL INC DI MOV DX,2A2H IN AL,DX TEST AL,38H JZ ERROR LOOP BEG JMP EXIT

ERROR:CALL ERR_OUT EXIT: ....

9.24 8251A工作于异步方式,波特率为1200bps,收/发时钟(RxC/TxC)频率为76.8KHz,异步字符格式为:7位数据位、偶校验、2位停止位。CPU从8251A读入80个字符,存入BUFFER开始的缓冲区,8251A的端口地址为80H、82H。试编写初始化和数据输入程序段。 解:波特率因子为64

MOV AL,11111011B OUT 82H,AL

80

MOV AL,35H OUT 82H,AL MOV DI,0 MOV CX,80

BEG: IN AL,82H

TEST AL,02H JZ BEG IN AL,80H

MOV DX,OFFSET BUFFER MOV [DX+DI],AL INC DI IN AL,82H TEST AL,38H JZ ERROR LOOP BEG JMP EXIT

ERROR:CALL ERR_OUT EXIT:

.......

9.25 8253的CLK、GATE、OUT信号的功能是什么?

解:CLK是计数器的时钟输入端;GATE是计数器的门控信号输入端;OUT是计数器的输出端 9.26 8253可编程的寄存器有哪几个?

解:4个计数器0、计数器1、计数器2、控制寄存器 9.27 8253的计数初值如何计算?计数范围是多少? 解:计数初值=定时时间/时钟脉冲周期=时钟频率/输出频率 选择二进制:

81

计数值范围:0000H~0FFFFH

0000H是最大值,代表65536

选择十进制(BCD码):

计数值范围:0000~9999 0000代表最大值10000

9.28 8253有哪几种工作方式?有什么区别? 解:6种工作方式。

方式0,计数结束产生中断。当门控信号为低电平时,计数停止;当门控信号为高电平时,进行计数。

方式1,可重复触发的单稳态触发器。门控信号为低电平或者高电平时,计数不受影响;门控信号为上升沿时,受触发开始计数,下一个时钟后,输出为低电平,直到计数为0.

方式2,分频器。门控信号为低电平时,计数停止,输出高电平;门控信号为高电平时,进行计数;门控信号为上升沿时,重新设置初始值,开始计数。

方式3,方波发生器。当门控信号为低电平时方式,计数停止,输出高电平;门控信号为高电平时,进行计数;门控信号为上升沿时,开始计数。

方式4,软件触发的选通信号发生器。门控信号为低电平时,计数停止;门控信号为高电平时,进行计数。

方式5,硬件触发的选通信号发生器。门控信号为低电平时,计数不受影响;门控信号为上升沿时,开始计数。

9.29 试按以下要求分别编写8253的初始化程序,已知8253的地址为400H~403H。 (1)使计数器1工作于方式0,用二进制计数,计数初值为128。 (2)使计数器0工作于方式4,按BCD码计数,计数值为3000。 (3)使计数器2工作于方式5,计数初值为03E8H。 解:(1)

MOV AL,50H

MOV DX,403H OUT DX,AL

82

MOV AL,128

MOV DX,401H OUT DX,AL

(2) MOV AL,39H

MOV DX,403H OUT DX,AL MOV AX,7000H MOV DX,400H OUT DX,AX

(3) MOV AL,0BAH

MOV DX,403H OUT DX,AL MOV AX,03E8H MOV DX,402H OUT DX,AX

9.30 为了计数300个事件,编程到8253中的计数初值是多少?

解:设置为工作方式2,计数初值为300,当计满300个事件,会产生一次中断信号。 9.31 编程8253的计数器1,使其产生一系列脉冲,高电平时间为100s,低电平时间为1s,

计算本任务需要的CLK频率。

解:假设以先读/写计数器低字节,后读/写高字节的方式,则

CLK=2^16/(100 s+ s)

9.32连接8253,使其工作在端口地址10H、12H、14H和16H。写一段程序,使计数器2在CLK2输入为2MHz时产生一个80KHz的方波。 解:常数计算TC=2MHz/80KHz=25 令其二进制计数,方式控制字:10010110 初始化程序: MOV AL,96H

83

OUT 16H,AL MOV AL,19H OUT 14H,AL

9.33 DMA的中英文全称分别是什么?

解:Direct Memory Access,译为“直接存储器存取”。 9.34 8237A作为主、从模块工作时各有什么特点?

解:作为从模块时,8237A接收16位地址,用较高的12位地址产生片选信号,据此判断本片是否被选中,用低4位地址来选择内部寄存器;用 和 作为读/写控制端,当 为 和HRQ为低电平,低电平时,CPU读取8237A内部寄存器的值,当 为低电平时,CPU将数据写入8237A。而且,当CPU对8237A进行读写时,AEN为低电平。

作为主模块时,8237A往总线上提供要访问的内存地址,地址的低字节放在A7-A0,而地址的高位字节放在DB7-DB0,此时,AEN为高电平。作为主模块,8237A还要输出必要的读写信号: -I/O读信号; -I/O写信号; 存储器读信号; 存储器写信号。 9.35 8237A作为从模块工作时占用多少个端口地址? 解:16

9.36 简述8237A单字节DMA传送的全过程。

解:8237A取得总线控制权以后进行单字节的DMA传送,传送完一个字节以后修改字节计数器和地址寄存器,然后就将总线控制权放弃.若I/O的DMA请求信号DREQ继续有效,8237A再次请求总线使用权进行下一字节的传送。 9.37 简述CPU对8237的初始化过程。

解:1.关闭8237A,以保证对8237A初始化编程结束后才响应DMA操作请求。 2.发送主清除命令,即用软件方法进行复位。 3.输出16位地址值给相应通道的地址寄存器。 4.设置传送的字节数给基字节计数器和当前字节计数器。 5.输出工作方式控制字,以确定8237A的工作方式和传输类型。 6.将屏蔽控制字写入屏蔽寄存器,去除屏蔽。

84

7.启动8237A,并将操作方式控制字写入控制寄存器,控制8237A工作。

8.启动DMA操作,可用软件方法将请求DMA操作控制字写入请求寄存器,或用硬件方法,等待DREQ引线端发出DMA操作申请。

习题十

10.1 A/D与D/A转换器在微机应用系统中有什么作用?

解:A/D转换器用于把被控对象的各种模拟信息变成计算机可以识别的数字信息。 D/A转换器的功能在于把对其输入的数字信号转换成与此数值成正比的模拟电压或电流。 10.2 简单叙述权电阻网络D/A转换器的基本工作原理。

解:权电阻DA网络,与二进制代码对应的每个输入位,各有一个模拟开关和一个权电阻。当某一位数字代码为“1”时,开关合上,将该位的权电阻接至基准源以产生相应的权电流。此权电流流入运算放 大器的求和点,转换成相应的模拟电压输出,当数字输入代码为“0”时,开关合上,没有电流流入求 和点。 当二进制位数为n时, 其中=0或1

10.3分析叙述T形电阻网络D/A转换器的基本工作原理。与权电阻网络D/A转换器相比,它有什么优点? 解:

模拟开关Si,由输入数码Di控制,当Di=1时Si接运算放大器反相端,电流Ii流入求和电路;当

Di=0时,Si则将电阻2R接地,流经2R电阻的电流与开关位置无关,为确定值。分析R-2R电阻

网络可以发现,从每个节点向左看的二端网络等效电阻均为R,流入每个2R电阻的电流从高位到

85

低位按2的整数倍递减。设基准电压源电压为VREF,则总电流为I=VREF/R,则流过各开关支路(从右到左)的电流分别为I/2、I/4、I/8和I/16。 于是可得到各支路的总电流 输出电压为:

将输入数字量扩展到n位,可得到n位倒T型电阻网络D/A转换器输出模拟量与输入数字量之间的关系式

权电阻网络D/A转换器的缺点:各个电阻阻值相处较大,尤其在输入信号的位数较多时,这个问题更加突出。要想在极为宽广的阻值范围内保证每个电阻都有很高的精度是十分困难的,尤其对制作集成电路更加不利。而用T型电阻网络来代替单一的权电阻支路,整个网络只需要R和2R两种电阻,容易实现。在集成电路中,由于所有的元件都做在同一芯片上,电阻的特性很一致,误差问题也能得到很好的解决。

10.4 D/A转换器的性能指标都有哪些?

解:分辨率、转换精度、偏移量误差、线性度、建立时间。 10.5 D/A转换器的分辨率是如何定义的?它与精度有什么关系?

解:分辨率是指输入数字量的最低有效位(LSB)发生变化时,所对应的输出模拟量(常为电压)的变化量。N位的D/A转换器的分辨率位2 。

转换精度描述满量程时DAC的世纪模拟输出值和理论值即接近程度。通常,DAC的转换精度为分辨率的一半。

10.6 实现D/A转换的方法还有那些? 解:权电流型,开关树型,权电容网络型。

10.7 DAC0832有什么特点?怎样用它实现双极性的输出? 解: 8位并行D/A转换;片内二级数据锁存,提供数据 输入双缓冲、单缓冲、直通三种工作方式; 电流输出型 芯片(需外接运放) ; DIP20封装,CMOS低功耗器件,单

86

电源(+5 V~+15 V,典型值+5 V)供电; 具有双缓冲控 制输出; 参考电压为-10~+10V;与MCS-51连接方便。

图10.7 双极型输出原理图

10.8 试设计一个利用DAC0832产生锯齿波和正弦波的电路,并编写相应的程序。 解:

锯齿波:

MOV DX,0FFF0H MOV AL,00H

L1:

OUT DX,AL INC AL JMP L1

正弦波:

MOV R1,#00H ;取表格初值 L01:

MOV A,R1

MOV DPTR,#SETTAB MOVC A,@A+DPTR MOV DPTR,#0FFF0H MOVX @DPTR,A INC R1 ;表格加一 AJMP L01 ;循环

SETTAB: DB 80H,83H,86H,89H,8DH,90H,93H,96H

DB 99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH...

87

10.9 试设计一个8088CPU与两片DAC0832的接口电路,并编写程序使其所输出的信号(x,y)在示波器上显示一个正六边形的六个顶点。 解: c b

MOV AL,80H

d a

OUT OOH,AL ;a点

CALL DELAY1

e f

MOV AL,0FFH

OUT 00H,AL MOV AL,00H ;b点 MOV DX,0E000H OUT DX,AL

;f点

CALL DELAY2 MOV AL,0FFH OUT 00H,AL ;c点 MOV AL,00H OUT DX,AL

;e点 CALL DELAY1

MOV AL,80H

OUT 00H,AL ;d点

88

JMP EXIT

DELAY1: MOV CX,0FFH

LOOP DELAY1 RET

DELAY2: MOV CX,1FEH

LOOP DELAY2 RET

EXIT:

.....

10.10 什么是量化?如何减少量化误差?

解:所谓量化,就是把经过抽样得到的瞬时值将其幅度离散,即用一组规定的电平,把瞬时抽样值用最接近的电平值来表示。提高分辨率可以减少量化误差。 10.11 A/D转换器的分辨率是如何定义的?它与精度有什么关系?

解:分辨率反映A/D转换器对输入微小变化响应的能力,通常用数字输出最低位(LSB)所对应的模拟输入的电平值表示。转换精度为分辨率的一半 10.12 A/D转换为什么要进行采样?采样频率根据什么确定?

解:因为被转换的模拟信号在时间上是连续的,瞬时值有无限多个,转换过程需要一定的时间,不可能把每一个瞬时值都一一转换成模拟量。因此对连续变化的模拟量要按一定的规律和周期取出其中的某一瞬时值,这个过程就是将模拟量离散化,称之为采样,采样以后用若干个离散的瞬时值来表示原来的模拟量。

通常为了使A/D输出信号经过D/A还原后能更好地反映输入模拟信号的变化,根据采样定理,采样频率一般要高于或至少等于输入信号中最高频率分量的2倍,就可以使被采样的信号能够代表原始的输入信号。在输入信号频率不是太高的实际应用中,一般取采样频率为最高频率的4~8倍。

89

10.13 简述逐次比较式A/D转换器的基本原理与特点。

解:逐次比较转换是一个对分搜索的过程:首先由start信号启动转换,逐次逼近寄存器将最高位置1,其余位均为0.此时D/A变换器的输出V为满量程的1/2。比较器将V与模拟输入信

号V相比较,若V小于V,则保持最高位为1,反之则为0。这样就能确定输入信号是否大于

满量程的1/2。现在假设V小于满量程的1/2,然后再将次高位置1,此时D/A变换器的输出为

1/4满量程,这样便可以根据比较器的输出判断V是否大于1/4满量程。如此递推,8位精度的

A/D转换只需要8次比较即可完成。比较完成后控制器输出转换结束信号EOC将逐次逼近寄存器的内容送入锁存器作为转换结果。

逐次比较A/D转换电路规模属于中等,制作相对容易,精度与转换速度均较高,功耗低,在低分辨率(<12位)时价格便宜,但高精度时(>12位)时价格很高,而且它是对瞬时值进行转换,所以对常态干扰抑制能力弱。

10.14简述积分式A/D转换器的基本原理与特点。

解:积分型AD模数转换原理是将输入电压转换成时间(脉冲宽度信号)或频率(脉冲频率),然后由定时器/计数器获得数字值。优点是用简单电路就能获得高分辨率,因为多数是利用平均值转换,所以对常态干扰的抑制能力强。但缺点是由于转换精度依赖于积分时间,因此转换速率较低。

以下是双积分式ADC的工作原理: 工作过程分为二段时间,和Δt。

第一段时间内,被转换的电压接到积分器的输入端,进过积分时间,积分器的输出端电压为: 结束后,与极性相反的基准电压接到积分器上,此时,积分器的输出电压开始复原,当积分

器输出电压回到起点(0V)时,积分过程结束。设这段时间为Δt,在内是恒定值,积分器的

输出为:

10.15 什么是A/D转换器与微处理器接口的时间配合问题?如何解决?

解:A/D转换器的转换速度往往与CPU的工作速度是不同的,当转换完成,ADC会输出信号通知CPU读取数据。CPU一般采用四种方式和ADC进行联络来实现对转换数据的读取。

90

1、程序查询方式。CPU不断查询ADC的结束信号,一旦发现有效,则认为ADC 转换完成,可用输入指令读取数据。

2、中断方式。将转换结束信号作为中断请求信号,送入中断控制器的中断请求输入端。 3、延时方式。要预先精确知道完成一次A/D转换所需的时间,这样,CPU发出启动命令后,执行一个固定的延时程序,次程序执行完后,A/D转换也正好结束,于是,CPU读取数据。 4、DMA方式。此方式适用于告诉A/D变换。A/D变换的速度超过CPU的控制速度后,CPU无法对ADC进行控制,而ADC的控制则由硬件逻辑电路来完成。而转换结束信号是一批A/D转换的数据在硬件逻辑的控制下,存入高速缓存器后,通知系统DMA控制器而发出的DMA请求信号,然后系统进入DMA期间,在高速缓存区与系统RAM间进行DMA数据传送。 10.16 A/D转换器还有那些类型?各有什么特点?

解:并行比较性/串并行型:采用多个比较器,仅作一次比较而实行转换,又称Flash(快速)型。由于转换速率极高,n位的转换需要2n-1个比较器,因此电路规模极大,价格也高,只适用于视频AD转换器等速度特别高的领域。

串并行比较型AD:结构上介于并行型和逐次比较型之间,最典型的是由2个n/2位的并行型AD转换器配合DA转换器组成,用两次比较实行转换,这类AD速度比逐次比较型高,电路规模比并行型小。

Σ-Δ型AD:由积分器、比较器、1位DA转换器和数字滤波器等组成。转换原理近似积分型,将输入电压转换成时间信号,用数字滤波器处理后得到数字值。电路的数字部分基本上容易单片化,因此容易做到高分辨率。主要用于音频和测量。

电容阵列逐次比较型AD:在内置DA转换器中采用电容矩阵方式,也可称为电荷再分配型。采用电容阵列可以用低廉成本制成高精度单片AD转换器。

压频变换型:通过间接转换方式实现模数转换。原理是首先将输入的模拟信号转换成频率,然后用计数器将频率转换成数字量。从理论上讲这种AD的分辨率几乎可以无限增加,只要采样的时间能够满足输出频率分辨率的累计脉冲个数的宽度。优点是分辨率高、功耗低、价格低,但是需要外部技术电路共同完成AD转换。

10.17 A/D转换器与CPU之间的连接在采用查询方式和中断方式下有何不同?

91

解:查询方式下,A/D的EOC脚不使用;中断方式下,EOC脚经过反相后与单片机的 (或者 )脚相连。

10.18设某8位A/D转换器的输入电压为0~+5V,求出当输入模拟量为下列值时数字输出的数值(设参考电压为5V):

(1)1.25V (2)2V (3)2.5V (4)3.75V (5)4V (6)5V 解:1)00111111

2)01100110 3)01111111 4)10111111 5)11001100 6)11111111

10.19 设某A/D转换电路如图10-22所示。(1)请根据硬件连接给出8255的端口地址。(2)编写实现轮流对8路输入进行A/D转换的程序,并将A/D转换结果依次存入RESULT开始的内存单元。 图10-22

解:8255的端口地址:6CH,6DH,6EH,6FH

MOV DX,6FH

;8255的控制口

MOV AL,10010001B ;A口和B口方式0,C口高四位输出,低四位输入 OUT DX,AL MOV SI,RESULT MOV CX,08H MOV BH,00H

LOP1:

OR BH,08H MOV AL,BH MOV DX,6EH OUT DX,AL AND BH,7FH MOV AL,BH OUT DX,AL

LOP2:

IN AL,DX

;产生START和ALE的下降沿

;读入端口C

;C口地址 ;存放数据首地址

;启动A/D转换

;PC7置0

TEST AL,04H

;测试PC2

92

JZ LOP2 MOV DX,6CH IN AL,DX

;为0,继续查询

;读入转换结果 ;存储数据

MOV [SI],AL INC SI INC BH LOOP LOP1 HLT

;8路未完,继续

10.20 如何利用图10-20给出的I/O接口电路连接更多的芯片?例如再连接2片ADC0809和2片DAC0832?或再连接1片8255?

解:参见图10-21,由EPP总线引出的地址信号还有三根未用完。可以用来扩展其它I/O接口芯片。

典型的扩展2片DAC0832和2片ADC0809的电路如下图所示:

93

习题十一

11.1 列出80X86系列CPU的主要参数,并根据各种CPU的地址/数据总线推算它的存储器寻址空间大小。

解:主频、字长、总线宽度、存储器容量。若CPU的地址总线是n位的,则存储器的寻址空间为2 Byte。

11.2 什么是虚拟存储技术?它有什么作用?

94

解:所谓虚拟存储,就是把多个存储介质模块(如硬盘、RAID)通过一定的手段集中管 理起来,所有的存储模块在一个存储池(Storage Pool)中得到统一管理,从主机和工作站的角度,看到就不是多个硬盘,而是一个分区或者卷,就好象是一个超大容量(如1T以上)的硬盘。这种可以将多 种、多个存储设备统一管理起来,为使用者提供大容量、高数据传输性能的存储系统,就称之为虚拟存储。

虚拟存储避免了由于存储设备扩充所带来的管理方面的麻烦;虚拟存储可以大大提高存储系统整体访问带宽;虚拟存储技术为存储资源管理提供了更好的灵活性,可以将不同类型的存储设备集中管理使用,保障了用户以往购买的存储设备的投资;虚拟存储技术解决了存储空间使用的浪费,突破了单个物理磁盘的容量限制,极大地提高了存储资源的利用率;虚拟存储可以给管理员以更大灵活性,修改基础设施而不影响系统或应用。

11.3 请分析采用虚拟存储管理所带来的利与弊?

解:虚拟存储管理采用分页和分段技术,优点是允许运行比内存容量大的程序。缺点是覆盖块必须手动设置,程序员负担繁重。

11.4 简述保护模式下逻辑地址转换为线性地址、线性地址转换为物理地址的过程。 解:逻辑地址由段选择子和段内偏移量构成,逻辑地址与线性地址的转换由两步骤完成: 1.寻找段描述符:系统的描述符表寄存器存有描述符表在主存中的基地址,段选择子给出了段描述符在对应描述符表中的位置(即索引),这两个值相加得到描述符的物理地址,从而找到该描述符。

2.计算线性地址:从描述符中取出该段的段基址,逻辑地址内含有段内偏移地址,二者相加,得到存储单元的32位线性地址。

32位线性地址包含三个字段:页目录索引(22-31位)、页表索引(12-21位)、页内偏移量(0-11位)

线性地址向物理地址的转换由三个步骤组成:

95

1.寻找页表:CR3控制寄存器保存着页目录的基地址,线性地址的高10位是该页在页目录中的索引值,二者相加,得到该页组的页表基地址。

2.寻找页基地址:线性地址的中间10位是页表索引,它和页表基地址相加,得到该页目录项的地址。该目录项包含了页的基地址,它是一个物理地址。

3.计算物理地址:线性地址的低12位是页内偏移量,它和物理页的基地址相加,得到所要访问存储单元的32位物理地址。

11.5 在32位微处理器中引入保护机制的目的是什么?有那些保护措施?

解:用来区别特权访问和无特权访问模式,或指令和数据提取等,以真正发挥它(486以上)的设计能力。高级别的程序可以访问同级或低级的数据段,反之则不行。

11. 6 试解释以下几个专门技术词汇:

超标量流水线技术;超长指令字技术;超级流水线技术;并行计算机结构。

解:将一条指令分成若干个周期处理以达到多条指令重叠处理,从而提高cpu部件利用率的技术叫做标量流水技术。 超级标量是指cpu内一般能有多条流水线,这些流水线能够并行处理.在单流水线结构中,指令虽然能够重叠执行,但仍然是顺序的,每个周期只能启动 (issue)或结束(retire)一条指令.超级标量结构的cpu支持指令级并行,每个周期可以启动多条指令(2-4条居多).这样,可以使得cpu 的IPC(Instruction Per Clock) > 1, 从而提高cpu处理速度。

超常指令字有点类似于超级标量,是一条指令来实现多个操作的并行执行,之所以放到一条指令是为了减少内存访问。通常一条指令多达上百位,有若干操作数,每条指令可以做不同的几种运算。那些指令可以并行执是由编译器来选择的。通常VLIW机只有一个控制器,每个周期启动一条长指令,长指令被分为几个字段,每个字段控制相应的部件。由于编译器需要考虑数据相关性,避免冲突,并且尽可能利用并行,完成指令调度,所以硬件结构较简单。

超级流水线又叫做深度流水线,它是提高cpu速度通常采取的一种技术。CPU处理指令是通过Clock来驱动的,每个clock完成一级流水线操作。每个 周期所做的操作越少,那么需要的

96

时间久越短,时间越短,频率就可以提得越高。所以超级流水线就是将cpu处理指令是得操作进一步细分,增加流水线级数来提 高频率。

并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算。并行计算系统既可以是专门设计的、含有多个处理器的超级计算 机,也可以是以某种方式互连的若干台独立计算机构成的集群。

11.7 简述流水线中的“相关”及其处理技术。

解:流水线技术是一种将每条指令分解为多步,并让各步操作重叠,从而实现几条指令并行处理的技术。程序中的指令仍是一条条顺序执行,但可以预先取若干条指令,并在当前指令尚未执行完时,提前启动后续指令的另一些操作步骤。

相关性分析:理论上n级流水线结构可以将微处理器的性能提高n倍,但是实际上指令之间的某种关联会阻止指令流中下一条指令的执行,造成流水线等待、停顿或被破坏。

相关种类:资源相关:有多条指令进入流水线后在同一机器周期内争用同一功能部件所发生的冲突。例如两条指令同时访问一个寄存器。

数据相关:有i 和j两条指令,i指令在前,j指令在后,则三种不同类型的数据相关的含义为:

RAW读写(先写后读)‏

i: R1+R2->R3 j: R3*R4->R5 WAR写读(先读后写)

i: R3*R4->R5 j: R1+R2->R3 WAW写写(先写后写)‏

i: R1*R2->R3 j: R4+R5->R3

控制相关:因程序的执行方向可能改变而引起的相关。例如由于跳转造成的一些问题。

97

指令调度:为了使指令执行的效率达到最优,对指令执行的顺序进行调整。 调度种类:局部调度:基本块内;全局调度:跨越基本块

全局调度:跨越基本块

调度方式:静态调度:先将源程序编译生成中间代码,进行调度,然后再执行。

动态调度:在执行过程中进行调度。

调度所需的程序信息:基本块划分,不包含分支或分支目标指令的一段代码。数据流图-基本块内数据的产生和使用情况。优先图-指令执行优先权的限制。关键路径-这个路径的执行时间决定了整个序列的最小执行时间.资源保留表-记录资源的使用情况,并利用资源保留表检测资源冲突。 调度方法:

消除相关(数据):消除存储器地址歧义(有两次访问指向同一地址,且至少一个是存储操作),软件寄存器重命名,规约变量扩展。

软件“猜测法”:预先估计每一个分支跳转的概率,并据此确定成功和不成功分支。 硬件“猜测法”:用硬件指令分析器检测到转移指令时,按猜测的方向预取指令。 两个缓冲栈:将转移成功方向指令预取到目标缓冲栈中,原先的指令缓冲栈仍然按照转移不成功的方向继续预取。

11.8 什么是MMX指令?它有那些特点?

解:MMX是\"多媒体扩展指令集\"的缩写。它是Intel公司为增强 Pentium CPU 在音像、图形和通信应用方面而采取的新技术。这一技术为CPU增加了全新的57条MMX指令,还将CPU芯片内的L1缓存由原来的16KB增加到 32KB(16K指命+16K数据),因此MMX CPU比普通CPU在运行含有MMX指令的程序时,处理多媒体的能力上提高了60%左右。即使不使用MMX指令的程序,也能获得 15% 左右的性能提升。MMX 是MultiMedia eXtensions(多媒体扩展)的缩写,是第六代CPU芯片的重要特点。MMX技术是在CPU中加入了特地为视频信号(Video Signal),音频信号(Audio Signal)以及图像处理(Graphical Manipulation)而设计的57条指令,因此,MMX CPU极大地提高了电脑的多媒体(如立体声、视频、三维动画等)处理功能。

98

11.9 MMX指令有几种数据类型?它们的格式是怎样的?

解:MMX技术可处理的数据基本单位是字节(byte)、字(word),或者是双字(double-word)和4字。 字节: 字:

63

0 双字:

63

0 4字:

11.10 试解释以下几个专门技术词汇:SSE,SSE2,SISD,SIMD,MIMD。

解:SSE: (Streaming SIMD Extensions)“数据流单指令多数据扩展” 。流式SIMD扩展,是Intel对MMX的一个改进。SSE包括了70条用于图形图象和声音成立的指令,除了比MMX增加了23 条指令外,SSE指令也允许浮点运算,使用一个分开的单元,而不是MMX使用的标准浮点单元。

SSE2是SSE的扩展指令集,包含了以前所有的MMX和SSE指令,共有144条SIMD指令。 SISD(单指令流单数据流):传统的计算机只有一块CPU,因此准许一条指令流顺序执行。 SIMD是单指令多数据流(Single Instruction Multiple Data)技术,采用此技术使CPU能够用一个命令处理多个操作数。 多指令流多数据流

11.11 什么是芯片组?采用芯片组技术有什么优点?

63 0 31 15 63 7 0 99

解:芯片组(Chipset)是主板的核心组成部分,如果说中央处理器(CPU)是整个电脑系统的心脏,那么芯片组将是整个身体的躯干。对于主板而言,芯片组几乎决定了这块主板的功能,进而影响到整个电脑系 统性能的发挥,芯片组是主板的灵魂。芯片组性能的优劣,决定了主板性能的好坏与级别的高低。这是因为目前CPU的型号与种类繁多、功能特点不一,如果芯片组不能与CPU良好地协同工作,将严重地影响计算机的整体性能甚至不能正常工作。

11.12 跟踪了解目前最新的微处理器技术发展情况,预测未来几年的发展方向。

解:目前的一个新趋势就是所谓的“双核”技术。简单说就是在一个芯片上有两个微处理器,从而可以提高整体的性能。今后还有可能发展到“多核”。

100

因篇幅问题不能全部显示,请点此查看更多更全内容