第一章
1、在8086变址寻址方式中,操作数的物理地址等于( ) A.段寄存器左移四位加上变址寄存器的内容
B.段寄存器左移四位加上变址寄存器的内容再加上给定的偏移量
C.段寄存器左移四位加上变址寄存器的内容再加上基址寄存器的内容
D.段寄存器左移四位加上基址寄存器的内容再加上给定的偏移量
2、段地址为3900H,偏移地址为5200H,则物理地址为( ) A.8B00H B.3E200H C.44200H D.55900H 3、8086能寻址内存储器的最大地址范围为( ) A.KB 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条,存储单元为字节,使用全译码方式组成存储器,该系统构成最大容量需要K×1位的存储器芯片的数量是( )
A.16 B.32 C. 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(位),也可表示为Kb=8KB(字节)
5.组成8K字节的存储器,需要256×4位的存储器芯片( )。 A.32片 B.片 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条,数据线为,则 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. 利用全地址译码将62芯片接到8088系统总线上,地址范围为30000H~31FFFH,画出逻辑图。 答:全地址译码可以保证存储器芯片上的每一个单元在整个内存
空间中具有唯一的、独占的一个地址。62芯片有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. 若用21芯片构成容量为128KB的存储器,需多少片21? 至少需多少根地址线? 其中多少根用于片内寻址? 多少根用于片选译码?
答:21A是容量为K×1位的地图随机存储器芯片,构成128KB的存储器需要21芯片16片[128K×8/(K×1)=16]。由于地址空间为128K,需要的地址线总线为17根(217=28根)。其中,片内地址线16根(216=K),片选地址线1根(17—16=1)。每8个21芯片构成一组,进行位扩展,得到KB存储器。两个这样的“组”进行地址扩展,构成128KB的存储器。
14. 某8088系统用27ROM芯片和62SRAM芯片构成16KB的内存。其中,RAM的地址范围为FC000H-FDFFFH,ROM的地址范围为FE000H-FFFFFH。试利用74LS138译码,画出存储器与CPU的连接图,并标出总线信号名称。 答:27和62均为8KB的存储芯片,需要13根地址线(A0~A12)用于片内寻址。8080系统的其他地址线(A13~A19)用于产生片
选信号。
FC000H的地址线状态为: 1111 110 0 0000 0000 0000 FE000H的地址线状态为: 1111 111 0 0000 0000 0000
将A13~A15用作译码输入,其他地址(A16~A19=1111)用作译码控制,可以得到如下译码控制电路,连接如下图所示:
15. 存储周期指的是( )。
A.存储器进行连续读或写操作所允许的最短时间间隔 B.存储器的读出周期
C.存储器进行连续写操作所允许的最短时间间隔 D.存储器的写入周期
16.某一EPROM芯片,其容量为32K×8,除电源和地线外,最小的输入引脚和输出引脚分别为( )。
A. 15和8; B.32和8; C.17和8; D.18和10;
17.掩膜ROM在制造时通过光刻是否连接MOS管来确定0和1,如果对应的某存储单元位没有连接MOS管,则该位信息为( )。 A.不确定; B. 0; C.1; D.可能为0,也可能为1
18. SRAM和DRAM存储原理不同,它们分别靠( )来存储0和1的。
A.双稳态触发器的两个稳态和极间是否有足够的电荷 B.内部熔丝是否断开和双稳态触发器 C.极间电荷和浮置栅是否积累足够的电荷
D.极间是否有足够的电荷和双稳态触发器的两个稳态
第三章
3.1 如果用24b储存一个无符号数,这个数的范围是什么?如果储存的是一个补码表示的有符号数,那么这个数的范围又是什么?
答:如果用24b储存一个无符号数,这个数的范围应为:0~224-1 如果用24b储存一个补码表示的有符号数,这个数的范围应为:-223~223-1
3.2 用符号“>”把下面的数按从大到小的顺序“连接”起来
[X1]补=10110111 [X2]原=10110111 [X3]反=1011011 [X4]补=10110110 [X5]无符号数=10110111 解:X1=-0100 1001B, X2=-011 0111B, X3=-0100 1000B, X4=-0100 1010B, X5=+1011 0111B
因此:X5>X2>X3>X1>X4
3.3 用8位补码完成下列运算,用十进制“真值”的格式给出运算结果,并指出运算后CF、OF、ZF、SF、PF标志位的状态。
(1)127+126 (2)126-127 (3)-100-120 (4)-100-(-120) 解:(1) [127]补=0111 1111,[126]补=0111 1110,
[127+126]补=1111 1101,[127+126]=-0000 0011(溢出)COZSP=01010
(2) [126]补= 0111 1110,[-127]补=1000 0001,
[126-127]补=1111 1111,[126-127]=-000 0001,COZSP=10011 (3)- [-100]补=1001 1100,[-120]补=1000 1000,
[-100-120]补=0010 0100,[-100-120]=+0010 0100(溢出),COZSP=01001
(4) [-100]补=1001 1100,[-120]补=1000 1000,[-100-(-120)]补=0001 0100,[-100-(-120)]=+0001 0100,COZSP=00001
3.4 把二进制代码1001011101011000分别“看作”是:
(1)二进制无符号数 (2)二进制补码 (3)压缩BCD码 (4)非压缩BCD码
哪一种情况下它代表的“值”最大? 答:看做二进制无符号数时,它代表的“值”最大。 分析:看作二进制补码时,它代表一个负数,而其他的情况下,它均正数。因此,看作二进制补码时,它代表的值最小。 把这组代码用十六进制数字形式写出:9758 对于无符号数,它的值等于十六进制的9758H; 对于压缩BCD码,它的值等于十六进制的9758,显然小于9758H; 对于非压缩BCD码,它的值等于十进制的78,显然更小于9758H; 因此,看作二进制无符号数时,它代表的“值”最大。 3.5 某数据段内有如下数据定义: 1EH 0020H 30H X db 30, 30H, ‘ABC’, 2-3, ?, 11001010B 41H 42H dw 0FFH,-2, “CD” 43H Y dd 20 dup(15, 3 dup(?), 0) 0FFH 00H Z db 3 dup(?) 0CAH W dw Z-X 假设变量X的偏移地址为20H。 (1)写出变量X各数据在内存中的具体位置和相关内存单元的值。 (2)写出变量Y,Z的偏移地址。 0FFH 00H (3)写出变量W的值。 0FEH 0FFH 答:(1)变量X各数据在内存中的具体位置和相关内存单元的值44H 如右图。 43H (2)变量Y的偏移地址为002H;变量Z的偏移地址为002EH+4520=01BEH (3)变量W的值等变量Z和X偏002EH 移地址之差01BEH-0020H=019EH 它等于X、Y所占用内存单元的字节数。 3.6 下列指令的源操作数段基址在哪个段寄存器中? (1)MOV AX, [BP][SI] SS (2)MOV AX, CS:8[DI] CS (3)MOV AX, 2[EBP*1] SS (4)MOV AX, FS:4[ESP] FS (5)MOV AX, 2[EBP][EAX] SS (6)MOV AX, [ECX][EBP*4] DS
X Y
(7)MOC AX, [EDX][EBP] DS (8)MOV AX,ES:10[EBP][EAX*2] ES
3.7 判断下列指令是否正确。若不正确,指出错误原因 (1)MOV AX, [EBX] √
(2)MOV SI, DL ×,两个操作数类型不匹配。 (3)MOV EBP,[ESP][EAX*3] ×,比例因子不能为3。
(4)LEA AX, 3006H ×,LEA指令的源操作数必须为内存操作数。
(5)MOV [BP][DI], 0 ×,操作数类型无法确定。 (6)MOV [SI], [DI]是 ×,不能同时出现两个内存操作数。
(7)MOV ES, 1000H ×,装载段寄存器时,源操作数不能为立即数。 (8)如果“X”是常数表达式定义的符号(例如:X EQU 5+6),或者是“DW”定义的内存变量,指令MOV AX, X+2是正确的。否则这条指令是错误的。
(9)MOV AX, CX+2 ×,源操作数表达式CX+2不是一个可以直接计算的“常数表达式”。 (10)指令MOV [EAX][EAX*2], AL √
3.8 现有(DS)=2000H ,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21203H)=65H,说明下列指令执行后AX寄存器的内容 (1)MOV AX, 1200H 执行后,(AX)=1200H(立即操作数)。
(2)MOV AX, BX 执行后,(AX)=0100H(寄存器操作数)。
(3)MOV AX, [1200H] 执行后,(AX)=4C2AH(直接地址,EA=1200H)
(4)MOV AX, [BX] 执行后,(AX)=3412H(寄存器间接寻址,EA=0100H)
(5)MOV AX, 1100H[BX] 执行后,(AX)=4C2AH(相对地址,EA=1200H)
(6)MOV AX, [BX][SI] 执行后,(AX)=7856H(基址变址寻址,EA=0102H)
(7)MOV AX, 1100H[BX][SI] 执行后,(AX)=65B7H(相对基址变址寻址EA=1202H)
3.9 下面两条指令的功能有什么区别?
MOV AX, BX:把BX寄存器的内容装入到AX中。
MOV AX, [BX] :把内存储器一个字的内容装入AX寄存器。该字的段基址在DS中,偏移地址在BX中。 3.10 写出执行以下计算的指令序列,各变量均为16位有符号数。 (1) Z←W+(Z-X) (2) Z←W-(X+6)-(R+9) (3) Z←(W*X)/(Y+6), R←余数 (4) Z←(W-X)/(5*Y)*2 解:
ADD AX, BX (1) MOV AX, W
MOV Z, AX MOV BX, Z
SUB BX , X
MOV BX, R (2) MOV AX, W
ADD BX, 9 MOV BX, X
SUB AX, BX ADD BX, 6
MOV Z, AX SUB AX, BX
IDIV BX (3) MOV AX, W
MOV Z, AX IMUL X
MOV R, DX MOV BX, Y
ADD BX, 9
SUB AX, X (4) MOV AX, Y
MOV CX, 2 MOV BX, 5
IMUL CX IMUL BX
IDIV BX MOV BX, AX
MOV Z, AX MOV AX, W
3.11 一个双字长有符号数存放在DX(高位)AX(低位)中,写出求该数相反数的指令序列。结果仍存入DX,AX寄存器。
NOT AX 解:NOT DX
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 , 23, 15, -92, 37 ;每一行DW 123, -52, 77, -180, 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 3671 ;一个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 „01234567ABCDEAND 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.KB 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。
NEG BX 答: PUSH AX
SKIP2: CMP AX, BX PUSH BX
POP BX AND AX, AX
POP AX JGE SKIP1
JGE SKIP3 NEG AX
XCHG AX, BX SKIP1: AND BX, BX
SKIP3: …… JGE SKIP2
4.10编写指令序列,如果AL寄存器存放的是小写字母,把它转换成大写字母,否则不改变AL内容。
JA DONE 答: CMP AL, ‘a’
SUB AL, ‘a’-‘A’ JB DONE
CMP AL, ‘z’ DONE: ……
4.11 计算分段函数:
X的值从键盘输入,Y的值送显示器输出。
L2: CMP AX, 3 答: INCLUDE YLIB.H
JG L3 DATA SEGEMNT
MESS1 DB 0DH, 0AH, „Input MOV BX, AX
ADD AX, AX ;AX←2X value of X please : $‟
MESS2 DB 0DH, 0AH, „ Y= : ADD AX, AX ;AX←4X $‟ ADD AX, BX ;AX←5X DATA ENDS ADD AX, 6 ;AX←5X+6 CODE SEGMENT JMP DONE ASSUME CS: CODE, DS: DATA L3: MOV AX, 2 ;AX←2 START: MOV AX, DATA DONE: LEA DX, MESS2 MOV DS, AX CALL WRITEINT LEA DX, MESS1 CALL CRLF CALL READINT MOV AX, 4C00H CMP AX, -2 INT 21H JGE L2 CODE ENDS L1: SUB AX, 3 ;AX←X-3 END START JMP DONE
4.12 计算分段函数:
A,B的值从键盘输入,Y的值送显示器输出(∧表示“并且”, ∨表示“或者”)。
答: INCLUDE YLIB.H JL L1 ;A<0,转L1 DATA SEGEMNT JNZ SKIP1 MESS1 DB 0DH, 0AH, „Input CMP B, 0 the value of A please : $‟ JZ L2 ;A=0 MESS2 DB 0DH, 0AH, „Input && B=0,转L2 the value of B please : $‟ JMP EXIT MESS3 DB 0DH, 0AH, „Y= : SKIP1: CMP B, 0 $‟ JLE EXIT
A DW ? L3: MOV AX, A B DW ? SUB AX, B DATA ENDS JMP DISP CODE SEGMENT L2: MOV AX, 2 ASSUME CS: CODE, DS: JMP DISP DATA L1: MOV AX, A
START: MOV AX, DATA ADD AX, B
MOV DS, AX DISP: LEA LEA DX, MESS1 DX, MESS2 CALL READINT CALL WRITEINT MOV A, AX CALL CRLF LEA DX, MESS2 EXIT: MOV AX, CALL READINT 4C00H
MOV B, AX INT 21H AND AX, AX CODE ENDS JL L1 ;B<0,转L1 END STARTCMP A, 0
说明:如果把A、B看作是平面直角坐标的两根轴,那么这个函数在A,B的正轴上无定义。无法计算,也无法输出结果
4.13 编写程序,求10元素字数组LIST中绝对值最小的数,存入MIN单元。
-5, 16, 32, -99, 72, -18 答: DATA SEGEMNT
MIN DW ? LIST DW -56, +12, 88, -126,
MINABS DW ? JGE SKIP1 DATA ENDS NEG AX CODE SEGMENT SKIP1: CMP AX, MINABS ASSUME CS: CODE, JGE SKIP2
DS: DATA MOV MINABS, AX
START: MOV AX, DATA MOV AX, [SI]
MOV DS, AX MOV MIN, AX MOV AX, LIST SKIP2: ADD SI, 2 MOV MIN, AX LOOP AGAIN
MOV MINABS, 32767 MOV AX, 4C00H
LEA SI, LIST INT 21H MOV CX, 10 CODE ENDS AGAIN: MOV AX, [SI] END START
CMP AX, 0
说明:一定要预设最小的绝对值和绝对值最小的数,而且这个绝对值最小的数必须来 自LIST数组。
4.14 编写程序,求20元素无符号字数组ARRAY中最小的奇数,存入ODD单元,如果不存在奇数,将ODD单元清零。
TEST AX, 1 答: DATA SEGEMNT
JZ SKIP ARRAY DW 56, 12, 88,
INC BX 126, 5, 16, 32, 99, 72, 18
CMP AX, ODD DW 116, 34, 92, 32, 156, 42,
JGE SKIP 816, 16, 15, 218
MOV ODD, AX ODD DW ?
SKIP: ADD SI, 2 DATA ENDS
LOOP AGAIN CODE SEGMENT
CMP BX, 0 ASSUME CS: CODE, DS: DATA
JNZ DONE START: MOV AX, DATA
MOV ODD,0 MOV DS, AX
DONE: MOV AX,4C00H MOV BX, 0
INT 21H MOV ODD, 65535
CODE ENDS LEA SI, ARRAY MOV CX, 20
END START AGAIN: MOV AX, [SI]
4.15 一个有符号字数组以0为结束标志,求这个数组的:最大值、最小值、平均值。
88, -126, -5, 16, 32, -99, 72, -18, 答: DATA SEGEMNT
0
LIST DW -56, +12,
MIN DW ? AX,MIN MAX DW ? JGE SKIP1 AVG DW ? MOV MIN. AX DATA ENDS SKIP1: CMP AX, MAX CODE SEGMENT JLE SKIP2 ASSUME CS:CODE,DS: DATA MOV MAX, AX START: SKIP2: ADD SI,2 MOV AX, DATA JMP AGAIN MOV DS, AX DONE: JCXZ NULL MOV MIN, 32767 MOV AX, AVG
MOV MAX, CWD -32768 IDIV CX MOV AVG, 0 MOV AVG, AX LEA SI, LIST JMP EXIT MOV CX, 0 NULL: MOV MIN, 0
AGAIN: MOV AX, [SI] MOV MAX, 0
CMP AX, 0 MOV AVG, 0 JZ DONE EXIT: MOV AX, 4C00H INC CX INT 21H ADD CODE ENDS
END START AVG,AX
CMP
4.16 数组SCORE中存有一个班级40名学生的英语课程成绩。按照0~59,60~74,75~84,85~100统计各分数段人数,存入N0,N1,N2,N3变量内。
MOV N0, 0 答: DATA SEGEMNT
MOV N1, 0
SCORE DW 40 DUP(?)
MOV N2, 0
N0 DW ?
MOV N3, 0
N1 DW ?
LEA SI,
N2 DW ?
SCORE
N3 DW ?
MOV CX, 40
DATA ENDS
AGAIN: MOV AX, [SI]
CODE SEGMENT
CMP AX, 59
ASSUME CS: CODE, DS:
JA L1
DATA
L0: INC N0
START:MOV AX,DATA
JMP NEXT
MOV DS, AX
L1: CMP AX, 74 JA NEXT JA L2 INC N3 INC N1 NEXT: ADD SI, 2 JMP NEXT LOOP AGAIN L2: CMP AX, 84 EXIT: MOV AX, 4C00H JA L3 INT 21H INC N2 CODE ENDS
END START JMP NEXT
L3: CMP AX, 100
4.17 STRING是一个16个字符组成的字符串,RULE是一个字整数。编写程序,测试STRING中的每一个字符,如果该字符为数字字符,把RULE中对应位置1,否则置0。
RULE, 1 答: DATA SEGEMNT
MOV AL, [SI]
STRING DB 16
CMP AL,’0’
DUP(?)
JB NEXT
RULE DW ?
CMP AL, ‘9’
DATA ENDS
JA NEXT
CODE SEGMENT
OR RULE, 11
ASSUME CS: CODE, DS: DATA
NEXT: INC SI
START: MOV AX, DATA
LOOP AGAIN
MOV DS, AX
EXIT: MOV AX, 4C00H
MOV RULE, 0
INT 21H
LEA SI, STRING
CODE ENDS
MOV CX, 16
END START
AGAIN: SHL
4.18 编写程序,从键盘上输入一个无符号字整数,用“四进制” 格式输出它的值(也就是,每2位二进制看作一位四进制数,使用数字0~3)。
DATA ENDS 答: INCLUDE YLIB.H
CODE SEGMENT
DATA SEGEMNT
ASSUME CS: CODE, DS:
MESS1 DB 0DH,
DATA
0AH, ‘Input a number please : $’
START: MOV AX, DATA
MESS2 DB 0DH,
MOV DS, AX
0AH, ‘The number in
LEA DX, MESS1
quardri_system is: $’
CALL READDEC
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
BUF DB 100 DUP (?) INC CX .CODE INC BX START: MOV AX, JMP NEXT @DATA EXIT: POP BX RET
MOV DS, AX KEYIN ENDP LEA BX, BUF CONVERT PROC CALL KEYIN CONVERT1: MOV AL, CALL CONVERT [BX] LEA DX, BUF CMP AL, 'A' MOV AH, 09H JB NEXT1 INT 21H CMP AL, 'Z'
MOV AX, 4C00H JA NEXT1
INT 21H ADD BYTE
KEYIN PROC PTR [BX], 20H
PUSH BX NEXT1: INC BX MOV CX, 0 LOOP
NEXT: MOV AH, 01H CONVERT1
INT 21H RET MOV [BX], AL CONVERT ENDP CMP AL, '$' END START JZ EXIT
4.35 从键盘输入一个字符串(长度<80),若该字符串不包括非数字字符,则显示“YES”,否则显示“NO”。设计一个过程,判断字符串是否为纯数字符。
LEA DX, STRING 解: .386
INT 21H DATA SEGMENT USE16
STRING DB 80, ? , 81 MOV CL, STRING+1
MOV CH, 0 DUP(?)
MOV SI, 2 YES DB 0DH, 0AH, 'YES. $'
CALL EXAM NO DB 0DH, 0AH, 'NO. $'
CMP AH, 0 DATA ENDS
JE NOMESS CODE SEGMENT USE16
ASSUME CS: CODE, DS: LEA DX, YES
JMP DISP DATA
NOMESS: LEA DX, NO START: MOV AX, DATA
DISP: MOV AH, 09H MOV DS, AX
INT 21H MOV AH, 0AH
MOV AX, 4C00H JA EXIT
INT 21H INC SI
EXAM PROC LOOP NEXT
MOV AH, 1 JMP EXIT1
NEXT: MOV AL, EXIT: MOV AH, 0 STRING [SI] EXIT1: RET
CMP AL, '0' EXAM ENDP JB EXIT CODE ENDS CMP AL,'9' END START
4.36 编写完整程序,调用READINT子程序,从键盘读入一个带符号整数,以二进制格式输出它的补码。
CALL DISP 解: INCLUDE YLIB.H
CALL CRLF DATA SEGMENT
MOV AX, 4C00H NUM DW ?
INT 21H PROMPT1 DB 0DH,
DISP PROC 0AH, 'INPUT A NUMBER: $'
MOV CX, 16 PROMPT2 DB 0DH,
MOV BX, AX 0AH, 'THE COMPLEMENT IS:$'
NEXT: ROL BX, 1 DATA ENDS
RCL DL, 1 CODE SEGMENT
AND DL, 01H ASSUME CS:CODE,DS: DATA
OR DL, 30H START: MOV AX, DATA
MOV AH, 02H MOV DS, AX
INT 21H LEA DX, PROMPT1
LOOP NEXT CALL READINT
RET PUSH AX
DISP ENDP LEA DX, PROMPT2
CODE ENDS MOV AH, 09H
END START INT 21H
POP AX
4.37设计一个子程序,求带符号字数组中绝对值最大的数,并返回其他地址和该数。
入口参数:DS:SI=数组首地址,CX=元素个数(大于0)。
出口参数:ES:DI=绝对值最大的数所在的地址,AX=绝对值最大的数。
PUSH SI 解:MAXABS PROC
PUSH DS PUSH CX
POP ES
XOR AX,AX
NEXT: MOV BX, WORD PTR [SI]
AND BX, BX JZ OK NEG BX
OK: CMP BX, AX
JLE SKIP
4.38 编写一个子程序,以AX为入口参数,把AX中的各个二进制位颠倒次序后还放回AX中。比如,入口参数AX=1011000111101001B,处理后AX应为1001011110001101B。
LOOP NEXT 解: INVERT PROC
MOV AX,BX PUSH CX
POP BX PUSH BX
POP CX MOV CX, 16
RET NEXT: ROL AX,1
INVERT ENDP RCR BX,1
4.39 编写子程序,入口参数是一个字型数据,存放在AX中,统计该字的16个二进制位中含有多少个1和多少个0。 解: DATA SEGMENT NUM COUNT PROC DW 1234H ZERO DB 0 ONE PUSH BX
MOV BX,0 DB 0
NEXT: ROL AX,1 DATA ENDS
ADC BX,0 CODE SEGMENT
LOOP NEXT ASSUME DS: DATA, CS: CODE
MOV BH, 16 START: MOV AX,DATA
SUB BH, BL MOV DS,AX
MOV AX,BX MOV AX,NUM
POP BX MOV CX,16
RET CALL COUNT
COUNT ENDP MOV ONE,AL
CODE ENDS MOV ZERO,AH
END START MOV AX,4C00H
INT 21H
4.40 使用串操作指令,在STRING字符串中查找有无字符 ‘A’,
MOV AX, BX MOV DI, SI
SKIP: ADD SI, 2
LOOP NEXT POP SI POP CX RET
MAXABS ENDP
如有将标志flag置1,否则将flag清0。
4.41 字符串STRING以1字节0为结束标志。在STRING中查找空格,记下最后一个空格的位置,存放在变量SPACE中。 如果没有空格,置SPACE为-1。
4.42 两个字符串str1与str2以“$”字符结束,比较它们的长度是否相同,如果相同,在屏幕上显示“Yes”,否则显示 “No”。 1.CPU对INTR中断请求的响应过程是执行( )INTA总线周期。 A.1个 B.2个 C.3个 D.4个 2.内部中断的中断类型码是由( )。
A.外设提供 B.接口电路提供 C.指令提供或预先设定 D.I/O端口提供 3. CPU响应单个屏蔽中断的条件是( )。
A.CPU开中断 B.外设有中断请求信号 C.外设中断请求信号不屏蔽
D.同时满足ABC,且正在执行的指令执行完
4.响应可屏蔽中断后,8088是在( )读取中断向量 A.保存断点后 B.第一个中断响应周期 C.第二个中断响应周期 D.T4前沿 5.CPU马上响应中断的必要条件是( )。
A.CPU处于关中断状态 B.一条指令执行完 C.正在响应更高级别的中断 D.正在执行DMA操作
6.CPU收到中断类型码后,将它左移( )位,形成中断向量的起始地址。
A.2 B.4 C.8 D.16
7.CPU响应中断后得到的中断类型号是9,则从( )单元取出中断服务程序的入口地址。
A.0009H B.00009H C.00024H D.0024H
8.当多片8259A级联使用时,对于从片8259A,级联信号CAS0-CAS2是( )
A.输入信号 B.输出信号 C.全部信号 D.中断信号
9.PC机采用向量中断方式处理8级外中断,中断号依次为08H-0FH,在RAM 00:2CH单元开始依次存放23H、FFH、00H和F0H 4个字节,该向量对应的中断号和中断程序入口是( )。 A.OCH,23FFH:00F0H B. OBH,F000H:FF23H C.OBH,00F0H:23FFH D. OCH,F000H:FF23H
10.8086CPU响应中断时,自动压入堆栈的内容有_CS_,_IP__以
及_状态标志寄存器的内容。
11.8088/8086中断分为硬件中断和软件中断,其中响应过程都要把_FR__和_断点地址__推入堆栈,且对相应标志位_TF__和_IF__清零。
12.对于8259A可编程控制器,当其单片使用时可同时接收_①_外设的中断请求;当级联使用时,其主片的_②_ 应于从片的_③_ 连接。
① A.8个 B. 12个 C.4个 D.16个 ② A.SP#/EN# B.CS# C.INTA# D.IRi(i=0~7) ③ A.INT B.INTA# C.CS# D.CASi(i=0~2)
13.有3片8259A级联,从片分别接入主片的IR2和IR5,则主片8259A的ICW3中的内容为_①_;2片从片8259A的ICW3的内容分别为_②_。
① A.48 B. 24 C.12 D.42
② A.00H,01H B.20H,40H C.04H,08H D.02H,05H
14.有2片8259A级联,从片接入主片的IR2,则主片8259A的初始化命令字ICW3应为
_0000 0100,命令字ICW3应为_0000 0010。
15.什么是中断向量?中断类型为1FH的中断向量为2345H:1234H,画图说明它在中断向量表中的安置位置。
答:中断服务程序的入口地址称为中断向量。中断类型为1FH,它的中断向量放置在1FH×4=0000: 7CH开始的位置上。如下图。
16.8259A工作在8086模式中,中断向量字节ICW2=0AH,若IR3处有一中断请求信号,这时它的中断向量号是_0DH__,该中断的服务程序入口地址保存在内存地址为______至______的______个单元中。
17.某系统中有两片8259A,从片的请求信号连主片的IR2引脚,
设备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的地址为_H_____。
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. 82一计数器通道工作在方式0,别的计数器通道可以工 作在_____。
A. 方式1、0 B. 方式2 C. 方式0 D. 任一方式 16. 8253计数器的最大初值是____。
A.10000H B. FFFFH C.0000H D.65536 17. 82定时与计数是基于______工作原理。
A. 减“1”计数 B. 计数器减“1”计数 ,定时器加“1”计数 C. 加“1”计数 D. 计数器加“1”计数 ,定时器减“1”计数 18. 若要82的计数过程中读取计数值应该____。 A.直接用IN指令读出CE的内容
B.先对82写入一个锁存命令,将当前的CE内容锁存入 OL中,然后再用IN指令将OL的内容取到CPU中,再发出让OL停止锁存,OL的内容开始与CE同步。 C.先对82写入一个锁存命令,将当前的CE内容锁存入OL中,然后再用IN指令将OL的内容取到CPU中,此后OL的内容开始与CE同步。
19. 82的工作方式有_____,共有_____ 个I/O地址。 A. 3种、4 B. 4种、5 C. 6种、3 D. 6种、4 20. 8253工作在方式0,在初始化编程时,一旦写入控制字后,____。
A.输出信号端OUT变为高电平 B.输出信号端OUT变为低电平 C.输出信号保持原来的电位值 D.立即开始计数
21. 82无论工作在哪种方式下,在初始化编程时,一旦写入控制字后输出端OUT便______。
A. 变为高电平 B.变为低电平 C. 变为相应的高电平或低电平 D. 保持原来状态不变,直至计数结束
22. 若82的通道计数频率为1MHZ,每个通道的最大定时时间为____。
A.32.ms B. 97.92ms C.48.ms D.65.536ms 23. 82的工作在方式2,每当计数器减“1”计数到____时,OUT输出一个宽度为_一个CLK的负脉冲____ 。
24. 82中某个计数器工作在方式1,若输入时钟CLK为5 MHZ ,计数初值为n=1000,则CE=0时,OUT输出负脉冲的宽度为_0.2ms___。
25. 82某个计数器工作在方式3,若输入时钟CLK为1MHZ ,要求OUT输出频率为20000 HZ ,那么写入的计数初值为 _50__。 26. 82包括____个的,但结构相同的计数电路,他们分别是 计数器0 、 计数器1、 __计数器2__、 ____,共占用_4_ 个I/O地址,并由 端口地址线A1A0 选择。
27. 82包括___3_个的,但结构相同的计数电路,他们有__6__种工作方式,若输入时钟CLK= 1MHZ ,计数初值为500,BCD计数方式,输出OUT1为方波,则初始化是该通道的控制字为_77H_。
28.82初始化,计数初值一定要在写入控制字之后写入( √ )。
29.82进行计数是最小值是0 ( × )。
30.对82进行初始化,一旦写入计数初值后,计数执行部件就可开始工作。 ( √ )。
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. 82的定时/计数器的定时与计数方式有什么区别?82在方式0工作时,各通道的CLK、GATE信号有什么作用?各通道的控制字地址都相同,82是怎样区分的?
解:1、82作为计数器使用时,对CLK端的输入脉冲进行单纯的减法计数,这时CLK端输入的脉冲不作为计时基准。此外,用作计数器时,计数完成后必须重新初始化,只能使用一次。 82作为定时器使用时,要求CLK端输入的脉冲必须作为时钟基准,通过对该基准时钟脉冲的计数来实现精确定时。用作定时器时,计数的过程周而往复,重复进行。
2、工作在方式0时,CLK端输入计数用的脉冲信号;GATE信号为高电平时,对CLK端输入的脉冲进行计数;GATE信号为低电平时,暂停计数; GATE信号重新为高电平后,恢复原先的计数。
3、2的方式控制字中的D7、D6两位来选择计数通道。
33. 设82的端口地址为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机的82产生600Hz方波的程序,并使该方波送至扬声器发声。
解:PC机中利用82定时器的通道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. 使用82用软件产生一次性中断,最好采用什么工作方式?若计数初值送到计数器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. 某微机控制系统采用82每隔一分钟产生一次中断请求信号,设IRQ2的中断类型为0AH,中断服务程序的入口地址为INTR2,82的端口地址为50H—53H,画出电路图,并写出82的初始化程序且将中断服务程序的入口地址送入中断向量表中。 解:因为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. 已知加在82上的外部计数器频率为1MHz,是说明若不增
加硬件芯片的情况下,使82产生周期为1s的对称方波该如何实现?画出电路图。
解:由题意可知:外部时钟周期=1/(1MHz)=1us
欲使82产生周期为1s的对称方波82要工作在方式3计数初值为:计数初值=1s/1us=10^6
该数值超出了8253一个计数器通道的最大计数值65536.因此要在不增加硬件芯片的情况下产生周期为1s的对称方波可像图7.9所示的那样采用将8253两个计数通道串联的方法来实现。
通道0工作在方式3或方式2对1MHz 的时钟计数产生周期为1ms的分频信号从OUT0 上输出。通道1工作在方式3对OUT0输出的周期为1ms的信号计数产生周期为1s的对称方波。
38. 假设能提供给82的频率为1MHz,82的端口为200H—203H;要使82产生如下图所示的波形,将如何进行初始化。
解:设82口地址为200H~203H,GATE0为高电平,CLK0接2MHz方波,要求OUT0端输出500Hz的连续脉冲。请编写初始化程序。 设计思路:
①0号计数器,工作在方式2(因为输出连续波形); ②计数初始值计算:2MHz÷500Hz=4000
③0号计数器的端口地址为200H;控制字端口地址为203H。 方法一:
MOV DX, 203H MOV AX, 4000; MOV AL, 00110100B; OUT DX, AL;先写入低8位 OUT DX, AL MOV AL, AH; MOV DX, 200H OUT DX, AL;再写入高8位
注意:如果规定初值为二进制数,则编程时可直接写成十进制数或十六进制数。汇编时由系统自动转换成二进制数。 方法二:
MOV DX, 203H MOV DX, 200H MOV AL, 00010101B MOV AL, 40H OUT DX, AL OUT DX, AL 40. 假设能提供给82的频率为4MHz,82的端口为04H—07H;要使82产生如下图所示的波形,将如何进行初始化。
解:若82的地址为04H~07H,要使计数器1工作在方式0,计数 脉冲为2MHz,设计延迟时间为200μS,初始化程序为: 定时常数:N=T×Tm=200×2=400D=190H MOV AL,70H;设控制字 至计数通道1
OUT 07H,AL;输出至控制MOV AL,01H;设置计数值字寄存器 高字节
MOV AL,90H;设置计数值OUT 05H,AL;高字节输出低字节 至计数通道1 OUT 05H,AL;低字节输出
第七章
1. A/D和D/A转换在微机应用中分别起什么作用?
答:在微机应用中A/D转换器完成输入模拟量到数字量的转换,供微机采集数据。D/A转换器完成微机输出数字量到模拟量的转换,实现微机控制
2. 怎样将D/A转换器连接到微型计算机?
答:D/A转换器和微机连接时主要注意两点:第一要了解所选的D/A转换器本身是否带有数据锁存器,若芯片内部带有锁存器可
以直接和cpu的数据总线相连接;如果芯片内部不带有锁存器,在接口电路中需要通过数据锁存器来连接cpu的数据总线和D/A转换器的数据线。第二是要注意D/A转换器的位数和所要连接的微机数据总线的位数是否一致。一边决定在需要加数据锁存器时,加几级锁存器,如果cpu的数据总线是8位,使用的是大于8位的D/A转换器,通常采用两级缓冲结构和cpu数据总线相连。 修改图7-5,将DAC0832的两级锁存合为一级使用,画出连接图,并编写输出三角波和锯齿波的程序。
答:为了将DAC0832的二级缓冲锁存器合为一级使用,可以将它的第二级置为“直通”,也就是把2WR 和 XFER 接地,用第一级的1WR和CS对输入进行控制,如下图。
输出三角波的程序段如下: S0: MOV AL, 0 ;AL中置初值0,输出三角波的上升段 S1: CALL OUTPUT ;调用输出子程序,输出一个值 INC AL ;产生上升段下一个值
JNZ S1 ;上升段未结束,继续输出
DEC AL ;恢复到最大值 S2: CALL OUTPUT ;输出三角波的下降段
DEC AL ;产生下降段下一个值
JNZ S2 ;下降段未结束,继续输出
JMP S1 ;下降段结束,输出下一个三角波
输出锯齿波的程序段如下: MOV AL, 0
J1: CALL OUTPUT ;输出当前值
INC AL ;产生下一个输出值
JMP J1 子程序“OUTPUT”为上面两段程序共用:
OUTPUT PROC NEAR 数 MOV DX, PORT0 ;DAC0832WT: DEC AX 端口地址 JNZ WT;延时 POP AX RET OUT DX, AL OUTPUT ENDP
PUSH AX
MOV AX, N ;延时的时间常
4. 一个8位D/A转换器的满量程(对应于数字量255)为10V。分别确定模拟量2.0V和8.0V所对应的数字量。
答:模拟量2.0V所对应的数字量为(2.0/10)×255 = 51 模拟量8.0V所对应的数字量为(8.0/10)×255 = 204
5. 简述逐次逼近式A/D转换器的工作原理,并将它和Σ-ΔA/D转换器进行比较。
答:逐次逼近型(也称逐位比较式)A/D 转换器主要由逐次逼近比较寄存器 SAR,D/A 转 换器、比较器以及时序和控制逻辑等部分组成。它从 SAR 的最高位开始,逐位设定 SAR 寄存器中的数字量, D/A 转换得到电压 VC, 经 与待转换模拟电压 Vx 进行比较。 通过比较, 逐次确定各位的数码应是“1”还是“0” 。转换结果能否准确逼近模拟信号,主要取决于 SAR 和 D/A 的位数。位数越多,越能准确逼近模拟量。 ∑-△型模数转换器是根据二次采样的差进行计算的,有很强的抗干扰能力,转换精度高,以串行方式输出数据。常用于高分辨率(常见为 16、18、24 位)的中、低频信号测量。
6. 若ADC输入模拟电压信号的最高频率为100KHZ,采样频率的下限是多少?完成一次A/D转换时间的上限是多少? 答:香农定理告诉我们:采样频率一般要高于或至少等于输入信号最高频率的2倍。因此,采样频率的下限应是200KHz。在200KHz采样频率下,完成一次A/D转换时间的上限是5μs。实际应用中,采样频率可以达到信号最高频率的4~8倍。如果采用400KHz的采样频率,完成一次A/D转换时间的上限是2.5μs。 7、在使用A/D和D/A转换器的系统中,地线连接时应注意什么? 答:模拟信号很容易受到电源和数字信号的干扰引起波动。为提高输出的稳定性,减少误差,模拟信号部分必须采用高精度基准电源VREF和的地线。所以,要把数字地和模拟地分开。模拟地是模拟信号及基准电源的参考地,其余信号的参考地,包括工作电源地,数据、地址、控制等对应的“地”都是数字地。连接时,先所有的模拟地连接在一起,把所有的数字地连接在一起,
然后在一个点上(注意:不是两个或更多)把模拟地和数字地连接起来。
8. 怎样用一个A/D芯片测量多路信息?
答:模拟量多于一个时,可以使用多路模拟开关,轮流接通其中的一路进行转换,使多个模拟信号共用一个ADC进行A/D转换。
第八章
1. 查找相关资料,用列表方式给出8088,8086,......直到P4各代微处理器的地址、数据线引脚数量,并推算出各自的内存寻址空间。 处理器 数据线 地址线 内存寻址空间 8088 8 20 1MB 8086 16 20 1MB 80286 16 24 16MG 80386/4 32 32 4GB Pentium 32 4GB 2. 什么是MMX指令?它有什么特点? 答:MMX指令是“多媒体扩展指令”的英文简称,它采用SIMD(单指令流多数据流)技术,使得处理器在一条指令中对多个数据进行处理,提高了对多媒体数据的处理能力。
3. 什么叫动态执行?使用动态执行技术会带来什么好处? 答:动态执行是通过预测指令流和数据流,调整指令的执行顺序,最大地发挥CPU内部各部件的功效,提高系统执行指令的速度。 动态执行主要采用了:
多路分支预测:利用转移预测技术允许程序几个分支流同时在处理器内执行; 数据流分析:通过分析指令数据的相关性,把指令进行优化排序后执行,充分利用处理器内部资源; 推测执行:根据各推测最终的正确性,对多个分支的运行结果进行取舍。
4. 32位微处理器有哪几种工作方式?各有什么特点?
答:32位微处理器有4种不同的工作方式:实地址方式、保护方式、虚拟8086方式、系统管理方式。
实地址方式:实地址方式使用16位80x86处理器的寻址方式(使用20位地址寻址1MB空间)、存储器管理和中断管理。可以使用32位寄存器,使用特权级0,可以执行大多数指令。 保护方式:保护方式是32位微处理器的基本工作方式。它
使用32位地址寻址4GB的实存空间,通过虚拟存储管理、用户优先级管理、I/O管理等技术,扩大可使用的存储空间,对操作系统和用户程序进行隔离和保护。
虚拟8086方式:虚拟8086方式是保护模式下为任务提供的的8086工作环境。每个任务使用16位地址寻址1MB的内存空间,以最低特权级运行,不能使用特权指令。
系统管理方式:系统管理模式主要用于电源管理,可以使处理器和外围设备部件进入“休眠”状态,在有键盘按下或鼠标移动时“唤醒”系统,使之继续工作。利用SMM可以实现软件关机。
5. 叙述XT总线与ISA总线的异同之处。
答:XT总线可以看作是ISA总线的一个“子集”,它包括8位数据线,20根地址线,使用与CPU相同的4.77MHz的时钟信号。
ISA总线在XT总线的基础上,把数据线扩展到16根,地址线扩展到24根,使用于CPU的8MHz时钟信号,中断和DMA通道数目都有所增加。ISA总线插槽由8位的XT总线插槽和ISA总线扩展插槽两部分组成。
6. 什么叫分级总线?使用分级总线有什么优点?
所谓分级总线是指系统中存在多组总线,每组总线可以有不同的数据线宽度、数据传输速率和不同的信号传输协议。系统内的设备按照它们对传输速率、数据吞吐量的不同要求合理地连接在不同的总线上。不同总线之间通过“桥”电路进行连接。
使用分级总线可以使各种设备的数据传输要求得到最大程度的满足,同时使整个系统的数据吞吐量和效能达到最大化。 7. 简述“两个中心”结构与“南北桥”结构的区别,同时说明“两个中心”结构的优越之处。 答:“南北桥”结构和“中心结构”都支持多级总线的系统结构。它们的主要区别在于,南桥芯片连接的所有高速外设都要通过PCI总线与处理器相连接,而“中心结构”里所有连接IO设备的总线(PCI, ISA, USB……)都通过IO控制中心(ICH)与中心高速接口直接连接,从而缓解了PCI总线数据交换的拥挤程度。相比较而言,“中心结构”对信息流的路径分配更为合理。
8. CPU←→Cache,Cache←→主存,主存←→辅存之间的数据传输各有什么特点?为什么?请分析原因。
答:CPU与Cache之间数据传输的主要特点是:
高速:Cache以与CPU相同或接近的速度工作;
不确定:CPU对Cache的访问可能因“命中”而成功,也可 能以“失靶”而失败。
Cache与主存之间数据传输的主要特征是:
数据传输以“页”为单位,使用“成组传输方式(突发总线方式)”进行。 导致上述特点的原因是,这一层次以“高速”为追求的目标,利用了程序、数据的“局部性”原理。
主存与辅存之间的数据传输以“数据块/扇区”为单位,通常以DMA方式进行。 导致上述特点的原因是,这一层次以“大容量”、“低价格”为追求的目标,辅存大容量、“粗粒度”的结构特点正好能够满足对上述目标的要求。
系统对不同层次的数据传输有着不同的要求,因而设置了不同的软硬件结构,最终导致了传输方式上的差异。 9. 什么叫“相联存储映像表”?说明它的结构和用途。 答:相联存储映像表是Cache内纪录Cache中各页在主存的位置和其他信息的表格,由各页的“标记(Tag)”,“状态”和“LRU位”组成。“标记(Tag)”记录了该页在主存中的位置,供CPU访问时进行匹配查找使用。“状态”和“LRU位”用于Cache页的替换操作。
10. 为什么要进行Cache和主存的“映像”?有哪几种相联映像的方法?比较各自的利弊。
答:Cache和主存的“映像”是主存页调入Cache的“规则”,为了提高CPU在Cache中查找信息的速度,这种“规则”是必须的。
常见相联映像的方法有三种: 全相联映像法:内存页可以调入Cache的任何一页,规则简单,页冲突的可能性最小,查找所需工作量最大。 直接映像法:每一个内存页只能调入Cache中相同页号的一个页,规则简单,查找方便,块冲突的可能性大。 组相联映像法:每一个内存页可以与Cache中一个组内的若干个页面相对应,规则稍复杂,查找工作量中等,块冲突的可能性中等。
11. 什么叫“突发总线周期”?它有什么优点? 答:“突发总线周期”也称为“成组传送方式”,总线主设备在发送一个主存地址之后,通过连续的多个周期,传输(读/写)多
个地址相连的存储单元的数据。这种方式省去了多次发送地址、多次申请总线和多次相互联络的过程,因此可以获得很高的数据传输速率。
12. 逻辑地址是怎样转换成线性地址的?简要叙述转换过程。 答:实地址方式下没有“线性地址”。 保护模式下,逻辑地址由“段号”和“段内地址”两部分组成。使用“段号”查找“段描述符表”,可以获得该段的起始地址,与“段内地址”相加,就得到了对应的“线性地址”。
13. 线性地址是怎样转换成物理地址的?简要叙述转换过程。 答:“线性地址”由处于高位的“页组号”、处于中间的“页号”和处于低位的“页内地址”三部分组成。用“页组号”查找“页组表”,得到“页表”的起始地址;用“页号”查找该“页表”,得到该页的起始地址;页起始地址加上“页内地址”就得到了它对应的物理地址。
14. 请分析使用虚拟存储管理带来的利弊。
答:虚拟存储管理把辅存的一部分用作“虚拟”的主存,扩大了操作系统可分配,程序员可利用的存储空间,便于实现任务之间的隔离和保护,有效地支持了“多任务”运行环境的实现。它还可以有效地克服“内存碎片”问题,简化了存储管理。但是,实现虚拟存储后,每次访问主存都需要进行两次地址的转换,增加了系统的复杂性,增加了系统的硬件成本,降低了访问主存的速度,而且,由于系统复杂程度的增加,系统的可靠性也会受到影响。
15. 32位微处理器实施保护机制的目的是什么?有哪些主要措施?
答:32位微处理器实施保护机制的根本目的在于增加在“多任务”运行环境下系统的可靠性,使得任务之间、任务和操作系统之间实现隔离和保护。为了实现隔离和保护,采取了以下几项措施: (1)为任务和资源设定一个“优先级”,优先级较低的任务不能访问优先级较高的资源,不能调用优先级较高的程序模块。 (2)使用虚拟内存管理机制,使得任务和任务、任务和操作系统所使用的存储空间相互隔离,从而保证每个任务的正常运行不受其它任务的影响,一个任务的故障不影响整个系统的正常运行。
16. 说明操作系统在保护模式下启动一个任务的过程。
答:一个任务用JMP或CALL指令启动一个新的任务时,处理器将当前任务的所有通用寄存器、所有段寄存器中的选择子、EFLAGS、EIP存入该任务自身的TSS,然后将新任务的选择子、描述符装入TR寄存器,并且将对应TSS段中所保存的通用寄存器、段寄存器、EFLAGS、EIP副本装入处理器对应的寄存器中。在CS:EIP的控制下,一个新的任务开始执行。
用JMP、CALL指令调用同一个任务中其他程序段时,指令中的“段选择子”及其描述符被存入CS寄存器,“偏移地址”进入EIP,于是,目标程序被执行。对于CALL指令,原来程序的返回信息“CS: EIP”被压入堆栈,和16位微处理器中十分相似。
中断和异常也会导致任务的转换。
17. 32位微处理器如何实施对I/O过程的管理?
答:保护方式下对I/O过程的管理主要有两项措施:
任务状态段TSS中有一个最多Kbits组成的“I/O允许位图(IOM)”,它的每一位对应一个I/O端口,为0表示该端口允许这个用户进行I/O操作。
处理器首先检查存放在CS中的当前任务的CPL(当前任务优先级),如果CPL的特权级高于或等于EFLAGS中由IOPL规定的特权级,I/O操作不会受,否则将进一步检查IOM,对IOM为1的端口进行操作将产生保护异常; 对于运行在虚拟8086方式的任务,用IOM来控制对I/O端口进行访问,对位图对应位为1的端口进行访问将产生保护异常。
另一种办法是:在IOM中封锁对所有端口的访问,当前任务一旦执行I/O指令,立即产生保护异常,进入由操作系统设置的“异常处理程序”,在操作系统的控制下进行间接的“I/O操作”。
18. 简要叙述保护方式与实地址方式下的中断管理方法的区别。 答:在实地址方式下,32位80X86微处理器采用与16位80X86相同的中断管理机制,用1KB大小的“中断向量表”存储各中断服务程序入口地址,这些“中断向量”按照“中断类型”的顺序存放。中断向量表存放在地址0000:0000开始的主存中。
保护方式下用“中断描述符表”来指出各中断处理程序的入口地址,每一个中断类型对应一个“中断门”或“陷阱门”描述符。中断描述符表可以放在内存的任何位置,表的首地址存放在IDTR寄存器中。
保护模式下中断响应的过程与实地址方式基本相同,但是可以用中断机制进行任务的切换。
19. 什么叫“串行中断”?它有什么优点?
答:串行中断用一根SERIRQ来传递中断请求信号。SERIRQ信号线上
的信息组织成“包”,用PCI的时钟信号对“包”内的信号进行同步。所有支持串行中断的设备都可以用一个三态门连接到这根线上发送各自的中断请求信号。
使用串行中断减少了中断请求的引脚数,可以不受中断请求引脚的灵活地扩充中断请求数目。
20. 什么叫“APIC”中断?它有什么用途?
答:APIC是“高级可编程中断控制子系统”的缩写,用于解决多处理器环境下处理器之间的联络、任务分配和中断处理。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- haog.cn 版权所有 赣ICP备2024042798号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务