现代微机复习试题答案
更新时间:2024-01-11 00:04:01 阅读量: 教育文库 文档下载
- 现代微机主要元件推荐度:
- 相关推荐
第一章
1、在8086变址寻址方式中,操作数的物理地址等于( ) A.段寄存器左移四位加上变址寄存器的内容
B.段寄存器左移四位加上变址寄存器的内容再加上给定的偏移量
C.段寄存器左移四位加上变址寄存器的内容再加上基址寄存器的内容
D.段寄存器左移四位加上基址寄存器的内容再加上给定的偏移量
2、段地址为3900H,偏移地址为5200H,则物理地址为( ) A.8B00H B.3E200H C.44200H D.55900H 3、8086能寻址内存储器的最大地址范围为( ) A.64KB B.1MB C.16MB D.16KB 4、取指令的物理地址=( )
A.(DS)?10H+偏移地址 B.(ES)?10H+偏移地址 C.(SS)?10H+(SP) D.(CS)?10H+(IP) 表1-2 和AD0编码的含义
5、8086CPU的控制线 =0,地址线A0=0,CPU( ) A.从偶地址开始完成8位数据传送 B.从偶地址开始完成16位数据传送 C.从奇地址开始完成8位数据传送 D.从奇地址开始完成16位数据传送
6、8086CPU在执行MOV AL,[BX]指令的总线周期内,若BX存放的内容为2034H, 和A0的状态为( ) A.0,1 B.0,0 C.1,1 D.1,0
7、8086工作在最小模式下,当M/IO#=0,RD#=0,WR#=1时,CPU完成的操作是( )
A.存储器读 B.I/O读 C.存储器写 D.I/O写
8、8086CPU有最小和最大两种工作模式,最大模式的特点是( )
A.需要总线控制器8288 B.由编程进行模式设定
C.不需要8286收发器 D.CPU提供全部的控制信号 9、CPU与外设之间交换信息,一般有( )
A.地址信息 B.数据信息 C.控制信息 D.状态信息 E.中断类型码 10、8086/8088CPU工作在最小方式对存储器进行写操作有关的控制信号( )
A.M/IO# B.WR# C.ALE D.INTA# E.DT/R#
11、如果8088/8086CPU的工作时钟CLK=4MHZ,请问:
a、CPU正常工作时,Reset引脚至少出现多少微秒的高电平才能使CPU复位?
b、在插入一个Tw的情况下,从内存读出一个字节数据需要的时间是多少? 答:(1)由于时钟为4MHZ,一个时钟周期为1/4=0.25微秒;CPU完成复位操作需要4个时钟周期,所以4*0.25=1微秒。
(2)再加上1个TW情况下,共需要5个时钟周期,所以5*0.25=1.25微秒。
12、当总线请求部件收到(①)信号后,就获得了总线控制权;在其控制总线时期,HOLD和HLDA都保持( ② )。当总线部件用完总线后,HOLD变为低电平,于是CPU又重新控制总线,并使HALD变为( ③ )
① A.HOLD B.HALD C.INTR D.INTA ② A.低电平 B.高电平 C.高阻态 D.不变 ③ A.低电平 B.高电平 C.高阻态 D.不变 13、8086CPU上电复位后,
CS=( FFFFH ),IP=(0000H ),DS=( 0000H ),SP=( 0000H )
14、8086CPU之所以能有力地提高工作效率,其原因之一是总线接口部件和执行部件采用( 并行 )的工作方式。 15、完成一个基本操作所用时间的最小单位是( 时钟周期 ),通常称它为一个( T )状态。完成一次读或写至少需要( 4 )个这样的状态。
16、设DS:75存储单元开始存放11H、22H、33H,若要求占用的总线周期最少,则要( 2 )条指令才能将这3个数据读入到CPU中,这时占用( 2 )个总线周期。若执行MOV AX,[75]后,则AH=( 22H ),AL=( 11H )
第二章
1 .构成4KB的存储系统,需要( )
A.1024×4位的芯片8片 B.2K×1位的芯片8片 C.1024×8位的芯片2片 D.16K×1位的芯片4片
2. 设存储器的地址线为20条,存储单元为字节,使用全译码方式组成存储器,该系统构成最大容量需要64K×1位的存储器芯片的数量是( )
A.16 B.32 C.64 D.128
3. 已知一个SRAM芯片的容量力8K×8,该芯片有一个片选信号引脚和一个读/写控制引脚,问该芯片至少有多少个引脚?地址线多少条?数据线多少条?还有什么信号线? 答: 根据存储芯片地址线数量计算公式,k=log2(1024*8)= log2(213)=13,即总计有13根地址线。另有8根数据线、2根电源线。所以该芯片至少有25(=13+8+1+1+2)根引脚。 3. 巳知一个DRAM芯片外部引脚信号中有4条数据线,7条地址线,计算它的容量。 答:根据存储容量计算公式S=2k×I,可得该芯片的存储容量为:214*4=16K×4bit(位),也可表示为64Kb=8KB(字节)
5.组成8K字节的存储器,需要256×4位的存储器芯片( )。 A.32片 B.64片 C.16片 D.50片
6. 74LS138译码器的接线如图2-28所示,写出Y0、Y2、Y4、Y6所决定的内存地址范围。
答:从图看出,该存储系统的片内地址线有13根(A12-A0),是一个由8KB存储芯片组成的存储系统,A17地址线不确定。它的
地址分布为: 00?0, CBA?, ????, ????, ???? 其中,CBA作为译码输入,与输出选择有关;“?”表示可以为“0”,也可以为“1”。 于是:
0Y对应的内存地址范围是: 00000H—01FFFH;或20000H—21FFFH。 2Y对应的内存地址范围是: 04000H—05FFFH;或24000H—25FFFH。 4Y对应的内存地址范围是: 08000H—09FFFH;或28000H—29FFFH。 6Y对应的内存地址范围是: 0C000H—0DFFFH;或2C000H—2DFFFH
7. 断电后所存储信息会丢失的存储器是( )
A.ROM B.RAM C.CD-ROM D.FLASH-MEMORY 8. 需要定期刷新的存储器类型为( )
A.静态存储器 B.动态存储器 C.只读存储器 D.易失性存储器
9. EPROM是指( )
A.只读存储器 B.可编程的只读存储器
C.可擦除可编程的只读存储器 D.电可改写只读存储器 10.某一SRAM芯片其容量为2KB,除电源和接地线之外,该芯片引线的最小数目是( )
A.24 B.26 C.20 D.22
11. 有一个存储体,其地址线15条,数据线为8条,则 1)该存储体能够存储多少个汉字?
2)如果该存储体由2K×4位的芯片组成,需要多少片? 3)采用什么方法扩展?分析各位地址线的使用。
答:1)该存储体容量为215×8=32KB,存储一个汉字需要两个字节,因此,它能够存储16384(16K)个汉字。
2)需要2K×4位的芯片32片,[(32K×8)/(2K×4)=32]。 3)可采用字位全扩展方法,由2片4位的芯片组成1组8位的存储单元,16组扩展成32K的8位存储体。芯片直接使用的地址线(片内地址)11根(A0~A10),另外需要4根高位地址,连接到4-16译码输入端,产生16个译码信号用作16个芯片的片选信号。剩余的地址线用来确定该存储体的首地址。
12. 利用全地址译码将6264芯片接到8088系统总线上,地址范围为30000H~31FFFH,画出逻辑图。 答:全地址译码可以保证存储器芯片上的每一个单元在整个内存
空间中具有唯一的、独占的一个地址。6264芯片有13根地址线,剩余的高位7根地址线通过译码组合确定该芯片的起始地址(30000H)。
由30000H地址得出对应的地址线状态为: 0011 000 0 0000 0000 0000
可以看出A13~A19地址线为0011 000,所以译码组合应逻辑为: = ···A16·A17·· =(····)·(A16·A17) = A13+A14+A15+A18+A19+ A16·A17
13. 若用2164芯片构成容量为128KB的存储器,需多少片2164? 至少需多少根地址线? 其中多少根用于片内寻址? 多少根用于片选译码?
答:2164A是容量为64K×1位的地图随机存储器芯片,构成128KB的存储器需要2164芯片16片[128K×8/(64K×1)=16]。由于地址空间为128K,需要的地址线总线为17根(217=28根)。其中,片内地址线16根(216=64K),片选地址线1根(17—16=1)。每8个2164芯片构成一组,进行位扩展,得到64KB存储器。两个这样的“组”进行地址扩展,构成128KB的存储器。
14. 某8088系统用2764ROM芯片和6264SRAM芯片构成16KB的内存。其中,RAM的地址范围为FC000H-FDFFFH,ROM的地址范围为FE000H-FFFFFH。试利用74LS138译码,画出存储器与CPU的连接图,并标出总线信号名称。 答:2764和6264均为8KB的存储芯片,需要13根地址线(A0~A12)用于片内寻址。8080系统的其他地址线(A13~A19)用于产生片
ADD AX, 1 ADC DX0
3.12 内存缓冲区BUFFER定义如下,按照要求,写出指令序列 BUFFER DB 20 DUP(?)
(1)将缓冲区全部置为0,并使执行时间最短。 (2)将缓冲区全部置为空格字符(ASCII代码20H),使用的指令条数最少
(3)将缓冲区各字节依次设置为0,1,2,3,4,……,19 (4)将缓冲区各字节依次设置为0,-1,-2,-3,-4,……,-19 (5)将缓冲区各字节依次设置为30,29,28,27,……,11 (6)将缓冲区各字节依次设置为0,2,4,6,8,……,38 (7)将缓冲区各字节依次设置为0, 1, 2, 3, 0, 1, 2, 3, …, 3
[BUFFER+8], EAX 解:(1)XOR EAX, EAX
MOV DWORD PTR MOV DWORD PTR
[BUFFER+12], EAX [BUFFER], EAX
DWORD PTR MOV DWORD PTR MOV
[BUFFER+16], EAX [BUFFER+4], EAX
MOV DWORD PTR
ONE:MOV [BX], BUFFER (2)MOV AL, 20H
INC BX MOV CX, 20
LOOP ONE LEA BX, BUFFER (3)XOR BX, BX
MOV CX, 20
ONE:MOV BUFFER[BX], BL
(4)XOR BX, BX XOR AL, AL
MOV CX, 20
ONE:MOV BUFFER[BX], AL
(5)XOR BX, BX
MOV AL, 30 MOV CX, 20
ONE:MOV BUFFER[BX], AL
(6)XOR BX, BX
INC BX LOOP ONE
INC BX DEC AL LOOP ONE
INC BX DEC AL LOOP ONE
XOR AL, AL
MOV CX, 20
ONE:MOV BUFFER[BX], AL INC BX
ADD AL, 2 LOOP ONE
MOV BUFFER[BX+2], 2 (7)XOR BX, BX
MOV BUFFER[BX+3], 3 MOV CX, 5
ADD BX, 4 ONE :MOV BUFFER[BX], 0
LOOP ONE MOV BUFFER[BX+1], 1
3.13 编写循环结构程序,进行下列计算,结果存入RESULT单元 (1)1+2+3+4+5+6+ …… +100 (2)1+3+5+7+9+11+ …… +99 (3)2+4+6+8+10+ …… +100 (4)1+4+7+10+13+ …… +100 (5)11+22+33+44+ …… +99
LOOP AGAIN 解:(1) CODE SEGMENT
MOV RESULT, AX ASSUME CS: CODE
MOV AX, 4C00H RESULT DW ?
INT 21H START:
CODE ENDS XOR AX, AX
END START MOV CX, 100
AGAIN: ADD AX, CX
ADD BX, 2 (2)CODE SEGMENT
LOOP AGAIN ASSUME CS: CODE
MOV RESULT, AX RESULT DW ?
MOV AX, 4C00H START: XOR AX, AX
INT 21H MOV CX, 50
CODE ENDS MOV BX, 1
END START AGAIN: ADD AX, BX
AGAIN: ADD AX, BX (3) CODE SEGMENT
ADD BX, 2 ASSUME CS: CODE
LOOP AGAIN RESULT DW ?
MOV RESULT, AX START:
MOV AX, 4C00H XOR AX, AX
INT 21H MOV CX, 50
CODE ENDS MOV BX, 2
END START
ADD BX, 3 (4) CODE SEGMENT
LOOP AGAIN ASSUME CS: CODE
MOV RESULT, AX RESULT DW ?
MOV AX, 4C00H START:
INT 21H XOR AX, AX
CODE ENDS MOV CX, 34
END START MOV BX, 1
AGAIN: ADD AX, BX
ADD BX, 11 (5) CODE SEGMENT
LOOP AGAIN ASSUME CS: CODE
MOV RESULT, AX RESULT DW ?
MOV AX, 4C00H START:
INT 21H XOR AX, AX
CODE ENDS MOV CX, 9
END START MOV BX, 11
AGAIN: ADD AX, BX
3.14 已知ARRAY是5行5列的有符号字数组,编写程序,进行下
列计算(假设和仍然为16b,不会产生溢出)
(1) 求该数组每一行上第4列元素之和(列号从0开始) (2) 求该数组第3行所有元素之和(行号从0开始) (3) 求该数组正对角线上所有元素之和 (4) 求该数组反对角线上所有元素之和 解:假设数据段已定义如下: DATA SEGMENT 行
ARRAY DW 1, 6, 9, 23,12 ;定义DW 33, 67, 81, -99, 0 ;共计25数组ARRAY 个数据
DW 54, 23, 15, -92, 37 ;每一行DW 123, -52, 77, -180, 89 5个数据 SUM DW ? ;SUM存放结果 DW -99, 231, 76, 81, 90 ;共5DATA ENDS
MOV DS, AX (1) CODE SEGMENT
ASSUME CS: CODE, DS: DATA MOV AX, 0 ;累加器在循环之前START: MOV AX, DATA 清零
LOOP NEXT MOV CX, 5 ;计数器置初值
MOV SI, 4*2 ;第1行第4列元MOV SUM, AX
MOV AX, 4C00H 素在数组内的位移
INT 21H NEXT: ADD AX, ARRAY[SI]
ADD SI, 5*2 ;SI指向下一行第CODE ENDS
END START 4列元素
NEXT: ADD AX, ARRAY[SI] (2) CODE SEGMENT
ASSUME CS: CODE, DS: DATA ADD SI, 2 ;SI指向本行下一列START: MOV AX, DATA 元素 MOV DS, AX LOOP NEXT MOV AX, 0 ;累加器在循环之前MOV SUM, AX
MOV AX, 4C00H 清零
INT 21H MOV CX, 5 ;计数器置初值
MOV SI, 3*5*2 ;第3行第0列CODE ENDS
END START元素在数组内的位移
NEXT: ADD AX, ARRAY[SI] (3) CODE SEGMENT
ADD SI, 5*2+2 ASSUME CS: CODE, DS: DATA
LOOP NEXT START: MOV AX, DATA
MOV SUM, AX MOV DS, AX
MOV AX, 0 ;累加器在循环之前MOV AX, 4C00H
INT 21H 清零
CODE ENDS MOV CX, 5 ;计数器置初值
END START MOV SI, 0
ADD SI, (5-1)*2 (4) CODE SEGMENT
LOOP NEXT ASSUME CS: CODE, DS: DATA
MOV SUM, AX START: MOV AX, DATA
MOV AX, 4C00H MOV DS, AX
INT 21H MOV AX, 0
CODE ENDS MOV CX, 5
END STARMOV SI, 4*2
NEXT: ADD AX, ARRAY[SI]
3.15 变量X, Y, Z均为一字节压缩BCD码表示的十进制数,写出指令序列,求它们的和(用2字节压缩BCD码表示)。
解: XOR AX, AX ADD AL, Z ;完成X+Y+Z
MOV AL, X DAA ;压缩BCD码加法调整 ADD AL, Y ;完成X+Y ADC AH, 0 DAA ;压缩BCD码加法调整
ADC AH, 0
3.16 设(BX)=0E3H,变量VALUE中存放内容为79H,指出下列指令单独执行后的结果。
(1)指令“XOR BX, VALUE” 执行后,(BX)= 009AH (2)指令“AND BX, VALUE” 执行后,(BX)= 0061H (3)指令“OR BX, VALUE” 执行后,(BX)= 00FBH (4)指令“XOR BX, 0FFH” 执行后,(BX)= 001CH (5)指令“AND BX, BX” 执行后,(BX)= 00E3H (6)指令“AND BX, 0” 执行后,(BX)= 0000H 3.17 编写程序,从键盘上输入20个十进制数字,求这些数字的和,向显示器输出。 答:
INCLUDE YLIB.H AGAIN: DATA SEGEMNT MOV AH, 01H MESS1 DB 0DH, 0AH, ?Input 20 INT 21H ;输入一个数字(在decimal digits please : $? AL中) MESS2 DB 0DH, 0AH, ?Their suAND AL, 0FH ;转换成二进制m is : $? 数 DATA ENDS ADD BL, AL ;累加 CODE SEGMENT ADC BH, 0 ASSUME CS: CODE, DS: DATA LOOP AGAIN START: LEA DX, MESS2 MOV AX, DATA MOV AX, BX MOV DS, AX CALL WRITEDEC ;输出20个数LEA DX, MESS1
字的和
MOV AH, 09H
CALL CRLF
INT 21H ;输出提示信息 MOV AX, 4C00H XOR BX, BX ;BX用作累加器,INT 21H 清零 CODE ENDS MOV CX, 20 ;循环计数器置初END START 值
3.18 阅读以下程序,指出它的功能。 MOV CL, 04 SHL AX, CL SHL DX, CL SHR BL, CL MOV BL, AH OR DL, BL 答:把32位二进制代码(DX, AX)联合左移4位。 3.19 已知(DX)=0B9H,(CL)=3,(CF)=1,确定下列指令单独执行以后DX寄存器的值。
(1)指令“SHR DX, 1” 执行之后,(DX)= 005CH (2)指令“SAR DX, CL” 执行之后,(DX)= 0017H (3)指令“SHL DX, CL” 执行之后,(DX)= 05C8H (4)指令“SHL DL, 1” 执行之后,(DX)= 0172H (5)指令“ROR DX, CL” 执行之后,(DX)= 2017H (6)指令“ROL DX, CL” 执行之后,(DX)= 05C8H (7)指令“SAL DH, 1” 执行之后,(DX)= 00B9H (8)指令“RCL DX, CL” 执行之后,(DX)= 05CCH (9)指令“RCR DL, 1” 执行之后,(DX)= 00DCH
3.20 编写程序,从键盘上输入一个0~65535之间的十进制无符 号数,然后用二进制格式输出这个值。例如,键盘输入 “35”,显示器输出“00000000 00100011”。 答:
INCLUDE YLIB.H 号整数 DATA SEGEMNT MOV BX, AX ;转存入BX MESS1 DB 0DH, 0AH, ?Input a uLEA DX, MESS2 nsigned decimal integer numberMOV AH, 09H please : $? INT 21H ;输出提示信息 MESS2 DB 0DH, 0AH, ?The numMOV CX, 16 ;循环计数器置初ber in binary is : $? 值 DATA ENDS AGAIN: SHL BX, 1 ;向左外移一CODE SEGMENT
位,进入CF
ASSUME CS: CODE, DS: DATA
MOV DL, 30H
START:
ADC DL, 0 ;形成一位二进制数
MOV AX, DATA
字的ASCII代码
MOV DS, AX
MOV AH, 2
LEA DX, MESS1
INT 21H ;输出一个二进制数
CALL READDEC ;输入一个无符
字
INT 21H LOOP AGAIN ;循环16次
CODE ENDS CALL CRLF
END START MOV AX, 4C00H
3.21 无符号数变量X用DD定义,编写程序,用十六进制格式输出变量X的值。 答: 386 值 DATA SEGEMNT USE16 LEA BX, HEXTAB ;换码表首地址X DD 36895471 ;一个32B长整装入BX 数 AGAIN: ROL ESI, 4 ;把最高4位MESS DB 0DH, 0AH, ?The X in he移到最低4位上 xdecimal is : $? MOV AX, SI ;低8位转入AL HEXTAB DB ?0123456789ABCDEAND AX, 0004H ;清除高4位 F? XLAT ;转换成十六进制数字的DATA ENDS ASCII代码 CODE SEGMENT USE16 MOV DL, AL ASSUME CS: CODE, DS: DATA MOV AH, 2 START:
INT 21H ;输出一个十六进制数
MOV AX, DATA
字
MOV DS, AX
LOOP AGAIN ;循环16次
LEA DX, MESS
MOV AX, 4C00H
MOV AH, 09H
INT 21H
INT 21H ;输出前导信息
CODE ENDS
MOV ESI, X ;将X存入ESI
END START
MOV CX, 8 ;循环计数器置初
3.22 编写指令序列,把AX中的16b二进制分为4组,每组4b,分别置入AL,BL,CL,DL中。
答: MOV DX, AX ;最低4位直4位 接进入DX MOV BX, AX ;送入BL MOV CX, 4 ROL AX, CL ;第3组4位移入最ROL AX, CL ;最高4位移入最低低4位 4位 MOV CX, AX ;送入CL
PUSH AX ;压入堆栈保存(准POP AX ;从堆栈中弹出原最高备送入AL) 4位 ROL AX, CL ;次高4位移入最低AND AX, 000FH ;清除高12位
AND BX, 000FH ;清除高12位 AND DX, 000FH ;清除高12位 AND CX, 000FH ;清除高12位
1、I/O设备与CPU之间交换信息,其状态信息是通过 _ B___总线传送给CPU的。
A.地址 B.数据 C.控制 D.三者均可 2.8086/8088微处理器可寻址的最大I/O空间为( C ) A.8KB B.32KB C.64KB D.1MB
3.CPU与I/O设备交换信息,无需要传送( D )信息。 A.数据 B.状态 C.控制 D.地址
4.I/O单独编址方式下,从端口输入数据可使用( C )。 A.MOV B.OUT C.IN D.XCHG
5.CPU对外部设备的访问实质是对( B )的访问。 A.接口 B.I/O端口 C.I/O设备 D.接口电路
6.8086/8088对10H端口进行写操作,正确指令是( A )。 A.OUT 10H,AL B.OUT [10H],AL C.OUT AL,10H D.OUT AL,[10H]
7.设计输入输出接口电路时,输入接口电路的关键器件是( 三态缓冲器 );输出接口电路的关键器件是( 锁存器 )。 8.可用作简单输入接口的电路是( D )。
A.译码器 B.锁存器 C.方向器 D.三态缓冲器
9.判断:接口的基本功能是输入锁存,输出缓冲。 × 10.I/O端口的独立编址方式特点有( B ) 。
A.地址码较长 B.需用专用I/O指令 C.只需要存储器存取指令 D.译码电路简单
11.I/O端口的编址方式一般有( I/O独立编址 )和( 统一编址 )两种。
12.从硬件角度看,采用硬件最少的数据传送方式是( B ) A.DMA控制 B.无条件传送 C.查询传送 D.中断传送
13.DMA方式是主机与外设之间传送数据的一种方式,他是在( DMAC )的控制下,( 存储器 )与( 外部设备 )之间直接进行数据交换。
14.从输入设备向内存输入数据时,若数据不需要经过CPU,其I/O数据传送控制方式是( C )。
A.程序查询方式 B.中断方式
C.DMA方式 D.直接传送方式
15.主机与外设之间有三种传送方式,中断方式的主要优点是
( D ).
A.接口电路简单、经济需要硬件少 B.传送速度快 C.CPU时间利用率最高 D.能实时响应I/O设备请求 16.写出主机与外围设备之间数据交换的4种方式:
( 无条件传送 ),( 查询式传送 ),( 中断方式传送 )和( 直接存储器存取方式 )。
17.微机系统中,主机与外设之间交换信息通常采用 ( 程序 ),( 中断 )和( DMA )方式。
18.8086CPU工作在DMA方式有关的两个引脚是( HOLD )和( HLDA )
19.一个接口电路的基本功能包括( 设备选择功能 ),(信息传输功能),(数据格式转换功能 )。
20.8086CPU工作在DMA方式时,其AD0-15引脚处于( 高阻状态 )
第四章
4.1 什么是“三种基本结构”?解释“基本”两个字在其中的含义。
答:三种基本结构指:顺序结构,选择结构、循环结构。
使用这3种结构,可以编制出任何所需要的程序,因此冠以“基本”结构。
4.2 什么叫做“控制转移指令”?它和数据传送、运算指令有什么区别?它是怎样实现它的功能的?
答:控制转移指令是可以改变指令执行顺序的指令。数据传送、运算指令总是顺序执行的,
而控制转移指令通过改变IP和/或CS寄存器的值,改变了程序指令的执行顺序。
4.3 指令“JMP DI”和“JMP WOR PTR [DI]”作用有什么不同?请说明。 答:上述两条指令都是段内近转移指令,但是偏移地址的来源不同。指令“JMP DI”执 行时,新的偏移地址在DI寄存器内,“JMP WORD PTR [DI]”时,目的偏移地址在存储单元中,该存储单元的地址在DS: DI中。
4.4 已知(AX)= 836BH,X分别取下列值,执行“CMP AX,X”后,标志位ZF、CF、OF、SF各是什么?
(1)X=3000H (2)X=8000H (3)X=7FFFFH(4)X=0FFFFH (5)X=0
答:上述指令执行后,标志位ZF、CF、OF、SF 的状态分别是: (1) ZCOS=0010 (2) ZCOS=0000 (3) ZCOS=0010 (4) ZCOS=0101 (5) ZCOS=0001
4.5 已知(AX)= 836BH,X分别取下列值,执行“TEST AX,X”后,标志位ZF、CF、OF、SF各是什么? (1)X=0001H (2)X=8000H (3)X=0007H (4)X=0FFFFH (5)X=0
答:上述指令执行后,标志位ZF、CF、OF、SF 的状态分别是: (1) ZCOS=0000 (2) ZCOS=0001 (3) ZCOS=0000 (4) ZCOS=0001 (5) ZCOS=1000
4.6 测试名为X的一个字节,如果X的第1,3位均为1,转移到L1,如果只有一位为1,转移到L2,如果两位全为0,转移到L3。写出对应的指令序列。
CMP AL, 0000 1010B 答: MOV AL, X
JE L1 AND AL, 0000 1010B
JMP L2 JZ L3
4.7 假设X和X+2字单元存放有双精度数P,Y和Y+2字单元存放有双精度数Q,下面程序完成了什么工作? MOV DX, X+2 CMP AX, Y MOV AX, X JBE L2 ADD AX, X L1: MOV Z, 1 ADC DX, X+2 JMP SHORT EXIT CMP DX, Y+2 L2: MOV Z, 2 JL L2 EXIT: …… JG L1
答:程序根据2P与Q的大小,确定Z的值。如果2P≤Q,则Z=2 如果2P>Q, 则Z=1
4.8 编写指令序列,将AX和BX中较大的绝对值存入AX,较小的绝对值存入BX。
NEG BX 答: AND AX, AX
SKIP2: CMP AX, BX JGE SKIP1
JGE SKIP3 NEG AX
XCHG AX, BX SKIP1: AND BX, BX
SKIP3: …… JGE SKIP2
4.9 编写指令序列,比较AX、BX中的数的绝对值,绝对值较大的数存入AX,绝对值较小的数存入BX。
OR DL, 30H MOVBX, AX;转存到BX
MOV AH, 2
LEA DX, MESS2
INT 21H
MOV AH, 9
LOOP ONE
INT 21H
CALL CRLF
MOV CX, 8
MOV AX, 4C00H
ONE: ROL BX, 1
INT 21H
ROL BX, 1
CODE ENDS
MOV DL, BL
END START
AND DL, 0000 0011B 4.19 编写程序,把一个30个元素的有符号字数组ARRAY按照各元素的正负分别送入数组P和M,正数和零元素送P数组,负数送M数组。
ONE: MOV AX, [BX] 答: DATA SEGEMNT
AND AX, AL
ARRAY DW 30 DUP(?)
JGE PLUS
P DW 30 DUP(?)
MINUS: MOV M[DI], AX
M DW 30 DUP(?)
ADD DI, 2
DATA ENDS
JMP NEXT
CODE SEGMENT
PLUS: MOV P[SI], AX
ASSUME CS: CODE, DS: DATA
ADD SI, 2
START:
NEXT: ADD BX, 2
MOV AX, DATA
LOOP ONE
MOV DS, AX
MOV AX, 4C00H
LEA BX, ARRAY
INT 21H
MOV SI, 0
CODE ENDS
MOV DI, 0
END START
MOV CX, 30
4.20 缓冲区BUFFER中存放有字符串,以00H为结束标志。编写程序,把字符串中的大写字母转换成小写字母。
MOV DS, AX 答: DATA SEGEMNT
LEA BX, BUFFER
BUFFER DB ‘A String for Test.’,
ONE: MOV AL, [BX]
0
AND AL, AL
DATA ENDS
JZ QUIT
CODE SEGMENT
CMP AL, ‘A’
ASSUME CS: CODE, DS: DATA
JB NEXT
START:
CMP AL, ‘Z’
MOV AX, DATA
JA NEXT QUIT: MOV AX, 4C00H ADD AL, ‘a’-‘A’ INT 21H MOV [BX], AL CODE ENDS
END START NEXT: INC BX
JMP ONE 4.21 编写程序,从键盘上输入无符号字整数X,Y的值,进行X+Y的运算,然后按以下格式显示运算结果和运算后对应标志位的状态。
SUM=XXXX ZF=X,OF=X,SF=X,CF=X
JZ SKP1 答: INCLUDE YLIB.H
INC AL
CODE SEGMENT
SKIP1: MOV ZF, AL
ASSUME CS: CODE
MOV AL, ‘0’
MESS1 DB 0DH, 0AH,
TEST
‘Input a unsigned integer
BX,100000000000B
please : $’MESS2 DB 0DH, 0AH,
JZ SKP2
‘SUM=$’
INC AL
MESS3 DB 0DH,0AH, ‘ZF=’
SKIP2: MOV OF, AL
ZF DB ? DB ‘, OF=’OF
MOV AL, ‘0’
DB ?DB ‘, SF=’
TEST BX, 1000 0000B
SF DB ? DB ‘,
JZ SKP3
CF=’CF DB ? DB 0DH,
INC AL
0AH, ‘$’
SKIP3: MOV SF, AL
START: PUCH CS
MOV AL, ‘0’
POP DS
TEST BX, 1
LEA DX, MESS1
JZ SKP4
CALL READDEC
INC AL
MOV CX, AX
SKIP4: MOV CF, AL
LEA DX, MESS1
LEA DX, MESS3
CAL L READDEC
MOV AH, 9
ADD AX, CX
INT 21H
PUSHF
MOV AX, 4C00H
LEA DX, MESS2
INT 21H
CALL WRITEDEC
CODE ENDS
POP BX
END START
MOV AL, ‘0’ TEST BX, 100 0000B
4.22 编写程序,从键盘上输入一个字符串,统计其中数字字符,小写字母,大写字母,空格的个数并显示。
答:INCLUDE YLIB.H
CODE SEGMENT
ASSUME CS: CODE
MESS1 DB 0DH,0AH,
‘Input a string please : $’
BUFFER DB 81, ?,
81 DUP(?)
MESS2 DB 0DH,0AH, ‘Digits: $’
MESS3 DB 0DH,0AH,
‘Uppercase alphabet: $’
MESS4 DB 0DH,0AH,
‘Lowercase alphabet: $’
MESS5 DB 0DH,0AH, ‘Space : $’
START: POSH CS
POP DS
LEA DX, MESS1
MOV AH, 09H
INT 21H
LEA DX, BUFFER
MOV AH, 0AH
INT 21H
XOR DX, DX
XOR BX, BX
MOV CL, BUFFER+1
MOV CH, 0
LEA SI, BUFFER+2
ONE: MOV AL, [SI]
CMP AL, ‘ ‘
JNE L2
L1: INC DL
JMP NEXT
L2: CMP AL, ‘0’
JB NEXT
CMP AL, ‘9’
JA L4
L3: INC DH JMP NEXT
L4: CMP AL, ‘A’
JB NEXT
CMP AL, ‘Z’
JA L6
L5: INC BH
JMP NEXT
L6: CMP AL, ‘a’
JB NEXT
CMP AL, ‘z’
JA NEXT
INC BL
NEXT: INC SI
LOOP ONE
PUSH DX
MOV AL, DH
LEA DX, MESS2
MOV AH, 0
CALL
WRITEDEC
LEA DX, MESS4
MOV AL, BL
MOV AH, 0
CALL WRITEDEC
LEA DX, MESS3
MOV AL, BH
MOV AH, 0
CALL WRITEDEC
POP DX
MOV AL, DL
MOV AH, 0
LEA DX,
MESS5
CALL WRITEDEC
MOV AX, 4C00H CODE ENDS
END START INT 21H
4.23 编写程序,读入20个数据,统计每个相同数据出现的次数。
LEA BX, TIMES 答: INCLUDE YLIB.H
MOV CX, 20
DATA SEGEMNT
INIT: MOV BYTE PTR[BX], -1
NUMBER DW 20 DUP(?)
ADD BX, 2
TIMES DW 20 DUP(?)
LOOP INIT
MESS DB 0DH, 0AH,
MOV DI, 0
‘Input a number of NO. $’
MOV CX, 20
DATA ENDS
STAT0: PUSH CX
CODE SEGMENT
MOV CX, 20
ASSUME CS: CODE, DS: DATA
MOV SI, 0
START:
MOV AL, NUMBER[DI]
MOV AX, DATA
STAT1: CMP AL, NUMBER[SI]
MOV DS, AX
JNE SKIP
LEA SI, NUMBER
INC
MOV CX, 20
TIMES[DI]
MOV BX, 1
SKIP: ADD SI, 2
INPUT: LEA DX, MESS
LOOP STAT1
MOV AX, BX
POP CX
CALL WRITEDEC
ADD DI, 2
MOV DX, -1
LOOP STAT0
CALL
MOV AX, 4C00H
READDEC
INT 21H
MOV [SI], AL
CODE ENDS
INC BX
END START
ADD SI, 2 LOOP INPUT
4.24 编写程序,打印九九乘法表。
MOV SI, 1 答: INCLUDE YLIB.H
MOV CX, 9
CODE SEGMENT
LOOP0: PUSH CX
ASSUME CS: CODE
MOV CX, 9
SPACE DB ‘ $’
MOV DI, 1
START:
LOOP1: MOV AX, SI
CALL CRLF
MUL DI CALL CRLFI MOV DX, -1 INC SI CMP AX, 10 POP CX JAE SKIP LOOP LOOP0 LEA DX, SPACE MOV AX, 4C00H SKIP: CALL INT 21H WRITEDEC CODE ENDS
END START INC DI
LOOP LOOP1
4.25 编写程序,显示1000以内的所有素数。
JMP TST 答: INCLUDE YLIB.H
OK: INC CX
CODE SEGMENT
CMP CX, 10
ASSUME CS: CODE
JLE OUTPUT
START:
XOR CX, CX
CALL CRLF
CALL CRLF
MOV SI, 2
OUTPUT:MOV DX, -1
MOV CX, 0
MOV AX, SI
ONE: MOV DI, SI
CALL
SHR DI, 1
WRITEDEC
MOV BX, 2
NEXT: INC SI
TST: CMP BX, DI
CMP SI, 1000
JA OK
JB ONE
MOV AX, SI
CALL CRLF
CWD
MOV AX, 4C00H
DIV BX
INT 21H
CMP DX, 0
CODE ENDS
JZ NEXT
END START
INC BX
4.26 编写程序,输入N,计算:S=1×2+2×3+……+(N-1) ×N
LEA DX, 答: INCLUDE YLIB.H
MESS1
CODE SEGMENT
CALL
ASSUME CS: CODE
READDEC
MESS1 DB 0DH, 0AH,
MOV CX, AX
‘Input N please: $’
XOR BX, BX
MESS2 DB 0DH, 0AH, ‘S= $’
ONE: MOV AX, CX
START: PUSH CS
MOV SI, AX
POP DS
DEC SI CALL WRITEDEC MUL SI CALL CRLF ADD BX, AX MOV AX, 4C00H LOOP ONE INT 21H LEA DX, MESS2 CODE ENDS
END START MOV AX, BX
4.27 编写程序,输入N,输出如下矩阵(设N=5) 1 1 1 1 1 2 2 2 2 1 3 3 3 2 1 4 4 3 2 1 5 4 3 2 1 答:设I为行(1~5), J为列 OUTPUT
UP: MOV AX, SI
(1~5),则(I, J)位置上的数 OUTPUT: MOV DX, -1
CALL 据为:I>(6-J)? I: 6-J 。
WRITEDEC INCLUDE YLIB.H
LOOP COL CODE SEGMENT
CALL CRLF ASSUME CS: CODE
INC SI START: CALL CRLF
CMP SI, 5 MOV SI, 1
JBE ROW ROW: MOV CX, 5
MOV AX, 4C00H COL: CMP SI, CX
INT 21H JB UP
CODE ENDS DOWN: MOV AX, CX
END START JMP
4.28 根据下面条件,画出每次调用子程序或返回时的堆栈状态。 (1)主程序调用NEAR属性的SUB1子程序,返回的偏移地址为1200H.
(2)进入SUB1后调用NEAR属性的SUB2子程序,返回的偏移地址为2200H.
(3)进入SUB2后调用FAR属性的SUB3子程序,返回的段基址为4000H,偏移地址为0200H。 (4)从SUB3返回SUB2后。 (5)从SUB2返回SUB1后。 (6)从SUB1返回主程序后。
4.29 编写几个简单的子程序。
(1)显示一个字符的子程序。入口参数:DL=字符的ASCII码。 (2)从键盘上读取一个字符的子程序。出口参数:读取字符的ASC码在CHAR中。
(3)输出换行回车的子程序。无入口、出口参数。
MOV AL, 0AH 解:(1)SHOW PROC
MOV AH, 01H MOV AH, 02H PROC
INT 21H MOV AH, 02H INT 21H
MOV CHAR, AL MOV AL, 0DH INT 21H
RET INT 21H RET
READKEY ENDP RET SHOW ENDP
CRLF E NDP
(2)READKEY (3)CRLF PROC
4.30 阅读下面的子程序,叙述它完成的功能,它的入口参数和出口参数各是什么? CLSCREEN PROC MOV DH, X MOV AX, 0600H MOV DL, Y MOV CX, 0 MOV BH, 07H
INT 10H CLSCREEN ENDP RET
解:屏幕窗口上卷,左上角为(0,0),右下角为(y, x),卷入行属性为黑底白字。
4.31 编写程序,键入一个以$为结束符的数字串,统计其中“0”~“9”各个数字出现的次数,分别存放到S0~S9这10个单元中去。
CMP AL, '$' 解:.MODEL SMALL
JZ COUNT .DATA
INC CX S0 DB 0
MOV [BX], AL S1 DB ?
INC BX S2 DB 0
JMP NEXT S3 DB 0
COUNT: LEA BX, KEYIN S4 DB 0
COUNT1:LEA DI, S0 S5 DB 0
MOV AL, [BX] S6 DB 0
SUB AL, 30H S7 DB 0
MOV AH, 0 S8 DB 0
ADD DI, AX S9 DB 0
INC BYTE KEYIN DB 100 DUP(0)
PTR[DI] .CODE
INC BX START: MOV AX, @DATA
LOOP COUNT1 MOV DS, AX
MOV AX, 4C00H MOV CX, 0
INT 21H LEA BX, KEYIN
END START NEXT: MOV AH, 01H
INT 21H
4.32 编写求绝对值的子程序,利用它计算三个变量的绝对值之和。
解:.MODEL .DATA VALUE DW SUM .CODE
START: MOV MOV LEA MOV MOV ONE: CALL ADD ADD
LOOP AX, @DATA DS, AX BX, VALUE CX, 3 SUM, 0 ABS SUM, AX BX, 2 ONE DW SMALL -5, 5, -10 0 MOV INT ; 子程序 ABS
AX, 4C00H 21H; 功能:求一个字整数的绝对值 ; 入口:字整数的偏移地址在 BX 中 ; 出口:该字整数的绝对值在 AX 中 ABS PROC MOV AGAIN: MOV AND JGE NEG SKIP: ABS RET ENDP END START SUM, 0 AX, [BX] AX, AX SKIP AX
4.33 子程序计算从2开始的N(N<50)个偶数之和(2+4+6+…),主程序从键盘输入整数N,调用子程序求出N个偶数之和,并显示结果。
解:三种方法:(1) 子程序和主程序在同一代码段。
(2) 在同一模块(源程序文件),但不在同一代
码段。
(3) 各自独立成模块,即在不同的源程序文件
中。
(1) INCLUDE YLIB.H CALL SUMM
.MODEL SMALL LEA DX, .DATA PROMPT2 SUM DW 0 CALL WRITEDEC PROMPT1 DB 0DH, CALL CRLF 0AH, 'INPUT THE NUMBER N:$' EXIT: MOV AX, 4C00H
PROMPT2 DB 0DH, INT 21H 0AH, 'THE SUM IS :$' SUMM PROC
.CODE MOV AX, 0 START:MOVAX, @DATA NEXT: MOV BX, CX
MOV DS, AX ADD BX, BX
LEA DX, PROMPT1 ADD AX, BX
CALL READDEC LOOP NEXT CMP AX, 0 RET JZ EXIT SUMM ENDP MOV CX, AX END STAR(2)INCLUDE YLIB.H
DATA SEGMENT
SUM DW 0
PROMPT1 DB 0DH, 0AH, 'INPUT THE NUMBER:$'
PROMPT2 DB 0DH, 0AH, 'THE SUM IS:$'
DATA ENDS
CODE1 SEGMENT
ASSUME DS: DATA, CS: CODE1 START: MOV AX, DATA
MOV DS, AX
LEA DX, PROMPT1 CALL READDEC CMP AX, 0
JZ EXIT MOV CX, AX
CALL FAR PTR SUMM
LEA DX,
PROMPT2
CALL WRITEDEC CALL CRLF
EXIT: MOV AX, 4C00H
INT 21H
CODE1 ENDS CODE2 SEGMENT ASSUME CS: CODE2, DS: DATA
SUMM PROC FAR
MOV AX, 0
NEXT: MOV BX, CX
ADD BX, BX ADD AX, BX LOOP NEXT RET
SUMM ENDP CODE2 ENDS
END START
(3); EXEC5103A.ASM PROMPT2 DB 0DH,
PUBLIC SUMM 0AH, 'THE SUM IS:$' CODE2 SEGMENT DATA ENDS ASSUME CS: CODE2 CODE1 SEGMENT SUMM PROC FAR ASSUME DS: DATA, CS: CODE1
MOV AX,0 START: MOV AX, DATA
NEXT: MOV BX,CX MOV DS, AX ADD BX, BX LEA DX, PROMPT1 ADD AX, BX CALL
LOOP NEXT READDEC RET CMP AX, 0
SUMM ENDP JZ EXIT CODE2 ENDS MOV CX, AX
END CALL FAR PTR SUMM
; EXEC5103B.ASM LEA DX, PROMPT2 INCLUDE YLIB.H CALL WRITEDEC EXTRN SUMM CALL CRLF DATA SEGMENT EXIT: MOV AX, 4C00H SUM DW 0 INT 21H PROMPT1 DB 0DH, CODE1 ENDS 0AH, 'INPUT THE NUMBER:$' END START 4.34 从键盘输入一串字符,以$为结束符,存储在BUF中。用子程序来实现把字符串中的大写字母改成小写字母,最后送显示器输出。
.DATA 解: .MODEL SMALL
设备A中断请求信号连从片IR5引脚。说明设备A在一次I/O操作完成后通过两片8259A向8086申请中断,8086CPU通过两片8259A响应中断,进入设备A中断服务程序,发送中断结束命令,返回断点的全过程。
答: 设备A在一次I/O操作完成后在8259A从片中断请求输入端IR5上产生中断请求,中断请求被锁存在8259A从片IRR中,并经IMR“屏蔽”,其结果送给优先权电路判优。控制逻辑接收中断请求,向8259A主片IR2引脚输出INT信号,中断请求被锁存在8259A主片IRR中,并经IMR“屏蔽”,其结果送给优先权电路判优。控制逻辑接收中断请求,向CPU输出INT信号。CPU从INTR引脚接受8259A主片的INT信号,进入连续两个INTA 周期。优先权电路设臵ISR中的对应位,在收到第一个INTA 信号后, 8259A主片把当前申请中断的8259A从片的ID代码010,通过CAS0~CAS2送到相应的8259A从片。相应地8259A从片在收到第二个INTA 信号时,将中断类型号N送到数据线上。
8086CPU获得中断类型号N后,在N×4和N×4+2对应的中断向量表单元获取中断向量分别臵入IP和CS,从此进入设备A的中断服务程序。
在中断服务程序结束前(即执行IRET指令前),应分别向从片8259和主片8259发送EOI中断结束命令,然后执行IRET指令,返回断点。
18.某8086系统用3片8259A级联构成中断系统,主片中断类型号从10H开始。从片的中断申请连主片的IR4和IR6引脚,它们的中断类型号分别从20H、30H开始。主、从片采用电平触发,嵌套方式,普通中断结束方式。请编写它们的初始化程序。 答:设8259A主片的端口地址为20H(A0=0)和 21H(A1=1),第一个8259A从片的端口地址为 50H(A0=0)和 51H(A1=1),第二个8259A从片的端口地址为0A0H(A0=0)和 0A1H(A1=1),初始化程序如下:
主片:MOV AL,00010001B;1ICW:边沿触发,级联
OUT 20H,AL
MOV AL,00010000B;2ICW:中断类型号10H~17H OUT 21H,AL
MOV AL,01010000B;3ICW:4IR和6IR连有从片
OUT 21H,AL
MOV AL,00010001B;4ICW:特殊全嵌套,非缓冲,非自动中断结束
OUT 21H,AL
从片1: MOV AL,00010001B;1ICW:边沿触发,级联
OUT 50H,AL
MOV AL,00100000B;2ICW:中断类型号20H~27H OUT 51H,AL
MOV AL,00000100B;3ICW:INT引脚连主片4IR OUT 51H,AL
MOV AL,00000001B;4ICW:完全嵌套,非缓冲,
非自动中断结束
OUT 51H,AL
从片二: MOV AL,00010001B;1ICW:边沿触发,级联
OUT 0A0H,AL
MOV AL,00110000B;2ICW:中断类型号30H~37H OUT 0A1H,AL
MOV AL,00000110B;3ICW:INT引脚连主片6IR OUT 0A1H,AL
MOV AL,00000001B;4ICW:完全嵌套,非缓冲,
非自动中断结束
OUT 0A1H,AL
19.给下面的8259A初始化程序加上注释,说明各命令字的含义。 MOV AL, 13H
OUT 50H, AL ;初始化1ICW,设臵为边沿触发,单片工作
MOV AL, 08H
OUT 51H, AL ;中断类型号的高5位为00001B,即中断类型号为08H~0FH MOV AL, 0BH
OUT 51H, AL ;初始化4ICW,一般全嵌套缓冲方式,中断非自动结束
20.设8259A端口地址为20H和21H,怎样发送清除ISR3的命令? 答:8259A可通过设臵操作控制字OCW2发送中断结束命令(EOI命令),来清除ISR的指定 位。 OCW2的值为23H, OCW2用低位端口地址(即A0=0)进行操作,因此可编程如下: MOV AL,23H
MOV 20H,AL
第五章
1. 8255的A口工作在方式0,进行数据传送可采用_____。 A.无条件方式 B.查询方式
C.中断方式 D.条件方式或者无条件方式
2. 若8255的A口工作在方式2,B口可以工作在____方式。 A.方式0 B. 方式1 C.方式2 D.方式0,方式1
3. 8255应用在8088CPU系统中,假定其端口地址为60H、61H、62H、63H;如果将CPU换成086,此时PA端口仍然是60H,则其端口C的地址为_64H_____。
4. 当8255端口PA、PB分别工作在方式2、方式1时,其PC端口引脚为______.
A.2位I/O B. 2个4位I/O
C.全部作为应答联络线 D. 1个8位I/O
5. 当8255的A口工作在方式1,B口工作方式1时,C口仍然可按基本输入、输出方式工作的端口线有______。 A.0条 B. 2条 C.3条 D. 5条
6. 对8255的C口执行按位置位/复位操作时,写入的端口地址是______。
A. 端口A B. 端口B C.端口C D. 控制端口
7. 8255的引脚CS#,RD#,WR#信号电平分别为_____时,可完成“数据总线→8255数据寄存器”的操作
A. 1、1、0 B. 0、1、0 C. 0、0、1 D. 1、0、1
8. 要将8255的3个端口全部设定为方式0的输入,其设置的方式控制字为____。
A.98H B. 9BH C.9AH D.99H
9. 8255工作在方式1输入,PA口/PB口产生中断请求信号INTR的充要条件______。
A.STB#=1 B. STB#=0 C.IBF=1 D. IBF=0 E. INTE=1(P103)
10. 当8255工作在方式1,PA/PB口与外设之间的控制状态信号为STB#、OBF。( √ )
11. 8255的C口置位/复位操作控制字是从C端口写入的。( × )
12. 8255A的方式选择控制字和C口按位控制字的端口地址是否一样,8255A怎样区分这两种控制字?写出A端口作为基本输入,B端口作为基本输出的初始化程序。
答:8255A的方式选择控制字和C口按位控制字的端口地址是一样的,通过控制字的最高位D7进行区分:D7=1时,为方式选择控制字;D7=0时,为C口按位控制字。 初始化程序段如下: MOV DX,PORT ;PORT为端口地址 MOV AL,10010000B OUT DX,AL
13. 用8255A用作两台计算机并行通信的接口电路,请画出采用查询式输入/输出方式工作的接口电路,并写出采用查询式输入/输出方式的程序。8255用作两台计算机并行通讯接口
解:用两片8255作两台计算机8088_A与8088_B之间并行通信的接口电路,两片8255之间的连接如下图所示。两片8255均在方式1、查询方式下工作。
D7~D08255AA口A口8088-A地址译码A0A1CSA0A18255APC0B口PC6(ACK)8255BA口PC4(STB)PC08088-BCSA0A1地址译码A0A1D7~D0(1) 8088_A输出程序:
(8255_A的A口作为数据输出口,C口的PC0作为“数据输出选通”信号,负脉冲输出。C口的PC6作为“应答”信号输入,负脉冲有效。端口地址:
A口:200H,C口:202H,控制口:203H) DATA SEGMENT MOV DX,203H Buffer DB “This is a example. ”, MOV AL,0A0H 0DH, 0AH, -1 OUT DX,AL DATA ENDS MOV AL, 1 CODE SEGMENT OUT DX, AL START: MOV AX, DATA CALL DELAY MOV DS, AX NEXT: MOV DX, 202H LEA BX, Buffer IN AL, DL
TEST AL, 80H NOP JZ NEXT INC AL
OUT DX, AL MOV DX,200H
CMP BYTE MOV AL, [BX]
PTR[BX-1], -1 OUT DX, AL
JNE NEXT INC BX
MOV AX, 4C00H MOV DX, 203H
INT 21H MOV AL, 0
CODE ENDS OUT DX, AL
END START NOP
(2)8088_B输入程序:
(8255_B的A口作为输入,方式1,PC4作为“数据输入选通”信号,输入,负脉冲有效。PC0为“应答”信号输出,负脉冲有效。
端口地址:A口:210H,C口:212H,控制口:213H) DATA SEGMENT MOV DX, 210H
IN AL, DX Buffer DB 80 DUP(?)
MOV [BX], AL DATA ENDS
MOV DX, 212H CODE SEGMENT
MOV AL, 0 START: MOV AX, DATA
OUT DX, AL MOV DS, AX
INC BX LEA BX, Buffer
NOP MOV DX, 213H
NOP MOV AL, 0B0H
INC AL OUT DX, AL
OUT DX, AL MOV AL, 01H
CMP BYTE PTR[BX-1], -1 OUT DX, AL
JNE AGA CALL DELAY
MOV AX, 4C00H AGA: MOV DX, 212H
INT 21H IN AL, DX
CODE ENDS TEST AL, 20H
END START JZ AGA
14.8255与打印机的连接如图所示,设置8255A工作在方式0下,实现CPU与打印机之间的数据传送。设8255的控制端口为43H,试求:
①编写8255A的初始化程序。
②编写程序段将存于BL的字符送给打印机打印。
15. 8254一计数器通道工作在方式0,别的计数器通道可以工 作在_____。
A. 方式1、0 B. 方式2 C. 方式0 D. 任一方式 16. 8253计数器的最大初值是____。
A.10000H B. FFFFH C.0000H D.65536 17. 8254定时与计数是基于______工作原理。
A. 减“1”计数 B. 计数器减“1”计数 ,定时器加“1”计数 C. 加“1”计数 D. 计数器加“1”计数 ,定时器减“1”计数 18. 若要8254的计数过程中读取计数值应该____。 A.直接用IN指令读出CE的内容
B.先对8254写入一个锁存命令,将当前的CE内容锁存入 OL中,然后再用IN指令将OL的内容取到CPU中,再发出让OL停止锁存,OL的内容开始与CE同步。 C.先对8254写入一个锁存命令,将当前的CE内容锁存入OL中,然后再用IN指令将OL的内容取到CPU中,此后OL的内容开始与CE同步。
19. 8254的工作方式有_____,共有_____ 个I/O地址。 A. 3种、4 B. 4种、5 C. 6种、3 D. 6种、4 20. 8253工作在方式0,在初始化编程时,一旦写入控制字后,____。
A.输出信号端OUT变为高电平 B.输出信号端OUT变为低电平 C.输出信号保持原来的电位值 D.立即开始计数
21. 8254无论工作在哪种方式下,在初始化编程时,一旦写入控制字后输出端OUT便______。
A. 变为高电平 B.变为低电平 C. 变为相应的高电平或低电平 D. 保持原来状态不变,直至计数结束
22. 若8254的通道计数频率为1MHZ,每个通道的最大定时时间为____。
A.32.64ms B. 97.92ms C.48.64ms D.65.536ms 23. 8254的工作在方式2,每当计数器减“1”计数到____时,OUT输出一个宽度为_一个CLK的负脉冲____ 。
24. 8254中某个计数器工作在方式1,若输入时钟CLK为5 MHZ ,计数初值为n=1000,则CE=0时,OUT输出负脉冲的宽度为_0.2ms___。
25. 8254某个计数器工作在方式3,若输入时钟CLK为1MHZ ,要求OUT输出频率为20000 HZ ,那么写入的计数初值为 _50__。 26. 8254包括____个独立的,但结构相同的计数电路,他们分别是 计数器0 、 计数器1、 __计数器2__、 ____,共占用_4_ 个I/O地址,并由 端口地址线A1A0 选择。
27. 8254包括___3_个独立的,但结构相同的计数电路,他们有__6__种工作方式,若输入时钟CLK= 1MHZ ,计数初值为500,BCD计数方式,输出OUT1为方波,则初始化是该通道的控制字为_77H_。
28.8254初始化,计数初值一定要在写入控制字之后写入( √ )。
29.8254进行计数是最小值是0 ( × )。
30.对8254进行初始化,一旦写入计数初值后,计数执行部件就可开始工作。 ( √ )。
31. 设计一个用8255A作为8个七段显示器的接口电路,并设计一个把内存地址为ADDRA的8个数字在这8个七段显示器上显示的程序。
解:设8个七段显示器采用共阳接法,A口控制段的显示,B口控制位的显示。
端口地址 A口:200H,B口:201H,控制口:203H DATA SEGMENT CODE SEGMENT ADDRA DB ×,×,×,×,×,×,×,ASSUME CS: CODE, DS:
× DATA
START: MOV AX,
TABLE DB 40H, 4FH, MOV
DS, AX 24H, 30H, 19H
MOV AL, 80H DB 12H, 02H, 78H, 00H, MOV DX, 203H
10H
OUT DX, AL DISPBIT DB ?
LEA BX, TABLE DATA ENDS
MOV DISPBIT, 7FH DATA
LEA SI, ADDRA MOV DX, 201H MOV CX, 8 OUT DX, AL AGA: MOV AL, 0FFH ROR DISPBIT, 1 MOV DX, 201H INC SI OUT DX, AL CALL DELAY MOV AL, [SI] LOOP AGA XLAT MOV AX, 4C00H MOV DX, 200H INT 21H OUTDX, AL CODE ENDS MOV AL, DISPBIT END START
32. 8254的定时/计数器的定时与计数方式有什么区别?8254在方式0工作时,各通道的CLK、GATE信号有什么作用?各通道的控制字地址都相同,8254是怎样区分的?
解:1、8254作为计数器使用时,对CLK端的输入脉冲进行单纯的减法计数,这时CLK端输入的脉冲不作为计时基准。此外,用作计数器时,计数完成后必须重新初始化,只能使用一次。 8254作为定时器使用时,要求CLK端输入的脉冲必须作为时钟基准,通过对该基准时钟脉冲的计数来实现精确定时。用作定时器时,计数的过程周而往复,重复进行。
2、54工作在方式0时,CLK端输入计数用的脉冲信号;GATE信号为高电平时,对CLK端输入的脉冲进行计数;GATE信号为低电平时,暂停计数; GATE信号重新为高电平后,恢复原先的计数。
3、254的方式控制字中的D7、D6两位来选择计数通道。
33. 设8254的端口地址为0240H~0243H,通道0的输入CLK频率为1MHz,为使通道0输出1KHz的方波,编写初始化程序。如果让通道0与通道1级联(即OUT0接CLK1)实现1秒钟定时,则初始化程序如何编制。
解:1、通道0输出1KHz的方波:
计数初值为1MHz/1KHz = 1000,等于十六进制数03E8H,控制字设定为先写低位,后写高8位,方式3工作,二进制计数方式,所以控制字为36H。初始化程序如下: MOV AL,36H MOV AL,0E8H MOV DX,243H OUT DX,AL OUT DX,AL MOV AL,03H MOV DX,240H OUT DX,AL
2、通道0与通道1级联实现1秒定时:
要实现1秒定时,对1MHz输入脉冲进行分频的系数为1000000=5000×200。通道0工作在方式2,分频系数200,采用十进制计数,则通道0方式控制字为:25H。通道1工作在方式0,分频系数5000,也采用十进制计数,则通道1方式控制字为:61H。初始化程序如下: MOV AL,25H MOV AL,02H MOV DX,243H OUT DX,AL OUT DX,AL MOV AL,50H MOV AL,61H MOV DX,0241H OUT DX,AL OUT DX,AL MOV DX,0240H
如果要再次进行1秒钟定时,则需要对通道1重新初始化。如果需要连续的1秒定时信号,则通道1应选用方式3。 对总数为1000000的分频系数,可以有多种分解方法。
34. 编制一个使PC机的8254产生600Hz方波的程序,并使该方波送至扬声器发声。
解:PC机中利用8254定时器的通道2来驱动扬声器。通道2的工作及其输出受到主板上8255A的PB口(口地址61H)控制:GATE2接PB0,即PB0=1时,定时器才可能工作;OUT2与PB1相与后输出到扬声器,即PB1=1时,定时器2的OUT2才能输出到扬声器。
定时器的输出波形是对1.1931MHZ频率信号分频得到的,因此将定时器2工作在方式3,分频系数用下式计算:
分频系数=1193100÷给定频率 (1193100=12348CH) 因此程序如下: MOV AL,0B6H MOV AL,AH OUT 43H,AL OUT 42H, AL MOV DX,12H IN AL,61H MOV AX,348CH OR AL,3 MOV DI,600 OUT 61H,AL DIV DI
OUT 42H, AL
35. 使用8254用软件产生一次性中断,最好采用什么工作方式?若计数初值送到计数器0后经过20ms产生一次中断,应该如何
编写程序? 解:(设时钟频率CLK为2MHZ,8253A的端口地址为20H~23H) 分析:产生一次性中断,只要单次计数,计数满发出中断请求信号即可,故最好使用方式0;已知CLK频率和输出延迟时间,
6 -3
故可以算出数据初值N=2*10 *20*10 =4000,因为N较大,选16位计数器。 程序如下:
MOV AL,00110000B OUT 20H,AL OUT 23H,AL STI MOV AX,4000 : OUT 20H,AL : MOV AL,AH
36. 某微机控制系统采用8254每隔一分钟产生一次中断请求信号,设IRQ2的中断类型为0AH,中断服务程序的入口地址为INTR2,8254的端口地址为50H—53H,画出电路图,并写出8254的初始化程序且将中断服务程序的入口地址送入中断向量表中。 解:因为Tclk0=1/1M=1微秒,OUT0无法输出1分钟的定时信号,为此对CLK0进行几分频,将计数器0与计数器1串联,OUT0输
7
出信号作为CLK1输入时钟。故有N0*N1=6*10 ,取n0=10000,n1=6000。
计数器0的方式控制字:00110111B,计数器1的方式控制字:01110110B 程序如下:
MOV AL,00110100B OUT 51H,AL OUT 53H,AL . MOV AX,10000 . OUT 50H,AL MOV BX,4*0AH MOV AL,AH MOV AX,OFFSET INTR2 OUT 50H,AL MOV DX,SEG INTR2 MOV AL,01110110B MOV [BX],AX OUT 53H,AL MOV [BX+2],DX MOV AX,6000 STI OUT 51H,AL HLT MOV AL,AH
37. 已知加在8254上的外部计数器频率为1MHz,是说明若不增
正在阅读:
现代微机复习试题答案01-11
我最敬佩的一位名人作文200字02-04
2011理论热点面对面 - - - 从怎么看到怎么办07-04
教师廉洁文化进校园的征文202-20
海氏评估系统因素表及说明12-07
2020年河南省信阳市浉河区烟草专卖局(公司)招聘试题及解析08-21
制定制度12-12
泪水作文600字07-01
《采薇》优秀教案04-23
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 微机
- 试题
- 复习
- 答案
- 现代
- ISO13485:2016内审员试卷及答案
- 六年级减负
- 2014届商务英语专业毕业设计指导手册 - 图文
- 财务管理期末复习练习题
- 恒大地产济南公司施工指引1130 - 图文
- 毛概试卷
- 100万袋黑木耳种植基地建设项目可行性研究报告
- 东财 专升本 成本会计 随堂练习答案
- 氨基酸代谢和核苷酸代谢
- (2015.03.01-国务院令第658号)中华人民共和国政府采购法实施条例
- 浅谈我国公务员考核制度中的廉政考核
- 全国2014年04月自学考试00152《组织行为学》历年真题
- 中国人民大学财政金融学院研究生导师简介 张鹤
- 外科学重点简答题大全(含答案)
- 青岛各区市介绍
- 高考科幻小说阅读方法指导
- 丽水市南城四都区块控制性详细规划 - 图文
- 沪教版六年级数学上册试卷
- 谭里兵--门系统机械故障分析与研究
- C语言练习--数组与字符串编程