第一篇:接口习题
一.单选题
1.JAVA语言的类间的继承关系是()。A多重的B.单重的 C.线程的 D.不能继承 2.以下关于JAVA语言继承的说法正确的是()。A.Java中的类可以有多个直接父类 B.抽象类中不能有子类 C.JAVA中的接口支持多继承 D.最终类可以作为其他类的父类
3.下列选项中,用于定义接口的关键字是()。A)interface
B)implements C)abstract D)class 4.下列选项中,用于实现接口的关键字是()。A)interfaceB)implementsC)abstract D)class 5.以下哪个接口的定义是正确的?
A)interface B{
void print(){ };
}
B)abstract interface B { void print();}
C)abstract interface B extends A1,A2 { abstract void print(){ };D)interface B { void print();} 6.定义一个接口时,下列哪个关键字用不到?
A)public B)extends C)interface D)class 7.在使用interface声明一个接口时,只可以使用哪个修饰符修饰该接口。
A)private B)protected C)private或者protected D)public 8.下列类头定义中,错误的是 ? A)public x extends y B)public class x extends y C)class x extends y implements y1 D)class x 9.下列叙述正确的是? A)Java中允许多重继承
B)Java一个类只能实现一个接口 C)Java中只能单重继承
D)Java中一个类可以继承多个抽象类
10.现有类A和接口B,以下描述中表示类A实现接口B的语句是()。
A.class A implements B B.class B implements A C.class A extends B D.class B extends A 二.填空题
1.接口中的所有属性均为__public____、___static___和__final_。2.接口中的方法均为_public__和_abstract_。
3.JAVA语言中,定义一个类A继承自父类B,并实现接口C的类头是___class A extends B implements C_______。
4.下面是定义一个接口ITF的程序,完成程序填空。public ___interface____ ITF { public static final double PI=Math.PI;public abstract double area(double a, double b)
} 5.定义一个接口CanSwim,类Swimmer实现接口CanSwim,完成程序填空。
publicinterfaceCanSwim { void swim();} class Swimmer implementsCanSwim {
} 三.编程题 public void swim(){ } 1.编写程序模拟“挑战杯”演讲大赛,共有10个评委打分,分数为1到10之间的随机数,将10个分数存放在int类型数组中,编程利用for循环实现计算歌手的最后得分。
2.利用接口继承完成对生物、动物、人三个接口的定义。其中生物接口定义呼吸抽象方法;动物接口除具备生物接口特征之外,还定义了吃饭和睡觉两个抽象方法;人接口除具备动物接口特征外,还定义了思维和学习两个抽象方法。定义一个学生类实现上述人接口。
第二篇:微机原理与接口技术习题答案10章
第10章 定时/计数器8253应用设计
1.试分析 8255A方式0、方式1和方式2的主要区别,并分别说明它们适合于什么应用场合。
答:方式0是基本的输入/输出,端口A、B、C都可以作为输入输出端口。适用于CPU与非智能I/O设备的数据传输;
方式1是有联络信号的输入/输出,端口A、B都可以设定成该方式,此时三个端口的信号线分成了A、B两组,PC7~PC4用作A组的联络信号,PC3~PC0用作B组的联络信号。适用于高速CPU与低速I/O设备的数据传输;
方式2是双向传输,只有A组端口可以设定成该方式,PC6~PC7用作输出的联络信号,PC4~PC5用作输入的联络信号,PC3用作中断请求信号。适用于双机之间数据的并行传送。
2.8255A的A组设置成方式1输入,与CPU之间采用中断方式联络,则产生中断请求信号INTRA的条件是 STBA=
,IBFA=
,INTEA=。
3.如果8255A的端口地址为300H~303H,A组和B组均为方式0,端口A为输出,端口B为输入,PC3~PC0为输入,PC7~PC4为输出,写出8255A的初始化程序段;编程实现将从端口C低4位读入的值从高4位送出。解: MOV DX,303H
MOV AL,10000011B OUT DX,AL MOV DX,302H IN AL,DX MOV CL,4 SHL AL,CL OUT DX,AL 4.在实际应用中经常需要检测设备的状态,并进行指示。在8086最小方式系统下,有一片8255A,其分配的端口地址为8F00H~8F07H中的奇地址,外部设备产生的状态有16个(K15~K0),要求采用4个发光二极管来指示开关量中“1”的个数。(1)画出8255A - 0 - 的连接图;(2)编写程序段实现连续检测并显示。解:(1)
8086D8~D158255D0~D7RDRDWRA2A1M/IOBHEA15A11A10A9A8A0A14A13A12A7A6A5A4A3PA0PA1......WRA1PA716位开关量(K15~K0)A0PB0PB1PB7......VCCCSPC3PC2PC1PC0
(2)MOV DX,8F07H
MOV AL,10010010B;端口A、B方式0输入,端口C方式0输出 OUT DX,AL NEXT:
L2:
MOV DX,8F03H;从端口B读取高8位开关量 IN AL,DX XCHG AL,AH MOV DX,8F01H;从端口A读取低8位开关量 IN AL,DX MOV BX,AX XOR AL,AL MOV CX,16 CLC SHL BX,1
- 1 -
L1:
JNC L1 INC AL LOOP L2 MOV DX,8F05H;从端口C送出 OUT DX,AL JMP NEXT;进行下一次检测
5.利用IBM PC系统机的总线槽,开发由一片8255A构成的子系统,8255A端口地址为260H~263H,编程实现产生如图10.20所示的8个信号(各个信号的节拍不必严格相等)。
Y0Y1Y7„
图10.20 要求产生的信号波形
解:8355A与IBM PC机总线的连接框图如下:
可将8255A的端口A作为要产生的信号的输出端口,设定为方式0输出,端口B和端口C不做使用,均设定为方式0输出。程序段如下:
MOV
DX,263H
;设定8255A的工作方式
- 2 -
MOV
AL,10000000B
OUT
DX,AL
MOV
DX,260H
;产生指定信号
XOR
AL,AL
OUT
DX,AL REP:
MOV
AL,80H
MOV
CX,7 REP1:
OUT
DX,AL
SAR
AL,1
LOOP REP1
MOV
CX,8 REP2:
SHL
AL,1
OUT
DX,AL
LOOP REP2
JMP
REP
6.在实际应用中,经常会遇到要求输入多个数据量,这时需要用到多路开关,如图10.21表示八选一的逻辑框图及其真值表。现有8组16位开关量数据(无符号数),要求通过一片8255A(端口地址为260H~263H)分时输入到CPU(8088最小方式系统)中,并找出它们中的最大值,并通过4个发光二极管指示其序号(灯亮表示“1”)。画出8255A的连接图,并编程实现。
解:由于开关量是16为数据,故可以将8255A的PA端与PB端设定为方式0,分别读取开关量的低八位和高八位,以PC低三位端口的控制八选一电路的输出依次从X0到X7,- 3 -
八选一x0x1x2x3x4x5x6x7ys0s1s2s2s1s00 0 00 0 10 1 00 1 11 0 01 0 11 1 01 1 1yx0x1x2x3x4x5x6x7图10.21 八选一逻辑电路使用PC端口的高八位输出最大开关量的序号(该序号为1~8),控制发光二极管的亮灭以码指示序号。连接图如下:
程序段如下:
MOV DX,263H
MOV AL,10011010B;设定工作方式,PA,PB均工作于方式0,PA、PB为输入,PC为输出
OUT
DX,AL
MOV
CX,8
XOR
BX,BX
MOV
SI,0
;SI表示输入开关量的序号 ST1:
MOV
DX,262H
OUT
DX,SI
MOV
DX,260H
;将开关量数据的低八位写入AL
IN
AL,DX
MOV
DX,261H
;将开关量数据的高八位写入AH
IN
AH,DX
- 4 -
CMP
BX,AX
JA
NEXT
MOV
BX,AX
;将当前最大值保存在BX中
INC
SI
PUSH
SI
;将当前最大值的序号压栈 NEXT:
INC
SI
LOOP
ST1
POP
SI
XOR
AX,AX
MOV
AX,SI
MOV
CL,4
ROL
AL,CL
MOV
DX,262H
OUT
DX,AL
;最大值的序号出栈
;将最大值的序号(4位)移至AL的高四位 的高四位输出最大值序号 - 5 -
;PC
第三篇:微机原理与接口技术习题答案2
第2章 8086 CPU结构与功能
1.微处理器内部结构由哪几部分组成?阐述各部分的主要功能。解:微处理器内部结构由四部分组成:
(1)算术逻辑运算单元ALU:完成所有的运算操作;
(2)工作寄存器:暂存寻址信息和计算过程中的中间结果;
(3)控制器:完成指令的读入、寄存和译码,并产生控制信号序列使ALU完成指定操作;
(4)I/O控制逻辑:处理I/O操作。
2.微处理器级总线有哪几类?各类总线有什么作用? 解:微处理器级总线有三类:
(1)数据总线:传送信息;
(2)地址总线:传送地址码;
(3)控制总线 传送控制信号。
3.为什么地址总线是单向的,而数据总线是双向的?
解:地址码只能由CPU生成。而数据需要在CPU和存储器之间传输。4.8086/8088微处理器内部有哪些寄存器?其主要作用是什么?
解:8086CPU内部有14个16位寄存器,其中8个通用寄存器(4数据寄存器AX、BX、CX、DX,4地址指针/变址寄存器SI、DI、SP、BP),4个段寄存器(CS、DS、ES、SS),2个控制寄存器(指令指针IP,微处理器状态字PSW)。
应该注意的是:可以在指令中用作为地址指针的寄存器有:SI、DI、BP和BX;在微处理器状态字PSW中,一共设定了9个标志位,其中6个标志位用于反映ALU前一次操作的结果状态(CF,PF,AF,ZF,SF,OF),另3个标志位用于控制CPU操作(DF,IF,TF)。
5.如果某微处理器有20条地址总线和16条数据总线:
(1)假定存储器地址空间与I/O地址空间是分开的,则存储器地址空间有多大?
(2)数据总线上传送的有符号整数的范围有多大? 解:(1)存储器地址空间为:2201MB
1(2)有符号数范围为: 2~21,即 -32768~32767 6.将十六进制数62A0H与下列各数相加,求出其结果及标志位CF、AF、SF、ZF、OF
15和PF的值:
(1)
1234H;(2)
4321H;(3)
CFA0H;(4)
9D60H 解:(1)
74D4H
CF=0 AF=0 SF=0 ZF=0 OF=0 PF=1
(2)
A5C1H CF=0 AF=0 SF=1 ZF=0 OF=1 PF=0
(3)
3240H
CF=1 AF=0 SF=0 ZF=0 OF=0 PF=0
(4)
0000H
CF=1 AF=0 SF=0 ZF=1 OF=0 PF=1 7.从下列各数中减去4AE0H,求出其结果及标志位CF、AF、SF、ZF、OF和PF的值:
(1)1234H;(2)5D90H;(3)9090H;(4)EA04H 解:(1)
C754H
CF=1 AF=0 SF=1 ZF=0 OF=0 PF=0(2)
12B0H
CF=0 AF=0 SF=0 ZF=0 OF=0 PF=0(3)
45B0H
CF=0 AF=0 SF=0 ZF=0 OF=1 PF=0
(4)
9F24H
CF=0 AF=0 SF=1 ZF=0 OF=0 PF=1 9.写出下列存储器地址的段地址、偏移地址和物理地址:(1)2134:10A0;(2)1FA0:0A1F;(3)267A:B876 解:物理地址=段地址*10H+偏移地址
(1)段地址:2134H,偏移地址:10A0H,物理地址:223E0H(2)段地址:1FA0H,偏移地址:0A1FH,物理地址:2041FH(3)段地址:267AH,偏移地址:B876H,物理地址:32016H 10.给定一个数据的有效地址为2359H,并且(DS)=490BH,求该数据的物理地址。解:物理地址=段地址*10H+偏移地址
物理地址=490BH +2359H = 4B409H 11.如果在一个程序段开始执行之前,(CS)=0A7F0H,(IP)=2B40H,求该程序段的第一个字的物理地址。
解:物理地址=段地址*10H+偏移地址
物理地址=CS*10H+IP = AAA40H 12.IBM PC有哪些寄存器可用来指示存储器的地址? 解:变址寄存器SI,DI,堆栈指针SP,BP,另外还有BX。
第四篇:微机原理与接口技术习题答案4
第4章 汇编语言程序设计
1.已知在BUF的起始处保存有N个字符的ASCII码,编写汇编语言程序实现,将这组字符串传送到缓冲区BUFR中,并且使字符串的顺序与原来的顺序相反。解:BUF
BUFR
MOV CX, N LEA SI, BUF LEA DI, BUFR ADD DI,CX DEC DI L1: MOV AL,[SI] MOV [DI],AL INC SI DEC DI LOOP L1
2.利用移位、传送和相加指令实现AX的内容扩大10倍。
解:将扩大后的结果放在DX:AX中,注意到10×AX=8×AX+2×AX。XOR SHL RCL DX,DX AX, 1 DX, 1 DB “BONJOUR_BELLE” DB 100 DUP(?)MOV BX,AX MOV SHL RCL SHL RCL CX,DX AX, 1 DX, 1 AX, 1 DX, 1 ADD ADC AX, BX DX, CX 3.在缓冲区VAR中连续存放着3个16位的无符号数,编写程序实现将其按递增关系排列;如果VAR中保存的为有符号数,则再编写程序实现将其按递减关系排列。解:VAR DW 1236,-432,3900 XOR SI,SI MOV AX,VAR[SI] CMP AX, VAR[SI+2] JAE L1 XCHG AX, VAR[SI+2] L1:
CMP AX, VAR[SI+4] JAE L2 XCHG AX, VAR[SI+4] L2: MOV VAR[SI], AX MOV AX,VAR[SI+2] CMP AX, VAR[SI+4] JAE L3 XCHG AX, VAR[SI+4] L3:
MOV VAR[SI+2], AX 4.编写程序段实现将AL和BL中的每一位依次交叉,得到的16位字保存在DX中,例如(AL)=01100101B,(BL)=11011010B,则得到的(DX)=10110110 10011001B。解:利用移位指令完成。
L1: SHR AL,1 RCR DX,1 XOR DX,DX MOV CX,8
SHR BL,1 RCR DX,1 LOOP L1 5.在变量VAR1和VAR2中分别保存有两个字节型的正整数,编写完整的汇编语言程序实现:
(1)当两数中有一个奇数时,将奇数存入VAR1,偶数存入VAR2;
(2)当两数均为奇数时,两个变量的内容不变;(3)当两数均为偶数时,两数缩小一倍后存入原处。
解:当VAR1为奇数时,不论VAR2的奇偶性,这两个单元的内容均不变;只有当VAR1为偶数时,如果VAR2为奇数,则VAR1与VAR2内容交换;如果VAR2为偶数,则两数缩小一倍后存入原处。DATA SEGMENT
VAR1
DB 28
VAR2 DB 36 DATA ENDS CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES:DATA START: MOV AX, DATA MOV DS,AX MOV ES, AX MOV AL,VAR1 MOV BL,VAR2 TEST AL,1 JZ EVEN1 JMP OVER
EVEN1:
TEST BL,1
JZ
EVEN2
MOV VAR1,BL MOV JMP VAR2,AL OVER EVEN2:
SHR MOV SHR MOV AL,1 VAR1,AL BL,1 VAR2,BL
OVER:
MOV AH,4CH MOV AL,0 INT ENDS END START 21H CODE
6.已知在字变量VAR1、VAR2和VAR3中保存有3个相同的代码,但有一个错码,编写程序段找出这个错码,并将它送到AX,其地址送SI;如果3个代码都相同,则在AX中置-1标志。解:在数据段中定义:
VAR1 DW 5A34H VAR2 DW 5A35H VAR3 DW 3A34H
在代码段中编写程序段:
MOV AX,-1 MOV BX,VAR1 CMP BX,VAR2 JZ
L2 CMP BX,VAR3 JZ
L1 MOV AX,BX LEA SI,VAR1 JMP OVER L1: MOV AX,VAR2 LEA SI,VAR2 JMP OVER L2: CMP BX,VAR3 JZ
OVER MOV AX,VAR3 LEA SI,VAR3 OVER: 7.分析下列程序段的功能:
MOV CL,04 SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL 解:程序段完成DX:AX组成的32位无符号数左移4位,低位补零(也即除以16)。8.下列程序段执行后,求BX寄存器的内容:
MOV CL,3 MOV BX,0B7H ROL BX,1 ROR BX,CL 解:实际上完成BX内容循环右移2位,因此,BX寄存器的内容为C02DH。9.下列程序段执行后,求BX寄存器的内容:
MOV CL,5 MOV BX,7D5CH SHR BX,CL 解:完成BX内容逻辑右移5位,因此,BX寄存器的内容为03EAH。10.将BUFFERS中N个字按相反顺序传递到BUFFERT中。解:
LEA SI,BUFFERS LEA DI,BUFFERT MOV CX,N ADD DI,N ADD DI,N SUB DI,2 L1: MOV AX,[SI] MOV [DI],AX ADD SI,2 SUB DI,2 LOOP L1 11.数组ARRAY中存放有一组字型数据,前两个字节存放数据长度(5的倍数)。为给这个数组中的数据进行加密保护,每5个数据取出一个数据进行加密处理:奇数位进行取反,偶数位不变,例如对数据0110 1100 1011 0001B加密后变成1100 0110 0001 1011B,编写加密程序encrpytion 和解密程序 unencrpytion。
解:约定从第一个数据开始,每5个数据为一组,每组中的第一个数据采取加密/解密处理。由于加密算法采用的是取反操作,解密算法也采用取反操作,因此解密和解密算法是同一个程序。
ENCRPYTION PROC NEAR LEA SI,ARRAY
XOR DX,DX
MOV AX,[SI]
MOV BX,5
DIV BX
MOV CX, AX
ADD SI, 2 L1:
MOV AX, [SI]
XOR AX,0AAAAH
MOV [SI], AX
ADD SI,10
LOOP L1
RET ENCRPYTION ENDP
13.设BUF中存放有N个无符号数(或有符号数),编程实现求它们的最小值(存入AX)和最大值(存入DX)。
解:BUF存放有N个无符号数的程序如下: MOV CX,N-1 LEA SI,BUF MOV AX,[SI] MOV DX,AX ADD SI,2 L1: CMP AX,[SI] JBE NOCHG1 XCHG AX,[SI] NOCHG1: CMP DX,[SI] JAE NOCHG2 XCHG DX,[SI] NOCHG2: ADD SI,2 LOOP L1 如果BUF中存放的是有符号数,则只需要将程序中的两行内容修改:
JBE NOCHG1 JAE NOCHG2
改成:JLE NOCHG1 改成:JGE NOCHG2
14.设BUFFER中存放有N个无符号(第1个字节存放缓冲区的长度),编程实现将其中的0元素抹去,并更新其长度。
解:设BUFFER中存放的是字节型数据。采用双指针方法:SI为读指针,DI为写指针,从低地址开始,内存中读出一个字节,如果不为0,则写入内存;如果为0,则不进行写操作。
LEA SI, BUFFER XOR CX,CX MOV CL, [SI] INC SI MOV DI, SI XOR BH,BH XOR AL,AL L1: CMP [SI],AL JZ L2 MOV BL,[SI] MOV [DI],BL INC DI INC BH L2: INC SI LOOP L1 MOV BUFFER,BH 16.编写一个子程序实现统计AL中1的个数,然后检测出字节型缓冲区BUF中0和1个数相等的元素个数。
解:统计AL中1的个数,只需将AL右移,移出的一位内容进行累加,子程序为: COUNTBYTE PROC NEAR
PUSH AX
PUSH CX
MOV CX,8
XOR BL,BL COU1:
SHR AL,1
ADC BL,0
LOOP COU1
POP CX
POP AX
RET COUNTBYTE ENDP 在此基础上,可以检测出字节型缓冲区BUF中0和1个数相等的元素个数,即一个字节中有4个1。设BUF中有N个字节型数据,结果保持在BH中。
MOV CX,N LEA SI, BUF XOR BH,BH L1: MOV AL,[SI] CALL COUNTBYTE CMP BL,4 JNZ L2 INC BH L2: INC SI LOOP L1
19.在缓冲区BUFFER中,第1个字节存放数组的长度(<256),从第2个字节开始存放字符的ASCII码,编写子程序完成在最高位给字符加上偶校验。解:STACK SEGMENT STACK 'STACK'
DW 100H DUP(?)
TOP LABEL BYTE STACK ENDS
DATA SEGMENT BUFFER DB 3
DB 'ABC'
DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA DI,BUFFER
XOR CX,CX
MOV CL,[DI]
INC DI
CALL SETEVEN
MOV AH,4CH
MOV AL,0
INT 21H SETEVEN
PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DI SETEVEN1:
MOV AL,[DI]
CALL COUNTBYTE
;加偶校验子程序
;返回DOS;首字节为字符串长度;字符串
AND BL,01H
JZ SETEVEN2
OR AL,80H
MOV [DI],AL SETEVEN2:
INC DI
LOOP SETEVEN1
POP DI
POP CX
POP BX
POP AX
RET SETEVEN
ENDP COUNTBYTE PROC NEAR
PUSH AX
PUSH CX
MOV CX,8
XOR BL,BL COU1:
SHR AL,1
ADC BL,0
LOOP COU1
POP CX
POP AX
RET COUNTBYTE ENDP CODE ENDS
END START 20.编写程序完成求多位数(N个字)的绝对值。21.已知斐波那契数列的定义为:F1数列前n项的子程序。
1,F21,FiFi1Fi2(i3),编写求该解:设奖斐波那契数列存放在字变量RESULT中。在数据段中定义
RESULT DW 100H DUP(?)
在代码段中编写子程序 FIBONACCI PROC NEAR
XOR DI,DI
MOV RESULT[DI],1
;前两个数为1
MOV RESULT[DI+2],1
ADD DI,4
MOV CX,N L1:
MOV AX, RESULT[DI-4]
ADD AX, RESULT[DI-2]
MOV RESULT[DI],AX
ADD DI,2
LOOP L1
RET FIBONACCI ENDP
22.编写程序实现循环显示10条信息,保存每条信息的变量分别为INFOM1~INFORM10。解:在数据段中定义变量:
TABLE DW INFORM1, INFORM2, INFORM3, INFORM4, INFORM5
DW INFORM6, INFORM7, INFORM8, INFORM9, INFORM10 在代码段中编写程序段:
MOV XOR MOV MOV CX,10 SI,SI DX,TABLE[SI] AH,9 L1:
INT ADD CALL LOOP 21H SI,2 WAIT L1 这里,WAIT为延时子程序,用于在显示信息之间的停顿。
23.编写程序实现将包含20个数据的数组ARRAY分成两个数组:正数数组ARRAYP和负数数组ARRAYN,并分别将这两个数组中数据的个数显示出来。
解:先编写一个子程序DISPALD,完成以3位十进制数形式显示出AL的内容。
DISPALD PROC NEAR PUSH AX PUSH CX PUSH DX XOR AH,AH MOV CL,100 DIV CL PUSH AX MOV DL,30H ADD DL,AL MOV AH,2 INT 21H POP AX MOV AL,AH XOR AH,AH MOV CL,10 DIV CL PUSH AX MOV DL,30H ADD DL,AL MOV AH,2 INT 21H POP AX MOV DL,30H ADD DL,AH MOV AH,2 INT 21H POP DX POP CX POP AX RET DISPALD ENDP
在此基础上,根据题目要求,需要用到3个指针:SI指向源数组ARRAY,DI指向正数数组ARRAYP,BX指向负数数组ARRAYN。
MOV XOR LEA LEA LEA MOV AND JS MOV INC INC JMP MOV INC INC INC CX,20 DX,DX SI,ARRAY DI,ARRAYP BX,ARRAYN AL,[SI] AL,AL L2 [DI],AL DI DL L3 [BX],AL BX DH SI L1:
L2:
L3:
LOOP MOV CALL MOV CALL L1 AL,DL DISPALD AL,DH DISPALD 24.编写程序实现求缓冲区BUFFER的100个字中的最小偶数(存入AX)。解:设BUFFER中存放的是有符号数。
L1:
L2: MOV CX,100 LEA SI,BUFFER MOV AX, 7FFFH AND WORD PTR [SI],1 JNZ L2 CMP [SI],AX JGE L2 MOV AX,[SI] ADD SI,2 LOOP L1
225.编写程序实现求级数1解:BL用于存放项数。
22n2的前n项和刚大于2000的项数n。
STACK SEGMENT STACK 'STACK'
DW 100H DUP(?)TOP LABEL WORD STACK ENDS DATA SEGMENT
DB 100H DUP(?)DATA ENDS CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
MOV BL,1
MOV CX,0 COUNT:
MOV AL, BL
MUL BL
ADD CX,AX
CMP CX,2000
JA EXIT
INC BL
JMP COUNT EXIT:
26.定义一条宏指令,实现将指定数据段的段地址传送到段寄存器ES或DS的功能。解:
27.定义一条宏指令,实现从键盘中输入一个字符串(利用INT 21H的09号功能)。28.定义一条宏指令,实现在屏幕上输出回车、换行。29.利用其它指令完成与下列指令一样的功能:
(1)REP MOVSB;
(3)REP STOSB;
解:设DF=0(1)
L1: MOV AL,[SI]
MOV ES:[DI],AL INC INC SI DI
(2)REP LODSB;(4)REP SCASB。
LOOP L1(2)
L1: MOV AL,[SI] INC SI LOOP L1(3)
L1: MOV ES:[DI],AL
INC DI LOOP L1(4)
L1: MOV AL,[SI]
CMP AL,ES:[DI] INC INC SI DI LOOP L1 30.设在数据段中定义了:
STR1 DB ‘ASSEMBLE LANGUAGE’ STR2 DB 20 DUP(?)利用字符串指令编写程序段实现:
(1)从左到右将STR1中的字符串传送到STR2;(2)从右到左将STR1中的字符串传送到STR2;(3)将STR1中的第6个和第7个字节装入DX;
(4)扫描STR1字符串中有无空格,如有则将第一个空格符的地址传送到SI。解: STR1中有17个字符(含一个空格),设DS和ES均指向STR1和STR2所在的段。(1)
CLD MOV LEA LEA REP MOV LEA LEA CX,17 SI,STR1 DI,STR2 MOVSB CX,17 SI,STR1 DI,STR2(2)
ADD DEC MOV MOV DEC INC LOOP LEA MOV MOV LEA MOV CMP JZ INC LOOP SI,CX SI AL,[SI] [DI],AL SI DI L1 SI,STR1 DX,[SI+6] CX,17 SI,STR1 AL,20H [SI], AL L2 SI L1 L1:
(3)
(4)
L1:
L2:
31.设在数据段中定义了:
STRING DB ‘Today is Sunday & July 16, 2000’
编写程序实现将STRING中的’&’用’/’代替。解:STRING中保存了30个字符。
MOV LEA MOV CMP JNZ MOV INC LOOP CX,30 SI,STRING AL,’&’ [SI],AL L2 BYTE PTR [SI],’/’ SI L1 L1:
L2:
32.分析下列程序段完成的功能:
MOV CX,100 LEA SI,FIRST LEA DI,SECOND REP MOVSB 解:将缓冲区FIRST中100个字节传送到SECOND中。33.分析下列程序段:
LEA DI,STRING MOV CX,200 CLD MOV AL,20H REPZ SCASB JNZ FOUND JMP NOT_FOUND 问:转移到FOUND的条件。
解:在缓冲区STRING中搜索非空格字符,如果有非空格则转到FOUND,如果200个单元中都是空格,则转到NOT_FOUND。
34.设在数据段的变量OLDS和NEWS中保存有5个字节的字符串,如果OLDS字符串不同于NEWS字符串,则执行NEW_LESS,否则顺序执行程序。解:设DS和ES均指向字符串OLDS和NEWS所在的段。CLD MOV
35.编程实现将STRING字符串中的小写字母变换成大写字母。解:设STRING中的字符个数为N。
LEA LEA REPZ JNZ CX,5 SI,OLDS DI,NEWS CMPSB NEW_LESS
MOV LEA MOV AND INC CX,N SI,STRING AL,5FH [SI],AL SI L1:
LOOP L1 36.设在数据段中定义了:
STUDENT_NAME DB 30 DUP(?)STUDENT_ADDR DB 9 DUP(?)STUDENT_PRINT DB 50 DUP(?)编写程序实现:
用空格符清除缓冲区STUDENT_PRINT; 在STUDENT_ADDR中查找第一个’_’字符; 在STUDENT_ADDR中查找最后一个’_’字符;
如果STUDENT_NAME中全为空格符,则STUDENT_PRINT全存入’*’;
将STUDENT_NAME传送到STUDENT_PRINT的前30个字节中,将STUDENT_ADDR传送到STUDENT_PRINT的后9个字节中。
37.(上机题)编写程序实现,将缓冲区BUFFER中的100个字按递增排序,并按下列格式顺序显示:
数据1 <原序号> 数据2 <原序号> „„
38.(上机题)按同余法产生一组随机数N(1 Total <总人数> A: <人数1> B: <人数2> C: <人数3> D: <人数4> E: <人数5> F: <人数6> 39.(上机题)编写程序实现下列5项功能,通过从键盘输入1~5进行菜单式选择: (1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),变换后按下列格式在屏幕上显示: <原字符串>例如:abcdgyt0092 <新字符串> ABCDGYT0092 按任一键重做;按Esc键返回主菜单。 (2)按数字键“2”,完成在字符串中找最大值。用户输入由英文大小写字母或数字 0~9组成的字符串(以回车结束),找出最大值后按下列格式在屏幕上显示: <原字符串> The maximum is <最大值>. 按任一键重做;按Esc键返回主菜单。 (3)按数字键“3”,完成输入数据组的排序。用户输入一组十进制数值(小于255),然后变换成十六进制数,并按递增方式进行排序,按下列格式在屏幕上显示: <原数值串> <新数值串> 按任一键重做;按Esc键返回主菜单。 (4)按数字键“4”,完成时间的显示。首先提示用户对时,即改变系统的定时器 HH:MM:SS(以冒号间隔,回车结束),然后在屏幕的右上角实时显示出时 间:HH:MM:SS。 按任一键重新对时;按Esc键返回主菜单。 (5)按数字键“5”,结束程序的运行,返回操作系统。解: ※主程序的编程思路: 此程序共5个功能,可采用跳转表法来实现多路分支结构程序设计。现将这5个程序段,各程序段的首地址分别标号为G1,G2,G3,G4,G5。将5个程序段的入口地址做成表TABLE放入数据段,程序根据给定的参数计算出欲转入的程序段的首地址在TABLE中的位置后,取出该地址,跳转至该程序段。 首先,通过调用子程序MENU,设置显示器,并输出提示文档。接着,读取‘1’-‘5’之间的ASCII表示数。然后,通过跳转表TABLE实现由输入参数转入相应的程序段。由于表中按“字”存放数据,则每个数据的位移量是:0、2、4、6、8。对于输入参数N,计算位移量的公式是N=(N-1)*2。 当输入‘1’时,跳转到标号G1。调用子程序CHGLTR,完成将输入字符串中的小写字母变换成大写字母。用户按键,若为ESC,则转到主程序段首调用MENU,否则,转到标号G1; 当输入‘2’时,跳转到标号G2。调用子程序MAXLTR,完成在输入字符串中找最大值。用户按键,若为ESC,则转到主程序段首调用MENU,否则,转到标号G2; 当输入‘3’时,跳转到标号G3。调用子程序SORTNUM,完成输入数据组的排序。用户按键,若为ESC,则转到主程序段首调用MENU,否则,转到标号G3。 当输入‘4’时,跳转到标号G4。调用子程序TIMCHK,完成时间的显示。用户按键,若为ESC,则转到主程序段首调用MENU,否则,转到标号G4。 当输入‘5’时,跳转到标号G5。结束程序的运行,返回操作系统。其流程框图见图3-1。 第1章 1.1 微处理器、微型计算机和微型计算机系统三者之间有什么不同? 解: 把CPU(运算器和控制器)用大规模集成电路技术做在一个芯片上,即为微 处理器。微处理器加上一定数量的存储器和外部设备(或外部设备的接口)构成了 微型计算机。微型计算机与管理、维护计算机硬件以及支持应用的软件相结合就形 成了微型计算机系统。 1.2 CPU在内部结构上由哪几部分组成?CPU应该具备哪些主要功能? 解: CPU主要由起运算器作用的算术逻辑单元、起控制器作用的指令寄存器、指 令译码器、可编程逻辑阵列和标志寄存器等一些寄存器组成。其主要功能是进行算 术和逻辑运算以及控制计算机按照程序的规定自动运行。 1.3微型计算机采用总线结构有什么优点? 解: 采用总线结构,扩大了数据传送的灵活性、减少了连线。而且总线可以标准 化,易于兼容和工业化生产。 1.4数据总线和地址总线在结构上有什么不同之处?如果一个系统的数据和地址合用 一套总线或者合用部分总线,那么要靠什么来区分地址和数据? 解: 数据总线是双向的(数据既可以读也可以写),而地址总线是单向的。 8086CPU为了减少芯片的引脚数量,采用数据与地址线复用,既作数据总线也作为 地址总线。它们主要靠信号的时序来区分。通常在读写数据时,总是先输出地址 (指定要读或写数据的单元),过一段时间再读或写数据。 1.8在给定的模型中,写出用累加器的办法实现15×15的程序。 DEC H JP NZ,LOOP HALT 第 2章 作业 答案 2.1 IA-32结构微处理器直至Pentillm4,有哪几种? 解:80386、30486、Pentium、Pentium Pro、PeruiumII、PentiumIII、Pentium4。 2.6IA-32结构微处理器有哪几种操作模式? 解: IA一32结构支持3种操作模式:保护模式、实地址模式和系统管理模式。操 作模式确定哪些指令和结构特性是可以访问的。 2.8IA-32结构微处理器的地址空间如何形成? 解: 由段寄存器确定的段基地址与各种寻址方式确定的有效地址相加形成了线性地 址。若末启用分页机制,线性地址即为物理地址;若启用分页机制,则它把线性地 址转为物理地址。 2.15 8086微处理器的总线接口部件由哪几部分组成? 解: 8086微处理器中的总线接口单元(BIU)负责CPU与存储器之间的信息传 送。具体地说,BIU既负责从内存的指定部分取出指令,送至指令队列中排队 (8086的指令队列有6个字节,而8088的指令队列只有4个字节);也负责传送执 行指令时所需的操作数。执行单元(EU)负责执行指令规定的操作。 2.16段寄存器CS=120OH,指令指针寄存器IP=FFOOH,此时,指令的物理地址为 多少? 解: 指令的物理地址=12000H+FFOOH=21FOOH 第3章 作 业答案 3.1分别指出下列指令中的源操作数和目的操作数的寻址方式。 (1)MOV SI, 30O (2)MOV CX, DATA[DI] (3)ADD AX, [BX][SI] (4)AND AX, CX (5)MOV[BP], AX (6)PUSHF 解: (l)源操作数为立即寻址,目的操作数为寄存器寻址。 (2)源操作数为变址寄存器加位移量寻址,目的操作数为寄存器寻址。 (3)源操作数为基址加变址寻址,目的操作数为寄存器寻址。 (4)源操作数和目的操作数都为寄存器寻址。 (5)源操作数为寄存器寻址,目的操作数为寄存器间接寻址。 (6)为堆栈操作。 3.2试述指令MOVAX,2000H和MOV AX,DSz[2000H]的区别。 解:前一条指令是立即寻址,即把立即数2000H传送至寄存器AX。后一条指令 是直接寻址,是把数据(DS)段中的地址为200OH单元的内容传送至寄存器AX。 3.3写出以下指令中内存操作数的所在地址。 (1)MOV AL, [BX+10] (2)MOV [BP+10], AX (3)INC BYTEPTR[SI十5] (4)MOV DL, ES:[BX+SI] (5)MOV BX,[BP+DI+2] 解: (1)数据段BX+10单元。 (2)堆栈段BP+10单元。 (3)数据段SI+5字节单元。 (4)附加段(ES段)BX+SI单元。 (5)堆栈段BP+DI+2单元。 3.4判断下列指令书写是否正确。 (1)MOV AL, BX (2)MOV AL, CL (3)INC [BX] (4)MOV 5, AL (5)MOV [BX],[SI] (6)M0V BL, OF5H (7)MOV DX, 2000H (8)POP CS (9)PUSH CS 解: (l)不正确,AL与BX数据宽度不同。 (2)正确。 (3)不正确,因为不明确是增量字节还是字。 (4)不正确,立即数不能作为目的操作数。 (5)不正确,因为不明确要传送的是字节还是字。 (6)正确。 (7)正确。 (8)不正确,CS不能作为:pop指令的操作数。 (9)不正确,CS不能作为PUSH指令的操作数。 3.5设堆钱指针SP的初值为1000H,AX=2000H,BX=3000H,试问: (1)执行指令PUSHAX后SP的值是多少? (2)再执行PUSHBX及POPAX后,SP、AX和BX的值各是多少? 解: (1)SP=OFFEH。 (2)SP=OFFEH;AX=3000H,BX=3000H。 3.6要想完成把[3000H]送[2000H]中,用指令: MOM[200OH],[300OH] 是否正确?如果不正确,应该用什么方法实现? 解:不正确。 正确的方法是: MOV AL, [300OH] MOV [2000H],AL 3.7假如想从200中减去AL中的内容,用SUB200,AL是否正确?如果不正确,应该 用什么方法? 解:不正确。 正确的方法是: MOV BL, 200 SUB BL,AL 3.8试用两种方法写出从8OH端口读入信息的指令。再用两种方法写出从4OH口输 出10OH的指令。 解: (1)IN AL, 80H (2)MOV DX,8OH IN AL, DX (3)MOV,AL,lOOH OUT40H,AL 4)MOV AL,10OH MOV DX,4OH OUT DX,AL 3.9假如:AL=20H,BL=1OH,当执行CMPAL,BL后,问: (1)AL、BL中的内容是两个无符号数,比较结果如何?影响哪儿个标志位? (2)AL、BL中的内容是两个有符号数,结果又如何,影响哪几个标志位? 解: (l)AL=2OH,BL=1OH,O=0,S=0,Z=0,A=0,P=0,C=0。 (2)因为两个都是符号正数,其结果与(l)相同。 3.10若要使AL×10,有哪几种方法,试编写出各自的程序段? 解: (1)使用乘法指令: MOVBL,10 MULBI,(2)使用移位指令: SHLAL,1 MOVBL,AL SHLAL,2 ADDAL,BL (3)使用加法指令: ADDAL,AL MOVBL,AL ADDAL,AL ADDAL,AL ADDAL,BL 3.118086汇编语言指令的寻址方式有哪几类?哪种寻址方式的指令执行速度最快? 解:寻址方式分为:立即数寻址方式、寄存器操作数寻址方式和存储器操作数寻 址方式。其中,寄存器操作数寻址方式的指令执行速度最快。 3.12在直接寻址方式中,一般只指出操作数的偏移地址,那么,段地址如何确定?如 果要用某个段寄存器指出段地址,指令中应该如何表示? 解: 默认的数据访问,操作数在DS段;堆栈操作在SS段;串操作源操作数(SI)在DS段, 目的操作数(DI)在ES段;用BP作为指针在SS段。如果要显式地指定段地址,则在操 作数中规定段寄存器。例如: MOVAX,ES:(BX+10H) 3.13在寄存器间接寻址方式中,如果指令中没有具体指明段寄存器,那么如何确定 段地址? 解: 在寄存器间接寻址方式中,如果指令中没有具体指明段寄存器,段地址是 隐含约定的,也就是隐含地选择段寄存器。如操作类型为指令,则指定代码段寄 存器CS,如操作类型为堆栈操作,则指定堆找段寄存器SS,…,如表3-1中所示。 当需要超越约定时,通常用段替代前缀加冒号“:”来表示段超越,它允许程序设 计者偏离任何约定的段。 例如: MOV ES:〔BX],AX 这时数据将从寄存器EAX传送至附加段中由EBX寻址的存储单元,而不是传送 到数据段中。 3.14采用寄存器间接寻址方式时,BX、BP、SI、DI分别针对什么情况来使用?这4个 寄存器组合间接寻址时,地址是怎样计算的?请举例说明。 解: 在寄存器间接寻址方式下,BX和BP作为间址寄存器使用,而SI、DI作为 变址寄存器使用。除BP间址默认的段为堆栈段,其他的都默认为数据段。它们 都可以单独使用,或加上偏移量或组合使用。如: [BX+n] LBP+n] [SI+n] [DI+n] [BX+SI+n] [BX+DI+n] [BP+SI+n] [BP+DI+n] 3.15设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下面两条指令所进行的具体操作: MOVBYTEPTR[BP],200 MOVWORDPTR[BX],2000 解:前一条指令是把立即数(应是字节)200,传送至堆栈段(BP的默认段〉偏移 量由BP规定的字节单元,地址为:52000H+620OH=58200H 第二条指令是把立即数.2000,传送至数据段(BX的默认段)偏移量由BX规定的字单元,地址为:21000H+1400H=22400H。 3.16使用堆钱操作指令时要注意什么问题?传送指令和交换指令在涉及内存操作数 时应该分别要注意什么问题? 解:使用堆栈指令可以把内存单元作为一个操作数(从内存到内存)。但堆栈 固定在堆栈段且只能由SP指向。且堆栈操作要修改堆核指针。MOV指令不能实 现内存单元间的数据传送。XCHG指令是交换,有一个操作数必须是寄存器。 3.17下面这些指令中哪些是正确的?哪些是错误的?若是错误的,请说明原因。 (1)XCHG CS, AX (2)MOV[BX], [1000] (3)XCHGBX, IP (4)PUSHCS (5)POP CS (6)IN BX, DX (7)MOVBYTE[BX],100O (8)MOVCS,[1000] 解: (l)错误,CS不能交换。 (2)错误,MOV指令不能在内存间传送。 (3)错误,IP不能交换。 (4)错误,CS可以作为PUSH指令的操作数。 (5)错误,CS可以作为POP指令的操作数。 (6)错误,IN指令的目的操作数是累加器。 (7)错误,目的操作数是字节单元。 (8〉错误,CS不能作为MOV指令的目的操作数。 3.18 以下是格雷码的编码表,O 0000 0001 0011 0010 0110 0111 0101 0100 1100 请用换码指令和其他指令设计一个程序段,以实现由格雷码向ASCII码的转换。 解: MOVBX,TABLE MOVSI,ASCII_TAB MOVAL,0 MOVCX,10 TRAN:XLATTABLE MOVDL,AL ADDDL,30H MOV[SI],DL INCAL LOOPTRAN 3.19使用乘法指令时,特别要注意先判断是用有符号数乘法指令还是用无符号数乘 法指令,这是为什么? 解:因为有符号数和无符号数,其数的乘法是一样的。但结果的符号取决于两 个操作数的符号。 3.20字节扩展指令和字扩展指令一般用在什么场合?举例说明。 解:主要用于字节相除和字相除之前,把被除数扩展为两倍宽度的操作数。 3.21 什么叫BCD码?什么叫组合的BCD码?什么叫非组合的BCD码?8086汇编语言在对 BCD码进行加、减、乘、除运算时,采用什么方法? 解:BCD码为十进制编码的二进制数。组合的BCD数是把两位BCD加在一个字节 中,高位的在高4位。非组合的BCD码是把一位BCD数放在一个字节的低4位,高4位 为0。8086在BCD加、减和乘法运算以后用BCD调整指令把结果调整为正确的BCD 数。在BCD除法之前先用BCD调整指令再做除法.3.22用普通运算指令执行BCD码运算时,为什么要进行十进制调整?具体地讲,在 进行BCD码的加、减、乘、除运算时,程序段的什么位置必须加上十进制调整 指令? 解:因为8086指令把操作数作为二进制数进行二进制运算,要得到正确的BCD结 果,需要进行调整。在加、减、乘法指令之后加上BCD调整指令,而在除法指令 之前先用BCD调整指令再用除法指令。 第4章 作业答案 4.1在下列程序运行后,给相应的寄存器及存储单元填入运行的结果: MOV AL, 1OH MOV CX, 100OH MOV BX, 2000H MOV [CX],AL XCHGCX,BX MOV DH, [BX] MOV DL, 01H XCHGCX, BX MOV [BX],DL HLT 解:寄存器及存储单元的内容如下: AL=1OH BL=OOH BH=2OH CL=OOH CH=1OH DH=1OH (10O0H)=lOH (200OH)=0lH 2.要求同题4.1,程序如下: MOV AL, 50H MOV BP, 100OH MOV BX, 200OH MOV[BP],AL MOV DH, 20H MOV[BX],DH MOV DL, OlH MOV DL, [BX] MOV CX, 300OH HLT 解:寄存器及存储单元的内容如下: AL=5OH BL=OOH BH=20H CL=OOH CH=30H DL=20H DH=2OH BP=100OH (10OOH)=5OH (20OOH)=20H 4.3自1000H单元开始有一个100个数的数据块,若要把它传送到自200OH开始的存 储区中去,可以采用以下3种方法实现,试分别编制程序以实现数据块的传送。 (l)不用数据块传送指令 (2)用单个传送的数据块传送指令 (3)用数据块成组传送指令。 解: (1) LEA SI, 1OOOH LEA DI, 200OH MOV CX, 100 L1: MOV AX, [SI] MOV[DI],AX LOOPLl HLT (2) LEASI,100OH LEADI,2000H MOVCX,100 CLD L1: MOVSB LOOP L1 HLT (3) LEASI, 100OH LEADI, 200OH MOVCX, 100 CLD REP MOVSB HLT 4.4 利用变址寄存器,编写一个程序,把自1000H单元开始的100个数传送到自1070H 开始的存储区中去。 解: LEASI,100OH LEADI,1070H MOVCX,100 CLD REP MOVSB HLT 4.5要求同题4.4,源地址为2050H,目的地址为2000H,数据块长度为50.解: LEASI,205OH LEADI,200OH MOVCX,50 CLD REPMOVSB HLT 4.6编写一个程序,把自100OH单元开始的100个数传送'至105OH开始的存储区中 (注意:数据区有重叠)。 解: LEASI, 100OH LEADI,1050H ADDSI, 63H ADDDI, 63H MOVCX, 100 STD REPMOVSB HLT 4.7在自0500H单元开始,存有100个数。要求把它传送到1000H开始的存储区中,但在传送过程中要检查数的值,遇到第一个零就停止传送。 解: LEA SI, 050OH LEA DI, 10OOH MOV CX, 100 N1: MOV AL, [SI] CMP AL, 0 JZ N2 MOV[DI],AL INC SI INC DI LOOPN1 N2: HLT 4.14若在0500H单元中有一个数 (1)利用加法指令把它乘2,且送回原存储单元(假定X×2后仍为一个字节); (2)X×4; (3)X×10(假定X×l0≤255).解: (1)LEA BX, 050OH MOV AL, [BX] ADD AL, AL MOV[BX],AL (2)LEA BX, 0500H MOV AL, [BX] ADD AL, AL ADD AL, AL MOV[BX],AL (3)LEABX, 050OH MOVAL, [BX] ADDAL, AL MOVDL, AL ADDAL, AL ADD AL,AL ADDAL, DL MOV[BX],AL 第 5 章 作业答案 5.1 总线周期的含义是什么?8086/8088CPU的基本总线周期由几个时钟组成?如果 一个CPU的时钟频率为8MHz,那么,它的一个时钟周期是多少?一个基本总线周期是多 少?如果主频为5MHz呢? 解:CPLI访问总线(从内存储器或I/0端口读/写字节或字)所需的时间称为总线周期。8086/8088CPU的基本总线周期由4个时钟组成。若CPU的时钟频率为8(5)MHz,时 钟周期为1/8MHz=125(1/5MHz=2O)ns,基本总线周期为4×125(200)ns=500(800)ns 5.2在总线周期的TI、T2、T3、T4状态,CPU分别执行什么动作?什么情况下需要插入 等待状态Tw?Tw在哪儿插入?怎样插入? 解: 下面以存储器读为例进行说明。 在Tl周期:输出地址信号、地址锁存允许信号、内存或I/O端口访问控制信号; 在T2周期:CPIJ开始执行数据传送操作,此时,8086CPU内部的多路开关进行切换,将 地址/数据线AD15~AD0上的地址撤销,切换为数据总线,为读写数据作准 备。8288总线控制器发出数据总线允许信号和数据发送/接收控制信号 DT/R允许数据收发器工作,使数据总线与8086CPU的数据线接通,并控制数 据传送的方向。同样,把地址/状态线A19/S6~A16/S3切换成与总线周期有 关的状态信息,指示若干与周期有关的情况。 在T3周期:开始的时钟下降沿上,8086CPU采样READY线。如果READY信号有效(高电平),则在T3状态结束后进人TA状态。在T4状态开始的时钟下降沿,把数据总线上的数据读入CPU或写到地址选中的单元。在T4状态:结束总线周期。如果访问的是慢速存储器或是外设接口,则应该在Tl状态输出的地址,经过译码选中某个单元或设备后,立即驱动READY信号到低电平。8086CPU在T3状态采样到READY信号无效,就会插入等待周期Tw,在Tw 状态CPU继续采样READY信号;直至其变为有效后再进人T4状态,完成数据传送,结束总线周期。在T4状态,8086CPU完成数据传送,状态信号S2 ~S0。变为无操作的过渡状态。在此期间,8086CPU结束总线周期,恢复各信号线 的初态,准备执行下一个总线周期。 第6章 作 业 答 案 6.1 若有一单板机,具有用8片2114构成的4KBRAM,连线如图创所示。 若以每1KBRAM作为一组,则此4组RAM的基本地址是什么?地址有没有重叠区?每一组的地址范围为多少? 解:RAM的基本地址为: 第一组 OOOOH~03FFH 第二组 4000H~43FFH 第三组 8000H~83FFH 第四组 COOOH~C3FFH 地址有重叠区。每一组的地址范围为OOOH~3FFH(1024个字节)。 6.4若要扩充1KBRAM(用2114片子),规定地址为8000H~83FFH,地址线应该如何 连接? 解:扩充lKBRAM至规定地址8000H~83FFH,其地址线的低10位接芯片,高6位地址 (Al5~A10=100000)产生组选择信号。 第7 章 作 业 答 案 7.1 外部设备为什么要通过接口电路和主机系统相连? 解: 因为外部设备种类繁多,输入信息可能是数字量、模拟量或开关量,而且输 入速度、电平、功率与CPU差距很大。所以,通常要通过接口电路与主机系统 相连。 7.4 CPU和输入输出设备之间传送的信息有哪几类? 解:CPU和输入输出设备之间传送的信息主要有3类。 (l)数据 在微型计算机中,数据通常为8位、16位或32位。 (2)状态信息 在输入时,有输入设备的信息是否准备好;在输出时有输出设备是否有空,若输 出设备正在输出信息,则以忙指示等。 (3)控制信息 例如,控制输入输出设备启动或停止等。 7.9设一个接口的输入端口地址为0100H,状态端口地址为0104H,状态端口中第5位 为1表示输入缓冲区中有一个字节准备好,可以输入。设计具体程序以实现查询式 输入。 解: 查询输入的程序段为: POLl: IN AL, 0104H ANDAL,20H JZ POLl IN AL, 0100H 第 8 章作 业 答 案 8.1在中断响应过程中,8086CPU向8259A发出的两个RT互信号分别起什么作用? 解: CPU发出的第一个INTA脉冲告诉外部电路,其提出的中断请求已被响应,应准备将类型号发给CPU,8259A接到了这个INTA脉冲时,把中断的最高优先级 请求置入中断状态寄存器(ISR)中,同时把IRR(中断请求寄存器)中的相应位复 位。CPU发出的第二个INTA脉冲告诉外部电路将中断的类型号放在数据总线 上。 8.28086CPU最多可以有多少个中断类型?按照产生中断的方法分为哪两大类? 解:8086CPU最多可以有256个中断类型。按照产生中断的方法,可以分为内 部中断(软件中断)和外部(硬件中断)中断两大类。 8.9 在编写中断处理子程序时,为什么要在子程序中保护许多寄存器? 解:因为在用户程序运行时,会在寄存器中有中间结果,当在中断服务程序中要 使用这些寄存器前要把这些寄存器的内容推至堆栈保存(称为保护现场)。在从 中断服务程序返回至用户程序时把这些内容从堆找恢复至寄存器中(称为恢复 现场)。 8.12若在一个系统中有5个中断源,其优先权排列为:1、2、3、4、5,它们的中断服 务程序的入口地址分别为:3000H、302OH、3050H、3080H、30AOH。编写一个程序, 当有中断请求CPU响应时,能用查询方式转至申请中断的优先权最高的源的中断服 务程序。 解: 若5个中断源的中断请求放在一中断状态寄存器中,按优先权分别放在状态的7 位(优先权最高)至位3中。查询方法的程序段为: IN AL,STATUS CMP AL,80H JNE N1 JMP 3000H N1: IN AL,STATUS CMP AL,40H JNE N2 JMP 3020H N2: IN AL,STATUS CMP AL,20H JNE N3 JMP 3050H N3: IN AL,STATUS CMP AL,10H JNE N4 JMP 3080H N4: IN AL,STATUS CMP AL,08H JNE N5 JMP 30A0H N5: RET 第9章 作 业 答 案 9.3在某一应用系统中,计数器/定时器8253地址为340H~343H,定时用作分频器(N 为分频系数),定时器2用作外部事件计数器,如何编制初始化程序? 解: 定时器0用作分频器,工作方式2,其初始化程序为: MOV AL,34H OUT 343H,AL MOV AL,N1 OUT 342H,AL MOV AL,N2 OUT 342H,AL 定时器2用作外部事件计数器,工作在方式0,其初始程序: MOV AL,0B0H OUT 343H,AL MOV AL,N1 OUT 342H,AL MOV AL,N2 OUT 342H,AL 9.4若已有一频率发生器,其频率为1MHZ,若要示求通过计数器/定时器8253,着重 产生每秒一次的信号,8253应如何连接?编写出初始化程序。 解: 1MHZ的信号要变为每秒一次,则需经过106分频。一个通道的计数为16位最 大为65536。故需要需两个通道级连,则每个通道计数为1000。用通道0和通道1级连,都工作在方式2,初始化程序为: MOV AL,34H OUT 343H,AL MOV AL,0E8H OUT 342H,AL MOV AL,03 OUT 342H,AL MOV AL,74H OUT 343H,AL MOV AL,0E8H OUT 342H,AL MOV AL,03 OUT 342H,AL 9.9编程将计数器/定时器8253计数器0设置为模式1,计数初值3000H;计数器1设置 为模式2初值为2010H;计数器2设置为模式4初值为4030H; 解:若端口地址为:0F8H~0FBH,初始化程序为: MOV AL,32H OUT 0FBH,AL MOV AL,00H OUT 0F8H,AL MOV AL,30H OUT 0F8H,AL MOV AL,74H OUT 0FBH,AL MOV AL,10H OUT 0F9H,AL MOV AL,20H OUT 0F9H,AL MOV AL,0B8H OUT 0FBH,AL MOV AL,30H OUT 0FAH,AL MOV AL,40H OUT 0FAH,AL 第10 章 作 业 答 案 10.4可编程并行接口芯片8255A的3个端口在使用时有什么差别? 解:通常端口A或B作为输入输出的数据端口(端口A还可以作为双向数据端口), 而端口C作为控制或状态信息的端口,它在“方式”字的控制下,可以分成两个4位的端 口。每个端口包含一个4位锁存器。它们分别与端口A和B配合使用,可用以作为控制 信号输出,或作为状态信号输入。 10.7 8255A有哪几种基本工作方式?对这些工作方式有什么规定? 解:8255A有3种基本的工作方式: 方式0-----基本输入输出: 方式1-----选通输入输出; 方式2-----双向传送。 10.8设置8255A工作方式,8255A的控制口地址为OOC6H。要求端口A工作在方式1,输 入;端口B工作在方式0,输出;端口C的高4位配合端口A工作;低4位为输入。 解:按要求的方式控制字为:10111001B。编程语句为: MOVAL,0B9H OUTOOC6H, AL; 10.9设可编程并行接口芯片8255A的4个端口地址为OOCOH、00C2H、00C4H、OOC6H,要求用置0/置1方式对PC6置1,对PC4置0。 解:对端口C的PC6置1的控制字为: 00001101B,对PC4置O的控制字为: 0000100OB。 程序段为: MOV AL,DH OUT OOC6H, AL MOV AL,08H.OUT00C6H, AL第五篇:微机原理与接口技术(第二版)习题答案