2023年12月2日发(作者:)

《微机原理及应用》各章习题参考答案

第1章 微型计算机概论

一、填空题

1. 微机硬件系统主要由CPU、(存储器 )、( 总线 )、( 输入输出接口 )和输入输出设备组成。

2. 冯·诺依曼计算机的核心原理是( 存储程序原理 )

3. 完成下列数制的转换

1)10100110B=( 166 )D=( A6H )H

2)223.25 =( 11011111.01 )B=( DF.4 )H

3)1011011.101B=( 5B.A )H=(1001 0001.01100010 0101 )BCD

4. 已知[X]补=86H,则X的十进制表示形式为( -122 )

5. 已知A=10101111,B=01010000,则A∧B的结果为( 00000000 ) B

6. -29H的8位二进制反码是(11010110 )B

7.字符4的ASCII码=( 34 )H

二、简答题

1.冯.诺依曼计算机的结构是怎样的,主要特点有哪些?

解:将计算机设计为由运算器、控制器、存储器、输入设备和输出设备等5个部分组成,所有的执行都以运算器为核心,采用存储程序工作原理。

2. 已知X=-1101001B,Y=-1010110B,用补码方法求X-Y=?

解:[X-Y]补=[X+(-Y)]补= [X]补+[-Y]补

[X]原=11101001B [X]补=10010111B

[-Y]原=01010110B=[-Y]补

[X-Y]补= [X]补+[-Y]补=11101101B

X-Y=[[X-Y]补]补=10010011=-0010011=-19

3. 写出下列真值对应的原码和补码的形式:

1)X=-1110011B

2)X=-71 3)X=+1001001B

解:1)[X]原码=11110011B , [X]补码=10001101B

2)[X]原码=11000111B, [X]补码=10111001B

3)[X]原码=01001001, [X] 补码=01001001B

4. 已知X和Y的真值,求[X+Y]补=?

1)X=-1110111B Y=+1011010B

2)X=56 Y=-21

5. 若与门的输入端A、B、C的状态分别为1、0、1,则该与门的输出端状态为?若将这3位信号连接到或门,那么或门的输出又是什么状态?

解:由与和或的逻辑关系知,若“与”门的输入端有一位为“0”,则输出为“0”;若“或”门的输入端有一位为“1”,则输出为“1”。

所以,当输入端A、B、C的状态分别为1、0、1时,与门输出端的状态为“0”;而或门的输出为“1”

6. 要使与非门输出“0”,则与非门输入端各位的状态应该是?如果使与非门输出“1”,其输入端各位的状态又是什么?

解:要使与非门输出“0”,则与非门输入端各位的状态应全部是“1”;若使与非门输出“1”,其输入端任意一位为“0”即可。

7. 对比说明定点数和浮点数的优势和不足。

解:定点数据表示的优点是硬件结构简单,主要缺点是:编程困难,表数范围小,存储器利用率低(详见教材1.3.1)。而浮点数则解决了这些不足。

第2章 微处理器及其体系结构

一、填空题

1. 某微处理器的地址总线宽度为36位,则它能直接访问的物理地址空间为(64GB)。

2. 在8088/8086系统中,一个逻辑分段最大为(64K)字节。

3. 在80x86实地址方式下,若已知DS=8200H,则当前数据段的最小地址是(82000)H,最大地址是(91FFF)H。 4. 已知存储单元的逻辑地址为1FB0H:1200H,其对应的物理地址是( 20D00 )H。

5.若CS=8000H,则当前代码段可寻址的存储空间的范围是(80000H~8FFFFH)。

6.在8088/8086系统中,一个基本的总线周期包含( 4 )个时钟周期。

二、简答题

1.什么是多核技术?多核和多处理器的主要区别是什么?

解:多核处理器是指在单枚处理器芯片上集成两个或多个完整的计算引擎(内核),而多处理器是指多枚处理器芯片。

在多核处理器中,操作系统将芯片上的每个执行内核作为分立的逻辑处理器,通过在每个执行内核间进行任务划分,以达到在特定时钟周期内执行更多任务的目的。

在单核处理器系统中,每个CPU都需要有较为独立的电路支持,它们之间的通信需要通过总线进行。对多核处理器系统,多核之间通过芯片内部总线进行通信,共享内存,且只需要一套控制电路支持。

多核技术的开发源于单核芯片在高速执行中会产生过多热量且无法带来性能上相应的改善。

2.说明8088CPU中EU和BIU的主要功能。在执行指令时,EU能直接访问存储器吗?

解:执行单元EU的主要功能是:执行指令,分析指令,暂存中间运算结果并保留结果的特征。总线接口单元BIU的主要功能是:负责CPU与存储器、I/O接口之间的信息传送。

在执行指令时,BIU负责访问存储器,而EU不能直接访问存储器。

3.总线周期中,何时需要插入Tw等待周期?插入Tw周期的个数,取决于什么因素?

解:在每个总线周期T3的开始处若READY为低电平,则CPU在T3后插入一个等待周期TW。在TW的开始时刻,CPU还要检查READY状态,若仍为低电平,则再插入一个Tw。此

过程一直进行到某个Tw开始时,READY已经变为高电平,这时下一个时钟周期才转入T4。可以看出,插入Tw周期的个数取决于READY电平维持的时间。

4.若已知物理地址,其逻辑地址唯一吗?

解:已知逻辑地址,可以得到唯一的物理地址;但若已知物理地址,其逻辑地址不唯一。

5.8088/8086 CPU在最小模式下的系统构成至少应包括哪些基本部分(器件)?

解:至少应包括:8088CPU、8284时钟发生器、8282锁存器(3片)和8286双向总线驱动器。

6.什么是实地址模式?什么是保护模式?它们的特点是什么?

解:实地址模式是与8088/8086兼容的存储管理模式。当80386加电或复位后,就进入实地址工作模式。物理地址形成与8088/8086—样,是将段寄存器内容左移4位与有效偏移地址相加而得到,寻址空间为1MB。

保护地址模式又称为虚拟地址存储管理方式。在保护模式下,80386提供了存储管理和硬件辅助的保护机构,还增加了支持多任务操作系统的特别优化的指令。保护模式采用多级地址映射的方法,把逻辑地址映射到物理存储空间中。这个逻辑地址空间也称为虚拟地址空间,80386的逻辑地址空间提供246的寻址能力。物理存储空间由内存和外存构成,它们在80386保护地址模式和操作系统的支持下为用户提供了均匀一致的物理存储能力。在保护模式下,用段寄存器的内容作为选择符(段描述符表的索引),选择符的高13位为偏移量,CPU的GDTR中的内容作为基地址,从段描述符表中取出相应的段描述符(包括32位段基地址、段界限和访问权等)。该描述符被存入描述符寄存器中。描述符中的段基地址(32位)与指令给出的32位偏移地址相加得到线性地址,再通过分页机构进行变换,最后得到物理地址。

7.80386访问存储器有哪两种方式?各提供多大的地址空间?

解:实模式和保护模式。实模式可提供1MB(220)的寻址空间。保护模式可提供4GB(232)的线性地址空间和64TB(246)的虚拟存储器地址空间。

8.如果GDT寄存器值为FFH,装入LDTR的选择符为0040H,试问装入缓存LDT描述符的起始地址是多少?

解:根据(GDTR)= FFH,得到全局描述符表的基地址为00130000H;再根据LDTR选择符内容为0040H(0000 0000 0100 0000B),得到索引值为0 0000 0000

1000B,即0008H。因为每个描述符为8个字节,故所装入的描述符在GDT中的偏移地址为(0008H-1)*8=0038H。所以装入缓存的LDT描述符的起始地址为00130038H。

9.页转换产生的线性地址的三部分各是什么?

解:页目录索引、页表索引和页内偏移。

10.选择符022416H装入了数据段寄存器,该值指向局部描述符表中从地址00100220H开始的段描述符。如果该描述符的内容如下,段基址和段界限各为多少?

(00100220H)=10H,(00100221H)=22H

(00100222H)=00H,(00100223H)=10H (00100224H)=1CH,(00100225H)=80H

(00100226H)=01H,(00100227H)=01H

解:把题目给出的内容按描述符格式写为如下:

310001 00000000 00000000 00010010 00101000 00100001 00000001 1100032根据段描述符的构成可知,段基地址为0000 0001 0001 1100 0001 0000 0000 0000B(见上图中斜粗体字部分),写成16进制数为011C1000H。段界限为0001 0010 0010 0001

0000B(见上图中正常字体部分),写成16进制数为12210H。

11.试对比描述8088、80386和Pentium4微处理器的主要特点。

解:详见教材第2章。

第3章 指令系统

一、填空题

1.若8088/8086CPU各寄存器的内容为:AX=0000H,BX=0127H,SP=FFC0H,BP=FFBEH,

SS=18A2H。现执行以下3条指令:

① PUSH BX

② MOV AX,[BP]

③PUSH AX

在执行完第①条指令后,SP=(FFBEH)。若再继续执行完指令③,则AX=(0127H),BX=(0127H),SP=(FFBCH)。

2.从中断服务子程序返回时应使用(IRET)指令。

3. 要将AL寄存器的最高位(bit7)置为1,同时保持其他位不变,应使用( OR)指令。

4.数据段中28A0H单元的符号地址为VAR,若该单元中内容为8C00H,则执行指令:

LEA AX,VAR后,AX的内容为( 28A0H)。 5.下列程序执行后,BX中的内容为( C02DH)。

MOV CL,3

MOV BX,0B7H

ROL BX,1

ROR BX,CL。

二、简答题

1. 8088/8086CPU共有几种寻址方式?请简述各种寻址方式的特点。

解:8088/8086CPU有8种寻找方式,分别是:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、寄存器相对寻址、基址--变址寻址、基址--变址--相对寻址以及隐含寻址。

各寻找方式的特点详见教材3.2节

2.设DS=6000H,ES=2000H,SS=1500H,SI=00A0H,BX=0800H,BP=1200H。请分别指出下列各条指令源操作数的寻址方式,并计算除立即寻址外的其他寻址方式下源操作数的物理地址。

(1)MOV AX,BX

(2)MOV AX,4[BX][SI]

(3)MOV AL,’B’

(4)MOV DI,ES:[BX]

(5)MOV DX,[BP]

解:

(1)寄存器寻址。因源操作数是寄存器,故寄存器BX就是操作数的地址。

(2)基址--变址--相对寻址。源操作数的物理地址为:

DS×16+SI+BX+4=60000H+00AOH+0800H+0050H=608F0H

(3)立即寻址。

(4)寄存器间接寻址。源操作数的物理地址为:

ES×16+BX =20000H+0800H=20800H

(5)寄存器间接寻址。源操作数的物理地址为:

SS×16+BP =15000H+1200H=16200H

3.设DS=202AH,CS=6200H,IP=1000H,BX=1200H,位移量DATA=2,内存数据段区BX所指向各单元内容如图3-34所示。试确定下列转移指令的转移地址。 (1) JMP BX

(2) JMP WORD PTR[BX]

(3) JMP DWORD PTR[BX+DATA]

解:

内存……BX11H22H33H44H55H66H77H……(1)段内间接转移。转移目标的物理地址为:

CS×16+BX = 62000H+1200H = 63200H

(2)段内间接转移。转移目标的物理:

CS×16+[BX]= 62000H+2211H=64200H

(3)段间间接转移。转移目标为BX+2所指向的4个字节单元内容,即转移目标的段基地址为6655H,其偏移地址为4433H。故转移目标的物理地址为:

6655H×16+4433H=6A983H

图3-34 题二__3图

4.试说明指令MOV BX,5[BX]与指令LEA BX,5[BX]的区别。

解:前者是数据传送类指令,表示将数据段中以(BX+5)为偏移地址的16位数据送寄存器BX。后者是取偏移地址指令,执行的结果是BX=BX+5,即操作数的偏移地址为BX+5。

5.判断下列指令是否正确,若有错误,请指出并改正之:

(1)MOV AH,CX (2)MOV 33H,AL

(3)MOV AX,[SI][DI] (4)MOV [BX],[SI]

(5)SUB BYTE PTR[BP],256 (6)MOV DATA[SI],ES:AX

(7)JMP BYTE PTR[BX] (8)OUT 230H,AX

(9)MOV DS,BP (10)MUL 39H

解:(1)指令错。两操作数字长不相等;

(2)指令错。MOV指令不允许目标操作数为立即数;

(3)指令错。在间接寻址中不允许两个间址寄存器同时为变址寄存器;

(4)指令错。MOV指令不允许两个操作数同时为存储器操作数;

(5)指令错。SUB指令要求两操作数等字长;

(6)指令错。源操作数形式错,段重设仅针对存储器操作数,寄存器操作数不存在“段”,所以也就不可能加段重设符;

(7)指令错。转移地址的字长至少应是16位的;

(8)指令错。对输入输出指令,当端口地址超出8位二进制数的表达范围时,必须采用间接寻址; (9)指令正确;

(10)指令错。MUL指令不允许操作数为立即数。

6.试比较无条件转移指令、条件转移指令、调用指令和中断指令有什么异同?

解:无条件转移指令的操作是无条件地使程序转移到指定的目标地址,并从该地址开始执行新的程序段,其转移的目标地址既可以是在当前逻辑段,也可以是在不同的逻辑段。

条件转移指令是在满足一定条件下使程序转移到指定的目标地址,其转移范围很小,只能当前逻辑段的-128~+127地址范围内。

调用指令是用于调用程序中常用到的功能子程序,是在程序设计中就设计好的。根据所调用过程入口地址的位置可将调用指令分为段内调用(入口地址在当前逻辑段内)和段间调用。在执行调用指令后,CPU要保护断点。对段内调用是将其下一条指令的偏移地址压入堆栈,对段间调用则要保护其下一条指令的偏移地址和段基地址,然后将子程序入口地址赋给IP(或CS和IP)。

中断指令是因一些突发而事件使CPU暂时中止它正在运行的程序,转去执行一组专门的中断服务程序,并在执行完后返回原被中止处继续执行原程序,它是随机的。在响应中断后CPU不仅要保护断点(即INT指令下一条指令的段地址和偏移地址),还要将标志寄存器FLAGS压入堆栈保存。

7. 说明以下程序段的功能:

STD

LEA DI,[1200H]

MOV CX,0F00H

XOR AX,AX

REP STOSW

解:从附加段偏移地址为1200H单元开始,按减地址方向(即1200H为操作的最高地址),将0F00H个单元清0。

8. 试描述x86 CPU主要新增了哪些类型指令?

解:从80386起,x86处理器的32位系统增加了虚地址模式下的寻址方式,其指令集主要增加了对32位数的操作。在功能上除了对原有指令的增强之外,还新增了如双精度移位操作、高级语言类等指令。详见教材3.4节。

三、编程题

1.按下列要求写出相应的指令或程序段: (1) 写出两条使AX内容为0的指令;

(2) 使BL寄存器中的高4位和低4位互换;

(3) 屏蔽CX寄存器的b11、b7和b3位;

(4) 测试DX中的b0和b8位是否为1。

解:(1)MOV AX,0

XOR AX,AX

(2)MOV CL,4

ROL BL,CL

(3)AND CX,0F777H

(4)AND DX,0101H

CMP DX,0101H

JZ ONE

2.编写程序,实现将+46和-38分别乘以2。

解:因为对二进制数,每左移一位相当于乘以2,右移一位相当于除以2。所以,将+46和-38分别乘以2,可分别用逻辑左移指令(SHL)和算术左移指令(SAL)完成。SHL指令针对无符号数,SAL指令针对有符号数。

当然,也可以分别用无符号数乘法指令MUL和有符号数乘法指令IMUL完成。

如果是除以2,则进行相反操作,即用逻辑右移指令SHR或无符号数除法指令DIV实现+46除以2的运算,用算术右移指令SAR或有符号数除法指令IDIV实现-38除以2的运算。

3.试编写程序,统计BUFFER为起始地址的连续200个单元中0的个数。

解:将BUFFER为首地址的200个单元的数依次与0进行比较,若相等则表示该单元数为0,统计数加1;否则再取下一个数比较,直到200个单元数全部比较完毕为止。程序如下:

LEA SI,BUFFER

MOV CX,200

XOR BX,BX

;存放统计数寄存器清0

AGAIN: MOV AL,[SI]

;取一个数

CMP AL,0

;与0比较

JNE GOON

;不为0则准备取下一个数

INC BX

;为0则统计数加1

GOON:INC SI

;修改地址指针

LOOP AGAIN

;若未比较完则继续比较 HLT

4.写出完成下述功能的程序段:

(1) 从地址DS:1200H中传送一个数据56H到AL寄存器;

(2) 将AL中的内容左移两位;

(3) AL的内容与字节单元DS:1201H中的内容相乘;

(4) 乘积存入字单元DS:1202H中。

解:

(1) MOV DS:BYTE PTR[0012H],56H

MOV AL,[0012H]

(2)MOV CL,2

SHL AL,CL

(3)MUL DS:BYTE PTR[1201H]

(4)MOV DS:[1202H],AX

5.设内存数据段中M1为首地址的字节单元中存放有3个无符号字节数,试编写程序,求这3个数之和及3个数的乘积,并将结果分别存放在M2和M3单元中。

解:

LEA SI,M2

LEA DI,M3

MOV AL,M1

MOV BL,AL

ADD BL,M1+1

ADC BL,M1+2

MOV [SI],BL

MUL BYTE PTR M1+1

XOR CX,CX

MOV CL,M1+2

MUL CX

MOV [DI],AX

MOV [DI+2],DX

6. 编写程序,利用串操作指令,实现按减地址方向将数据段1000H~1010H区域的数据传送到附加段2000H开始的区域中。

解:

MOV SI,1010H

MOV DI,2010H MOV CX,11H

STD

REP MOVSB

HLT

第4章 汇编语言程序设计

一、填空题

1.将汇编语言源程序转换为机器代码的过程叫作( 汇编 ),而要使其能够在计算机上运行还需要通过( 链接 )以生成可执行文件。

2. 执行下列指令后,AX寄存器中的内容是( 1E00H )

TABLE DW 10,20,30,40,50

ENTRY DW 3

MOV BX,OFFSET TABLE

ADD BX,ENTRY

MOV AX,[BX]

3. 已知:

ALPHA EQU 100

BETA EQU 25

则:表达式ALPHA×100+BETA的值=( 10025 )。

4. 执行如下指令后,AX=( 400 )H,BX=(26 )H

DSEG SEGMENT

ORG 100H

ARY DW 3,4,5,6

CNT EQU 33

DB 1,2,CNT+5,3

DSEG ENDS

MOV AX,ARY+2

MOV BX,ARY+10

二、简答题

1.假设程序的数据段定义如下

DSEG SEGMENT

DATA1 DB 10H,20H,30H

DATA2 DW 10 DUP(?) STRING DB ‘123’

DSEG ENDS

写出各指令语句独立执行后的结果:

(1)MOV AL,DATA1

(2)MOV BX,OFFSET DATA2

(3)LEA SI,STRING

ADD DI,SI

解:(1)取变量DATA1的值。指令执行后,AL=10H;

(2)变量DATA2的偏移地址。指令执行后,BX=0003H;

(3)指令执行后,SI=0017H;BX=0003H+0017H=001AH。

2. 写出汇编语言程序的框架结构。要求包括数据段、代码段和堆栈段。

解:以下为各逻辑段的定义示例:

DSEG SEGMENT

BUFF1 DB 100 DUP(?)

;定义变量存储区

DSEG ENDS

SSEG SEGMENT STACK ‘STACK’

;定义堆栈段

BUFF2 DW 100 DUP(?)

SSEG ENDS

CSEG SEGMENT

ASSUME CS:CSEG,DS:DSEG,ES:DSEG,SS:SSEG

START:MOV AX,DSEG

MOV DS,AX

MOV ES,AX

;使数据段与附加段重合

MOV AX,SSEG

MOV SS,AX

……

CSEG ENDS

END START

3. 简述指令性语句与指示性语句的区别。

解:指令性语句是指令助记符构成的语句,主要特点是CPU可执行;指示性语句是由伪指令助记符构成的语句,主要用于为汇编程序指示需要的存储空间、逻辑段的起始和终止等。指示性语句不能被CPU执行。

4.假设数据段中定义了如下两个变量DATA1和DATA2,画图说明下列语句分配的存储空间及初始化的数据值。

DATA1 DB ’BYTE’,12,12H,2 DUP(0,?,3)

DATA2 DW 4 DUP(0,1,2),?,-5,256H

解:存储空间分配情况如下图所示: (1)

DATA1

42H

‘B’

59H

‘Y’

54H

‘T’

45H

‘E’

0CH

12H

00H

54H

随机数 03H

00H

随机数 03H

(2)

DATA2

00H

00H

01H

00H

02H

00H

00H

00H

01H

00H

02H

00H

00H

00H

01H

00H

02H

00H

00H

00H

01H

00H

02H

00H

FBH

FFH

56H

02H

-5

5. 图示以下数据段在存储器中的存放形式:

DATA SEGMENT

DATA1 DB 10H,34H,07H,09H

DATA2 DW 2 DUP(42H)

DATA3 DB ‘HELLO!’

DATA4 EQU 12

DATA5 DD 0ABCDH

DATA ENDS

解:数据段定义如下图所示

6.阅读下面的程序段,试说明它实现的功能是什么?

DATA5

DATA3

DATA2

DATA1

10H

34H

07H

09H

42H

00H

42H

00H

48H

45H

4CH

4CH

4FH

21H

0CDH

0ABH

00H

00H

H

E

L

L

O

DATA SEGMENT

DATA1 DB ‘ABCDEFG’

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

AAAA:MOV AX,DATA

MOV DS,AX

MOV BX,OFFSET DATA1 MOV CX,7

NEXT:MOV AH,2

MOV AL,[BX]

XCHG AL,DL

INC BX

INT 21H

LOOP NEXT

MOV AH,4CH

INT 21H

CODE ENDS

END AAAA

解:该程序段功能:将字符ABCDEFG依次输出到屏幕上。

三、编程题

1.试编写求两个无符号双字长数之和的程序。两数分别在MEM1和MEM2单元中,和放在SUM单元。

参考答案:

DSEG SEGMENT

MEM1 DW 1122H,3344H

MEM2 DW 5566H,7788H

SUM DW 2 DUP(?)

DSEG ENDS

CSEG SEGMENT

ASSUME CS:CSEG,DS:DSEG

START:MOV AX,DSEG

MOV DS,AX

LEA BX,MEM1

LEA SI,MEM2

LEA DI,SUM

MOV CL,2

CLC

AGAIN:MOV AX,[BX]

ADC AX,[SI]

MOV [DI],AX

ADD BX,2

ADD SI,2

ADD DI,2

LOOP AGAIN

MOV AH,4CH INT 21H

CSEG ENDS

END START

2.试编写程序,测试AL寄存器的第4位(bit4)是否为0?

参考答案:测试寄存器AL中某一位是否为0,可使用TEST指令、AND指令、移位指令等几种方法实现。

如: TEST AL,10H

JZ NEXT

NEXT:┅

或者:MOV CL,4

SHL AL,CL

JNC NEXT

NEXT:┅

3.试编写程序,将BUFFER中的一个8位二进制数转换为ASCII码,并按位数高低顺序存放在ANSWER开始的内存单元中。

参考答案:

DSEG SEGMENT

BUFFER DB ?

DSEG ENDS

CSEG SEGMENT

;要转换的数

ANSWER DB 3 DUP(?)

;ASCII码结果存放单元

ASSUME CS:CSEG,DS:DSEG

START:MOV AX,DSEG

MOV DS,AX

MOV CX,3

XOR AX,AX

MOV AL,BUFFER

MOV BL,0AH

AGAIN:DIV BL

ADD AH,30H

INC DI

;取要转换的二进制数

;基数10

;十进制数转换成ASCII码

;保存当前结果

;商为0?(转换结束?)

;最多不超过3位十进制数(255)

;DI指向结果存放单元

LEA DI,ANSWER

;用除10取余的方法转换

MOV [DI],AH

AND AL,AL

;指向下一个位保存单元 JZ STO

;若结束,退出

MOV AH,0

LOOP AGAIN

STO: MOV AX,4CH

INT 21H

CSEG ENDS

END START

4.假设数据项定义如下:

;否则循环继续

DATA1 DB ‘HELLO!GOOD MORNING!’

DATA2 DB 20 DUP(?)

试用串操作指令编写程序段,使其分别完成以下功能:

(1)从左到右将DATA1中的字符串传送到DATA2中;

(2)传送完后,比较DATA1和DATA2中的内容是否相同;

(3)把DATA1中的第3和第4个字节装入AX;

(4)将AX的内容存入DATA2+5开始的字节单元中;

参考答案:

(1) MOV AX,SEG DATA1

MOV DS,AX

MOV AX,SEG DATA2

MOV ES,AX

LEA SI,DATA1

LEA DI,DATA2

MOV CX,20

CLD

REP MOVSB

(2)LEA SI,DATA1

LEA DI,DATA2

MOV CX,20

CLD

REPE CMPSB

(3)LEA SI,DATA1

ADD SI,2

LODSW

(4)LEA DI,DATA2

ADD DI,5

MOV CX,7

CLD REP STOSW

5.编写程序段,将STRING1中的最后20个字符移到STRING2中(顺序不变)。

参考答案:

首先确定STRING1中字符串的长度,因为字符串的定义要求以‘$‘符号结尾,可通过检测‘$‘符确定出字符串的长度,设串长度为COUNT,则程序如下:

LEA SI,STRING1

LEA DI,STRING2

ADD SI,COUNT-20

MOV CX,20

CLD

REP MOVSB

6.若接口03F8H的第1位(b1)和第3位(b3)同时为1,表示接口03FBH有准备好的8位数据,当CPU将数据取走后,b1和b3就不再同时为1了。仅当又有数据准备好时才再同时为1。试编写程序,从上述接口读入200字节的数据,并顺序放在DATA开始的地址中。

参考答案:由题知,当从输入接口03F8H读入的数据满足××××1×1×B时可以从接口03FBH输入数据。

LEA SI,DATA

MOV CX,200

NEXT:MOV DX,03F8H

IN AL,DX

AND AL,0AH

;判断b1和b3位是否同时为1

CMP AL,0AH

JNZ NEXT

;b1和b3位同时为1则读数据,否则等待

MOV DX,03FBH

IN AL,DX

MOV [SI],AL

INC SI

LOOP NEXT

HLT

7.请用子程序结构编写如下程序:从键盘输入一个二位十进制的月份数(01~12),然后显示出相应的英文缩写名。

参考答案:可根据题目要求编写如下几个子程序:

INPUT 从键盘接收一个两位数,并将其转换为二进制数;

LOCATE 通过字符表查找将输入数与英文缩写对应起来;

DISPLAY 将缩写字母在屏幕上显示。 程序如下:

DSEG SEGMENT

DATA1 DB 3

DATA2 DB 3,?,3 DUP(?)

ALFMON DB ‘’,’$’

MONTAB DB ‘JAN’,‘FEB’,‘MAR’,‘APR’,‘MAY’,‘JUN’

DB ‘JUL’,‘AUG’,‘SEP’,‘OCT’,‘NOV’,‘DEC’

DSEG ENDS

SSEG SEGMENT STACK ‘STACK’

DB 100 DUP(?)

SSEG ENDS

CSEG SEGMENT

ASSUME CS:CSEG,DS:DSEG,ES:DSEG,SS:SSEG

MAINPROC FAR

PUSH DS;恢复断点

XOR AX,AX

PUSH AX

MOV AX,DSEG ;段初始化

MOV DS,AX

MOV ES,AX

MOV AX,SSEG

MOV SS,AX

CALL INPUT

CALL LOCATE

CALL DISPLAY

RET

MAIN ENDP

INPUT PROC NEAR

PUSH DX

MOV AH,0AH ;从键盘输入月份数

LEA DX,DATA2

INT 21H

MOV AH,DATA2+2 ;输入月份数的ASCII码送AX

MOV AL,DATA2+3

XOR AX,3030H ;将月份数的ASCII码转换为二进制数

CMP AH,00H ;确定是否为01—09月

JZ RETURN

SUB AH,AH ;若为10—12月则清高8位

ADD AL,10 ;转为二进制码

RETURN:POP DX

RET INPUT ENDP

LOCATE PROC NEAR

PUSH SI

PUSH DI

PUSH CX

LEA SI,MONTAB

DEC AL

MUL DATA1;每月为3个字符

ADD SI,AX ;指向月份对应的英文缩写自母的地址

MOV CX,03H

CLD

LEA DI,ALFMON

REP MOVSB

POP CX

POP DI

POP SI

RET

LOCATE ENDP

DISPLAY PROC

PUSH DX

LEA DX,ALFMON

MOV AH,09H

INT 21H

POP DX

RET

DISPLAY ENDP

CSEG ENDS

END MAIN

8.编写一程序段,把从BUFFER开始的100个字节的内存区域初始化成55H、0AAH、55H、0AAH、…、55H、0AAH。

参考答案: 可用串存储指令实现。

DSEG SEGMENT

BUFFER DB 100 DUP(?)

DSEG ENDS

CSEG SEGMENT

ASSUME CS:CSEG,DS:DSEG,ES:DSEG

BEGIN:MOV AX,DSEG

MOV DS,AX

MOV ES,AX

MOV AX,0AA55H LEA DI,BUFFER

CLD

MOV CX,50

REP STOSW

HLT

CSEG ENDS

END BEGIN

9.试编写将键盘输入的ASCII码转换为二进制数的程序。

参考答案:

DATA SEGMENT

BUFFER DB 100 DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

MOV DS,AX

LEA SI,BUFFER

MOV AH,1

;从键盘输入一个数

INT 21H

AND AL,7FH

;去掉最高位

CMP AL,‘0’

JL STO

;若小于0则不属于转换范围

CMP AL,‘9’

JG ASCB1

SUB AL,30H

;对0~9之间的数减去30H转换为二进制数

JMP ASCB2

ASCB1:CMP AL,‘A’

;对大于9的数再与A比较

JL STO

CMP AL,‘F’

JG STO

SUB AL,37H

;对A~F之间的数减去37H转换

ASCB2:MOV [SI],AL

;转换结果存放在BUFFER为首地址的单元中

INC SI

STO:CMP AL,‘$’

JNE NEXT

HLT

CODE ENDS

END START 第5章 半导体存储器

一、填空题

1.半导体存储器主要分为(RAM)和(ROM)两类。其中,需要后备电源的是(RAM)。

2.半导体存储器中,需要定时刷新的是(DRAM)。

3.图5-43中,74LS138译码器的(#Y6)输出端会输出低点平。

011111≥1Y2G1G2A&Y1G2BC≥1Y3BAY0Y1Y2Y3Y4Y5Y6Y7SRAM存储芯片D7~D0A12~A0

WRRDCS图5-43 138译码电路

图5-44 RAM存储器芯片引脚

4.根据图5-44中SRAM存储器芯片的引脚,可判断出它的容量是( 8K×8bit,即8KB )。

5.可用紫外线擦除信息的可编程只读存储器的英文缩写是( EPROM )。

6. 已知某微机存储系统由主存和一级Cache组成,Cache的存取速度为10ns,其平均命中率为90%,而主存的存取速度为100ns,则该微机存储系统的平均存取速度约为( 19 )ns。

7.采用容量为64K×1的DRAM芯片来构成地址为00000H~7FFFFH的内存,需要的芯片数为( 64片)。

解:由地址范围得:所需存储容量为512KB。需要先用8片64K×1的DRAM芯片,通过位扩展构成64KB存储体,再进行字扩展。故需64片。

8.对图5-45所示的译码电路,74LS138译码器的输出端#Y0、#Y3、#Y5和#Y7所决定的内存地址范围分别是()、()、()、()。

解:图中未给出A17,为部分地址译码。即每个Y输出端所连接的芯片都占有2个地址范围。#Y0、#Y3、#Y5、#Y7的内存地址范围分别是:

#Y0:00000H~01FFFH,20000H~21FFFH

#Y3:06000H~07FFFH,26000H~27FFFH

#Y5:0A000H~0BFFFH,2A000H~2BFFFH

图5-45 译码电路

LS138MEMRMEMW&1≥A15A14A13GG2AG2BCBAY0Y3Y5Y7A18A19A16#Y7:0E000H~0FFFFH,2E000H~2FFFFH

9.用户自己购买内存条进行内存扩充,是在进行( 字 )存储器扩展。

二、简答题

1.简述RAM和ROM各有何特点?静态RAM和动态RAM各有何特点?

解:ROM在正常工作时只能读出,不能写入。RAM则可读可写。掉电后,ROM中的内容不会丢失,RAM中的内容会丢失。

2.试说明FLASH EEPROM芯片的特点及28F040的编程过程。

解:详见5.3.3

3.设某微型机内存RAM区的容量为128KB,若用2164芯片构成这样的存储器,需多少片2164?至少需多少根地址线?其中多少根用于片内寻址?多少根用于片选译码?

解:(1) 每个2164芯片的容量为64K×1,共需128/64×8=16片。

(2) 128KB容量需要地址线17根。

(3) 16根用于片内寻址。该16位地址信号通过二选一多路器连到2164芯片,分时传送高位地址与低位地址。

(4) 1根用于片选译码。

4.什么是Cache?它能够极大地提高计算机的处理能力是基于什么原理?

解:Cache是位于CPU与主存之间的高速小容量存储器。它的存在是基于程序访问的局部性原理。

5.如何解决Cache与主存内容的一致性问题?

解:Cache与主存内容的一致性主要涉及写Cache操作。利用写穿式访问Cache可以直接保证Cache与主存内容的一致性。采用写更新(写回)方式,是在需要替换时将修改过的Cache块内容写回到主存。

可以通过设置“修改位”来保证数据的以致性。当Cache中的某块内容被修改时,“修改位”置1,否则为“0”。在该块内容需要被替换时,若对应的“修改位”为1,则需要先将该块内容写回到主存,再将主存中新的内容调入该块。

6.在二级Cache系统中,L1 Cache的主要作用是什么?L2 Cache呢? 解:在二级Cache系统中,L1 Cache集成在CPU片内,分为指令Cache和数据Cache。L2 Cache不区分指令Cache和数据Cache。 L1 Cache的主要作用是提高存取速度,而L2 Cache则是速度和存储容量兼备。它们和主存一起,构成三级存储器结构的Cache存储器系统。

7.什么是存储器系统?微机中的存储器系统主要分为哪几类?它们的设计目标是什么?

解:将两个或两个以上速度、容量和价格各不相同的存储器用软件、硬件或软硬件相结合的方法连接起来,成为一个系统。这个系统从程序员的角度看,它是一个存储器整体。所构成的存储器系统的速度接近于其中速度最快的那个存储器,存储容量与存储容量最大的那个存储器相等或接近,单位容量的价格接近最便宜的那个存储器。

现代微机系统中通常有两种存储系统,一种是由Cache 和主存储器构成的Cache 存储系统,另一种是由主存储器和磁盘构成的虚拟存储系统。Cache 存储系统的设计目标主要是提高存取速度,虚拟存储系统的设计目标主要是扩大存储容量。

三、设计题

1.利用全地址译码将1片6264芯片接到8088系统总线上,使其所占地址范围为38000H~39FFFH。

参考答案:由题意得,参与译码的高位地址为7位,地址:0011100

2.某8086系统要用EPROM 2764和SRAM 6264芯片组成16KB的内存,其中:ROM地址范围为FE000H~FFFFFH,RAM地址范围为F0000H~F1FFFH。试用74LS138译码器设计该存储电路。

参考答案:

SRAM6264D7D0~

A0A12MEMWMEMR·

··

D7D0~

A0A12WEOECS2CS1+5VEPROM2764D7D0~

A0A12MEMR&A19A18A17A16A15A14A13&G1Y0G2BG2ACBA74LS138D7D0~

·

··

A0A12OECSY7

3.现有两片6116芯片,所占地址范围为61000H~61FFFH,试将它们连接到8088系统中。并编写测试程序,向所有单元输入一个数据,然后再读出与之比较,若出错则显示“Wrong!”,全部正确则显示“OK!”。

参考答案:

存储器接口电路如下图所示。 6116D0~

D7

A0A10MEMWMEMRD0~

D7

A0A10MEMWMEMRD0~

D7·

··

A0A10R/WOECSD0~

D7·

··

A0A10R/WOEG1G2BG2AY3CBA74LS138CS&

A18A17A19A16A15A14A13A12A11Y2&

≥1

测试程序段:

DSEG SEGMENT

OK DB‘OK!’,‘$’

WRONG DB‘Wrong!’,‘$’

DSEG ENDS

CSEG SEGMENT

ASSUME CS:CSEG,DS:DSEG

START: MOV AX, 6100H

MOV ES, AX

MOV DI, 0

MOV CX, 1000H

MOV AL, 55H

REP STOSB

MOV DI, 0

MOV CX, 1000H

REPZ SCASB

JZ DIS_OK

LEA DX, WRONG

MOV AH, 9

INT 21H

JMP STOP

DIS_OK:LEA DX, OK MOV AH, 9

INT 21H

STOP: MOV AH,4CH

INT 21H

CSEG ENDS

END START

4. 某嵌入式系统要使用4K×8的SRAM芯片构成32KB的数据存储器。SRAM芯片的主要引脚有:D0~D7,A0~A11,#CE,#RD,#WR。问:

1)该存储器共需要多少个SRAM芯片?

2)设计该存储器电路,存储器的地址范围为0000H-7FFFH。

参考答案:

1)需要8片4KB的SRAM芯片;

2)存储器电路如下:

SRAMD0~

D7A0A11MEMWMEMRD0~

D7·

··

A0A11WRRDCECECECECECECECE&

G1G2BY0Y1Y2Y3Y4Y5Y6Y7A15A14A13A12G2ACBA74LS138

5.为某8088应用系统设计存储器。要求:ROM地址范围为FC000H~FFFFFH,RAM地址范围为00000H~1FFFFH。使用的ROM芯片和SRAM芯片的主要引脚如图5-46所示。

参考答案: 由题得:需要16KB的ROM,128KB的RAM。题中所给的ROM芯片的容量为8KB,RAM芯片的容量为32KB。故分别需要2片ROM和4片RAM芯片。

电路设计如下图所示。

RAMD0~

D7A0A13A14MEMWMEMR┇D0~

D7A0A13A14WEOECSCSCSCS74LS138&

G1Y0G2BY1Y2Y3D0~D7A0~A12MEMRROMA19A18A17A16A15≥1G2ACBAD0~D7A0~A12OECSCS&

≥1

A131≥1

第6章 输入输出技术

一、填空题

1.主机与外部设备进行数据传送时,CPU效率最高的传送方式是( DMA )。

2. 中断21H的中断向量放在从地址( 00048H )开始的4个存储单元中。

3. 输入接口应具备的基本条件是具有( 对数据的控制 )能力,输出接口应具备的基本条件则是( 对数据的锁存 )能力。 4. 要禁止8086对INTR中断进行响应,应该把IF标志位设置为( 0 )。

5. 要设置中断类型60H的中断向量,应该把中断向量的段地址放入内存地址为( 000C2H )的字单元中,偏移地址放入内存地址为( 000C0H )的字单元中。

二、简答题

1.输入/输出系统主要由哪几个部分组成?主要有哪些特点?

解:输入输出系统主要中游三个部分组成,即:输入输出接口,输入输出设备、输入输出软件。

输入输出系统主要有4个特点:复杂性、异步性、时实性、与设备无关性。

2.试比较4种基本输入输出方法的特点。

解:在微型计算机系统中,主机与外设之间的数据传送有4种基本的输入输出方式:

无条件传送方式;

查询工作方式;

中断工作方式;

直接存贮器存取(DMA)方式。

它们各自具有以下特点:

无条件传送方式适合于简单的、慢速的、随时处于“准备好”接收或发送数据的外部设备,数据交换与指令的执行同步,控制方式简单;

查询工作方式针对并不随时“准备好”、而需满足一定状态才能实现数据的输入/输出的简单外部设备,其控制方式也较简单,但CPU的效率比较低;

中断工作方式是由外部设备作为主动的一方,在需要时向CPU提出工作请求,CPU在满足响应条件时响应该请求并执行相应的中断处理程序。这种工作方式使CPU的效率较高,但控制方式相对较复杂;

DMA方式适合于高速外设,是4种基本输入/输出方式中速度最高的一种。

3.8088/8086系统如何确定硬件中断服务程序的入口地址?

解:8088/8086系统的硬件中断包括非屏蔽和可屏蔽两种中断请求。每个中断源都有一个与之相对应的中断类型码n 。系统规定所有中断服务子程序的首地址都必须放在中断向量表中,其在表中的存放地址 = n×4,(向量表的段基地址为0000H)。即子程序的入口地址为(0000H:n×4)开始的4个单元中,低位字(2个字节)存放入口地址的偏移量,高位字存放入口地址的段基地址。

4.简述INTR中断和NMI中断的区别。

解:INTR中断处理的一般过程详见教材6.4.2。NMI中断与INTR中断的主要区别是:NMI中断的响应不受IF标志的影响,不用外部接口给出中断类型码,CPU响应NMI中断时也没有中断响应周期。

5.试说明8088CPU可屏蔽中断的处理过程。

解:详见教材6.4.2。

6.CPU满足什么条件能够响应可屏蔽中断?

解:

(1)CPU要处于开中断状态,即IF=1,才能响应可屏蔽中断

(2)当前指令执行结束。

(3)当前没有发生复位(RESET)、保持(HOLD)和非屏蔽中断请求(NMI)。

(4)若当前执行的指令是开中断指令(STI)和中断返回指令(IRET),则在执行完该指令后再执行一条指令,CPU才能响应INTR请求。

(5)对前缀指令,如LOCK、REP等,CPU会把它们和它们后面的指令看作一个整体,直到这个整体指令执行完,方可响应INTR请求。

7.8259有哪几种优先级控制方式?一个外中断服务程序的第一条指令通常为STI,其目的是什么?

解:8259有两类优先级控制方式,即固定优先级和循环优先级方式。

CPU响应中断时会自动关闭中断(使IF=0)。若进人中断服务程序后允许中断嵌套,则需用指令开中断(使IF=0),故一个外中断服务程序的第一条指令通常为STI。

8.单片8259能够管理多少级可屏蔽中断?若用3片级联能管理多少级可屏蔽中断?

解:因8259有8位可屏蔽中断请求输入端,故单片8259能够管理8级可屏蔽中断。若用3片级联,即1片用作主控芯片,两片作为从属芯片,每一片从属芯片可管理8级,则3片级联共可管理22级可屏蔽中断。

9.已知SP=0100H,SS=3500H,在CS=9000H,IP=0200H,[00020H]=7FH,[00021H]=1AH,[00022H]=07H,[00023H]=6CH,在地址为90200H开始的连续两个单元中存放着一条两字节指令INT 8。试指出在执行该指令并进入相应的中断例程时,SP、SS、IP、CS寄存器的内容以及SP所指向的字单元的内容是什么?

解:CPU在响应中断请求时首先要进行断点保护,即要依次将FLAGS和INT下一条指令的CS、IP寄存器内容压入堆栈,亦即栈顶指针减6,而SS的内容不变。INT指令是一条两字节指令,故其下一条指令的IP=0200H+2=0202H。

中断服务子程序的入口地址则存放在中断向量表(8×4)所指向的连续4个单元中。8×4=0020H。所以,在执行中断指令并进入相应的中断例程时,以上各寄存器的内容分别为:

SP = 0100H–6=00FAH

SS=3500H

IP=[0020H]字单元内容=1A7FH

CS=[0022H]字单元内容=6C07H

SP所指向的字单元的内容= 0202H

三、设计题

1.某输入接口的地址为0E54H,输出接口的地址为01FBH,分别利用74LS244和74LS273作为输入和输出接口。画出其与8088系统总线的连接图;并编写程序,使当输入接口的bit1、bit4和bit7位同时为1时,CPU将内存中DATA为首址的20个单元的数据从输出接口输出;若不满足上述条件则等待。

参考答案:系统连接图如下图所示。

IOR8088系统总线74LS244D0~

D7D0~

D7I0~

I7┇A15┇A12≥1≥1E1E274LS273D0~

D7Q0~A8A7A5A3A1A0A11A10A9A6A4A2≥1Q7&≥1CP≥1&IOW程序代码:

LEA SI,DATA

MOV CL,20

AGAIN: MOV DX,0E54H

WAITT: IN AL,DX

;读入状态值

AND AL,92H

;屏蔽掉不相关位,仅保留bit1、bit4和bit7位状态

CMP AL,92H

JNZ WAITT

;不满足bit1、bit4、bit7位同时为1则继续判断

MOV DX,01FBH

MOV AL,[SI]

OUT DX,AL

;满足条件则输出一个单元数据

INC SI

LOOP AGAIN

;若20个单元数据未传送完则循环

HLT

2.利用74LS244作为输入接口(端口地址:01F2H)连接8个开关K0~K7,用74LS273作为输出接口(端口地址:01F3H)连接8个发光二极管。

(1)画出芯片与8088系统总线的连接图,并利用74LS138设计地址译码电路;

(2)编写实现下述功能的程序段:

① 若8个开关K7~K0全部闭合,则使8个发光二极管亮;

② 若开关高4位(K4~K7)全部闭合,则使连接到74LS273高4位的发光管亮;

③ 若开关低4位(K3~K0)闭合,则使连接到74LS273低4位的发光管亮;

④ 其它情况,不做任何处理。

参考答案:

(1)芯片与8088系统总线的连接图如下图所示。

8088系统总线+5V74LS273D0~

LED1D0D7~Q0Q1Q2Q3Q4Q5Q6Q7RD7┇IOW≥1CP1RD0~74LS244D0~D7A8┇A4┇&D7G1G2AY2I0I1I2I3I4I5I6I7RK0┇A15A14┇┇A9A3A2A1A0≥1G2BCBAY3≥1E1E2RK7IOR控制程序:

MOV DX,01F2H

IN AL,DX

CMP AL,0

JZ ZERO

TEST AL,0F0H

JZ HIGH

TEST AL,0FH

JZ LOWW

JMP STOP

ZERO: MOV DX,01F3H

MOV AL,0FFH

OUT DX,AL

JMP STOP

HIGH: MOV DX,01F3H

MOV AL,0F0H

OUT DX,AL

OWW: MOV DX,01F3H

MOV AL,0FH

OUT DX,AL

STOP: HLT

3.试编写8259的初始化程序:系统中仅有一片8259,允许8个中断源边沿触发,不需要缓冲,一般全嵌套方式工作,中断向量为40H。

4. 一个I/O设备和CPU采用中断方式通信,该设备占用的中断类型号为40H,中断服务程序的名字为MY_INT。写出设置该中断类型的中断向量的程序段。

解:设8259的地址为FF00H—FF01H。其初始化顺序为:ICW1,ICQ2,ICW3,ICW4。对单片8259系统,不需初始化ICW3。

程序如下:

SET8259: MOV DX,0FF00H

;置ICW1,A0=0

MOV AL,13H

;单片,边沿触发,需要ICW4

OUT DX,AL

MOV DX,0FF01H

;置ICW2,A0=1

MOV AL,40H

;中断向量码=40H

OUT DX,AL

MOV AL,03H

;ICW4,8086/8088模式,一般全嵌套,非缓冲

OUT DX,AL

HLT

第7章 常用数字接口

一、填空题

1. 在串行通信中,有三种数据传送方式,分别是单工方式、(半双工)方式和(全双工 )方式。

2. 根据串行通信规程规定,收发双方的(波特率)必须保持相同,才能保持数据的正确传送。

3.8253可编程计数器有两种启动方式,在软件启动时,要使计数正常进行,GATE端必须为( 高 )电平,如果是硬件启动则GATE端为( 产生由低到高的正跳变 )。

4. 在8255并行接口中,能够工作在方式2的端口是( A )端口。

5.在8250串行接口中,将并行输入转换为串行输出、或将串行输入转换为并行输出的器件是(移位寄存器 )。

二、简答题

1.一般来讲,接口芯片的读写信号应与系统的哪些信号相连?

解:一般来讲,接口芯片的读写信号应与系统总线信号中的#IOR(接口读)或#IOW(接口写)信号相连。 2.试说明8253的六种工作方式。其时钟信号CLK和门控信号GATE分别起什么作用?

解:可编程定时/计数器8253具有六种不同的工作方式。详见教材7.2.2。

3.试说明串行通信的数据格式。

解:串行通信通常包括两种方式,即同步通信和异步通信。二者因通信方式的不同而有不同的数据格式。详见教材第260页图7-3和图7-4。

4. 8255各端口可以工作在几种方式下?当端口A工作在方式2时,端口B和C工作于什么方式下?

解:8255各端口均可以工作在方式0和方式1下,而A口则可以工作在方式0、方式1及方式2三种方式下。当端口A工作在方式2时,端口B可工作于方式0或方式1,端口C的剩余端只能工作于方式0。

5.试比较并行通信与串行通信的特点。

解:

并行通信是在同一时刻发送或接收一个数据的所有二进制位。其特点是接口数据的通道宽,传送速度快,效率高。但硬件设备的造价较高,常用于高速度、短传输距离的场合。

串行通信是将数据一位一位的传送。其特点是传送速度相对较慢,但设备简单,需要的传输线少,成本较低。所以常用于远距离通信。

三、设计题

1.若8253芯片的接口地址为D0D0H~D0D3H,时钟信号频率为2MH。现利用计数器0、1、2分别产生周期为10us的对称方波及每1ms和1s 产生一个负脉冲,试画出其与系统的电路连接图,并编写包括初始化在内的程序。

参考答案:

根据题目要求可知,计数器0(CNT0)工作于方式3,计数器1(CNT1)和计数器2(CNT2)工作于方式2。时钟频率2MH,即周期为0.5us,从而得出各计数器得计数初值分别为:

CNT0:10us/0.5us=20

CNT1:1ms/0.5us=2000

CNT2:1s/0.5us=2×10

由于计数器2的计数初值已超出了16位数的表达范围,需经过一次中间分频,可将OUT1端的输出脉冲作为计数器2的时钟频率。这样,CNT2的计数初值就等于61s/1ms=1000。

线路连接如下图所示。

线

D0D7IORIOWA1A0IORIOW&+5V8253D0D7GATE0GATE1GATE2OUT0OUT2OUT18253的初始化程序如下:

MOV DX,0D0D3H

MOV AL,16H

;计数器0,低8位计数,方式3

OUT DX,AL

MOV AL,74H

;计数器1,双字节计数,方式2

OUT DX,AL

MOV AL,0B4H

;计数器2,双字节计数,方式2

OUT DX,AL

MOV DX,0D0D0H

MOV AL,20

;送计数器0计数初值

OUT DX,AL

MOV DX,0D0D1H

MOV AX,2000

;送计数器1计数初值

OUT DX,AL

MOV AL,AH

OUT DX,AL

MOV DX,0D0D2H

~A15A14A12A7A6A4~GG2ARDWRA1A0CLK2CLK1CLK0CSY02MH&

G2B1≥CBA74LS138A13A11A10A9A8A5A3A2MOV AX,1000

;送计数器2计数初值

OUT DX,AL

MOV AL,AH

OUT DX,AL

2.某一计算机应用系统采用8253的计数器0作频率发生器,输出频率为500Hz;用计数器1产生1000Hz的连续方波信号,输入8253的时钟频率为1.19MH。试问:初始化时送到计数器0和计数器1的计数初值分别为多少?计数器1工作于什么方式下?

解:计数器0工作于方式2,计数初值=1.19MH/500Hz=2380

计数器1工作于方式3,计数初值=1.19MH/1KHz=1190

3.某8255芯片的地址范围为A380H~A383H,工作于方式0,A口、B口为输出口,现欲将PC4置“0”,PC7置“1”,试设计该8255芯片与8088系统的连接图,并编写初始化程序。

参考答案:

由于需要初始化PC4和PC7,因此C端口的高4位应作为输出。该8255芯片与8088系统的连接如下图所示:

号系统总线信A15A13A9A8A7A12A11A10A6A5A4A3A2D0~D7IORIOWA1A0D0~D7RDWRA1A0PA0~PA78255PB0~PB7&PC4PC7&CS≥1该8255芯片的初始化程序包括置方式控制字及C口的按位操作控制字。程序如下: MOV DX,0A383H

MOV AL,80H

;方式控制字

OUT DX,AL

MOV AL,08H

;PC4置0

OUT DX,AL

MOV AL,0FH

;PC7置1

OUT DX,AL

4.设8255的接口地址范围为03F8H~03FBH,A组B组均工作于方式0,A口作为数据输出口,C口低4位作为控制信号输入口,其它端口未使用。试画出该片8255与系统的电路连接图,并编写初始化程序。

解:8255芯片与系统的电路连接如下图所示。

由题目知,只需对8255置方式控制字。初始化程序如下:

MOV DX,03FBH

MOV AL,81H

OUT DX,AL

线信号系统总A9A8A7A6A5A15A14A13A12A11A10A4A3A2D0~D7IORIOWA1A0D0~D7RDWRA1A0PA0~PA78255PC0~PC4&G&G2BY6CS≥1G2ACBA

5.已知某8088微机系统的I/O接口电路框图如图7-47所示。试完成:

(1) 根据图中接线,写出8255、8253各端口的地址; (2) 编写8255和8253的初始化程序。其中,8253的OUT1端输出100Hz方波,8255的A口为输出,B口和C口为输入;

(3) 为8255编写一个I/O控制子程序,其功能为:每调用一次,先检测PC0的状态,若PC0=0,则循环等待;若PC0=1,可从PB口读取当前开关S的位置(0~7),经转换计算从A口的PA0~PA7输出该位置的二进制编码,供LED显示。

图7-47题三-5接口电路框图

82538088 DBA1A0A15IO/M

82551MHzD0~D

7PA0A1A0

D0~D

7A1A0LED字形译码

CLK1+5V~

GATE1OUT1&CSA1A0PC0CSPA7

PB0~

PB7

S:波段开关1解:(1)8255的地址范围为:8000H~FFFFH

8253的地址范围为:0000H~7FFFH

(2)8255和8253芯片初始化

8255初始化程序:

MOV DX,8003H

MOV AL,8BH

;方式控制字,方式0,A口输出,B口和C口输入

OUT DX,AL

8253初始化程序:

MOV DX,0003H

MOV AL,76H

;计数器1

OUT DX,AL

MOV DX,0001H

MOV AX,10000

;设计数初值=10000

OUT DX,AL

MOV AL,AH

OUT DX,AL

(3)8255控制子程序

;定义显示开关位置的字形译码数据

DATA SEGMENT

BUFFER DB 3FH,06H,5BH,0FH,66H,6DH,7CH,07H

DATA ENDS

CODE SEGMENT ASSUME CS:CODE,DS:DATA

MAIN PROC

PUSH DS

MOV AX,DATA

MOV DS,AX

CALL DISP

POP DS

RET

MAIN ENDP

;输出开关位置的二进制码程序

DISP PROC

PUSH CX

PUSH SI

XOR CX,CX

CLC

LEA SI,BUFFER

MOV DX,8002H

WAITT:IN AL,DX

TEST AL,01H

JZ WAITT

MOV DX,8001H

IN AL,DX

NEXT:SHR AL,1

INC CX

JC NEXT

DEC CX

ADD SI,CX

MOV AL,[SI]

MOV DX,8000H

OUT DX,AL

POP SI

POP CX

RET

DISP ENDP

CODE ENDS

END MAIN

6.串行通信接口芯片8250的给定地址为83A0H~83A7H,试画出其与8088系统总线的连接图。若采用查询方式由该8250发送当前数据段、偏移地址为BUFFER的顺序100个字节的数据,试编写发送程序。

参考答案:

8250与系统的连接如下图所示:

线信

号A15A9A8A7A5A14A13A12A11A10A6A4A3A2A1A0&

8250D0~D7RESETIORIOWD0~D7MRDISTRDOSTRMRDISTRDOSTR+5VCS0CS1A2A1A0CS2≥1

SOUTDTRRTS系统总DSRCTSBAUDOUTRCLKXTAL1时 钟发生器OUT1OUT22kΩ+5V≥1

假设要写入除数锁存器的除数为96,即0060H。程序如下:

;8250的初始化程序

BEGIN:M0V DX,83A3H ;通信控制寄存器地址

MOV AL,80H ;使通信控制寄存器的D7=l

0UT DX,AL

M0V DX,83A0H

;除数锁存器地址

M0V AL,60H

;除数为0060H

OUT DX,AL

;写除数低8位

INC DX

M0V AL,0

0UT DX,AL

;写除数高8位

M0V DX,83A3H ;通信控制寄存器地址

M0V AL,0AH ;1位停止位,7位数据位,奇校验

0UT DX,AL

;初始化通信控制寄存器

M0V DX,83A4H

;MODEM控制寄存器地址

M0V AL,03H ;使DTR和RTS有效

0UT DX,AL

M0V DX,83A1H ;中断允许寄存器地址

M0V AL,0 ;禁止所有中断 0UT DX,AL

;数据发送程序

SENDATA:LEA SI,BUFFER

MOV CX,100

WAITT:M0V DX,83A5H

;通信状态寄存器地址

IN AL,DX

TEST AL,20H

;检查发送数据寄存器是否空

JZ WAITT

M0V DX,83A0H

;发送数据寄存器地址

MOV AL,[SI]

0UT DX,AL

;发送一个字节

INC SI

DEC CX

JNZ WAITT

7.上题中若采用中断方式接收数据,试编写将接收到的数据放在数据段DATA单元的中断服务子程序。

解:

同上题一样,首先要对8250进行初始化,其初始化程序与上题基本相同,只是要。程序如下:

将中断允许寄存器的D0位置“1”BEGIN: …

M0V DX,83A1H ;中断允许寄存器地址

M0V AL,01H ;允许接收数据寄存器满产生中断

0UT DX,AL

STI

;接收数据子程序

RECDATA: PUSH AX

PUSH BX

PUSH DX

PUSH DS

M0V DX,83A5H

IN AL,DX

MOV AH,AL ;保存接收状态

M0V DX,83A0H

IN AL,DX ;读入接收到的数据

AND AL,7FH

TEST AH,1EH ;检查有无错误产生

JNZ ERROR

SAVEDATA: MOV DX,SEG DATA

MOV DS,DX

M0V SI,0FFSET DATA M0V [SI],AL

MOV DX,中断控制器8259端口地址

M0V AL,20H

;发送中断结束命令给8259

0UT DX,AL

P0P DS

P0P DX

P0P BX

P0P AX

STI

IRET

第8章 模拟量接口电路

一、填空题

1.在模拟量输入通道中,将非电的物理量转换为电信号的器件是(传感器)。

2. 一个8位的D/A转换器,其分辨率是(8位,或说:1/255)。

3.某一测控系统要求计算机输出模拟控制信号的分辩率必须达到1‰,则应选用的D/A芯片的位数至少是( 10位 )。

4.一个10位的D/A转换器,如果输出满刻度电压值为5V,则一个最低有效位对应的电压值等于( 5/1023V≈4.89mV )。

5.满量程电压为10V的8位D/A变换器,其最低有效位对应的电压值为( 10/255V≈39.22mV)。

6.设被测温度的变化范围为0℃~100℃,若要求测量误差不超过0.1℃,应选用分辩率为( 9 )位的A/D转换器。

二、简答题

1.试说明将一个工业现场的非电物理量转换为计算机能够识别的数字信号主要需经过哪几个过程?

解:参见教材第303页图8-1

2. A/D转换器和D/A转换器的主要技术指标有哪些?影响其转换误差的主要因素是什么?

解:A/D转换器和D/A转换器的主要技术指标分别参见教材8.3.2和8.2.2节。影响转换误差的主要因素包括分辨率、非线性误差、电源波动误差等。 3.DAC0832在逻辑上由哪几个部分组成?可以工作在哪几种模式下?不同工作模式在线路连接上有什么区别?

解:DAC0832在逻辑上包括一个8位的输入寄存器、一个8位的DAC寄存器和一个8位的D/A转换器等3个部分。可以工作在3种模式下,即:双缓冲模式、单缓冲模式及直通模式。

在双缓冲模式下,CPU对DAC0832要进行两步写操作:先将数据写入输入寄存器,再将输入寄存器的内容写入DAC寄存器,并进行一次变换。即此时DAC0832占用两个接口地址,可将ILE固定接+5V,CS和XFERWR1、WR2接到IOW,分别接到两个端口的地址译码信号线。

当工作于单缓冲模式时,数据写入输入寄存器后将直接进入DAC寄存器,并进行一次变换。此时DAC0832仅占用一个接口地址,故在线路连接上,只需通过ILE,WR1和CS进行控制,通常仍将ILE固定接+5V,WR1接IOW,CS接到地址译码器的输出端。WR2和XFER直接接地。

直通工作方式是将CS、WR1、WR2以及XFER引脚都直接接数字地,ILE接+5V,芯片处于直通状态,只要有数字量输入,就立刻转换为模拟量输出。

4.如果要求同时输出3路模拟量,则3片同时工作的DAC0832最好采用哪一种工作模式?

解:考虑到3路模拟量需同步输出,可使3片DAC0832工作于双缓冲模式。使3路数字量先分别锁存到3片DAC0832的输入寄存器,再同时打开各自的DAC寄存器,使3路模拟量同时输出。

5.某8位D/A转换器,输出电压为0V~5V。当输入的数字量为40H、80H时,其对应的输出电压分别是多少?

解:当输出电压为0V时,对应的数字量输入为00H;输出为5V时,输入为FFH。

所以,当输入的数字量为40H、80H时,其对应的输出电压分别约为1.255V和2.451V。

三、设计题

1.设DAC0832工作在单缓冲模式下,端口地址为034BH,输出接运算放大器。试画出其与8088系统的线路连接图,并编写输出三角波的程序段。

解:DAC0832工作在单缓冲模式下与系统的线路连接图下图所示。

A15A14A13A12A11A10A7A5A4A2A9A8A6A3A1A0IOWD0~

D7D0+5V+5VVCCILEVREFRfb~D7WR1R3R2

A1IOUT1IOUT2

R1A2C1

≥1

≥1CSXFERWR2DGNDAGND&

因DAC0832为8位,故其对应的最大数字量输出是0FFH,而最小输出为0。利用该芯片输出连续的三角波的程序如下:

START:MOV DX,034BH

NEXT1:INC AL

OUT DX,AL

CMP AL,0FFH

;比较是否达到最大值

JNE NEXT1

NEXT2:DEC AL

;达到最大值则减1

OUT DX,AL

CMP AL,00H

;比较是否达到最小值

JNE NEXT2

JMP NEXT1

2.某工业现场的三个不同点的压力信号经压力传感器、变送器及信号处理环节等分别送入ADC0809的IN0、IN1和IN2端。计算机巡回检测这三点的压力并进行控制。试编写数据采集程序。

解:ADC0809的数据采集程序参见教材第320页例8-4。书中例8-4完成的是8路模拟量循环采集,本题中是3路。可将教材第322页程序中的CX赋值3。

3.某11位A/D转换器的引线及工作时序如下图8-24所示,利用不小于1μs 的后沿脉冲(START)启动变换。当BUSY端输出低电平时表示正在变换,BUSY变高则变换结束。为获得变换好的二进制数据,必须使OE为低电平。现将该A/D转换器与8255相连,8255的地址范围为03F4H~03F7H。试画线路连接图,编写包括8255初始化程序在内的、完成一次数据变换并将数据存放在DATA中的程序。

解: A/D变换器通过8255与系统的线路连接如下图所示。

程序设计如下:

;8255的初始化程序

图8-24 11位A/D转换器主要引脚及工作时序

11位A/D转换器D0~D10OESTARTBUSYD0~D10≥1μs

START启动转换开始转换结束

模拟量输入BUSYOE8255D0D0A/D转换器~系统总线信号IORIOWA1A0&A9A8A7A6A5A15A14A13A12A11A10A4A3A2&

INIT PROC NEAR

PUSH DX

PUSH AX

MOV DX,03F7H

MOV AL,9AH

;方式0,A、B口输入,C口高4位输入,低4位输出

OUT DX,AL

MOV AL,01H

;PC0初始置1

~D7GG2BY5≥1

D7PA0PA7D0~~PB0PB1PB2PC0PC1PC6RDWRA1A0D7D8D9D10OESTARTBUSY模拟量输入CSG2ACBAOUT DX,AL

MOV AL,02H

OUT DX,AL

;PC1初始置0

POP AX

POP DX

RET

INIT ENDP

;完成一次数据采集程序

START:MOV AX,SEG DATA

MOV DS,AX

MOV SI,OFFSET DATA

CALL INIT ;初始化8255

MOV DX,03F6H

MOV AL,03H

;输出START信号

OUT DX,AL

NOP ;空操作使START脉冲不小于1us

MOV AL,01H

OUT DX,AL ;空操作等待转换

WAITT:IN AL,DX

;读BUSY状态

AND AL,40H

JZ WAITT

;若BUSY为低电平则等待

AND AL,0FEH

OUT DX,AL

;EOC端为高电平则输出读允许信号OE=0

MOV DX,03F5H

IN AL,DX

;读入变换结果的高3位

MOV [SI],AL

;将转换的数字量送存储器

INC SI

MOV DX,03F4H

IN AL,DX

;读入变换结果的低8位

MOV [SI],AL

HLT

4.图8-25所示为一个D/A转换接口电路,DAC0832输出电压范围为0-5V,8255的地址为300H~303H。编写实现如下功能的程序段:

(1)设置8255A的B口,使DAC0832按单缓冲方式工作。

(2)使DAC0832输出形如图8-26所示的1V~4V的锯齿波。

解:1V对应的数字量=51,4V对应的数字量=204

程序如下:

OUTP MACRO PORT,VALUE

MOV DX, PORT

MOV AL, VALUE

OUT DX, AL ENDM

;============================

OUTP 303H, 10000000B ;

8255工作方式0,A口输出,B口输出

OUTP 301H, 0 ;

单缓冲方式:#CS=#WR1=#WR=#XFER=ILE=0

SAW: MOV AH, 51 ;

数字量初值(1V)

L: OUTP 300H, AH ;

输出数字量

OUTP 301H, 1 ;

ILE=1,锁存数字量,转换输出

OUTP 301H, 0

INC AH

CMP AH, 204 ;判断超出上限(4V)?

JBE L ;

未超出,继续上升

JMP SAW

第9章 微型计算机在自动控制系统中的应用

一、填空题

1.计算机控制过程一般分为(实时数据采集)、(实时决策)和(实时控制)三个基本步骤。

2.计算机控制系统的主要应用类型有数据采集、直接数字控制、(监督计算机控制)、(分布式控制)和现场总线控制等。其中,()代表了工业控制体系结构发展的一种新方向。

3.自动控制方式主要分为开环控制和(闭环控制)。

4.开环控制是不将系统的(输出)再反馈到输入的系统。

5.PID控制的含义是比例、(积分)和(微分)控制。

二、简答题

1.请说明计算机在自动控制系统的应用中,为什么经常需要使用A/D和D/A转换器?它们各有什么用途?

解:在计算机控制系统中,由于工业控制计算机的输入和输出是数字信号,而现场采集到的信号或送到执行机构的信号大多是模拟信号,因此与传统的闭环负反馈控制系统相比,计算机控制系统需要有D/A转换和A/D转换这两个环节。

2.尝试说明在直流电机调速系统中,使用微机控制和不使用微机控制的区别?