
一.思考题(略)
二.综合题
1. 设机器字长为8位,写出下列用真值表示的二进制数的原码、补码和反码。答:
| 真值 | 原码 | 反码 | 补码 |
| (1)+0010101B | 00010101 | 00010101 | 00010101 |
| (2)+1110001B | 01110001 | 01110001 | 01110001 |
| (3)+1010011B | 01010011 | 01010011 | 01010011 |
| (4)-0010101B | 10010101 | 11101010 | 11101011 |
| (5)-1111011B | 11111011 | 10000100 | 10000101 |
| (6)-1001010B | 11001010 | 10110101 | 10110110 |
| 原题 | 【X+Y】补 | 【X+Y】原 | (X+Y)真值 | |
| 1 | 17+7 | =0001 0001B+0000 0111B=0001 1000B= 18H | 18H | 18H |
| 2 | 8+18 | =00001 000B+0001 0010B=0001 1010B= 1AH | 1AH | 1AH |
| 3 | 9-6 | =00001 001B+1111 1010B=0000 0011B= 03H | 03H | 3H |
| 4 | -26+7 | =1110 0110B+00000111B=11101101B= EDH | 93H | -13H |
| 5 | 8-18 | =0000 1000B+1110 1110B=1111 0110B= F6H | 8AH | -0AH |
| 6 | 19-(-17) | =0001 0011B+0001 0001B=0010 0100B= 24H | 24H | 24H |
| 7 | -25-6 | =1110 0111B+1111 1010B=1110 0001B= E1H | 9FH | -1FH |
| 8 | 87-15 | =0101 0111B+1111 0001B=0100 1000B= 48H | 48H | 48H |
| 补码 | 真值 |
| 48H | 72 1001000B |
| 9DH | -99 -110 0011B |
| B2H | -78 -100 1110B |
| 5C10H | 23568 101110000010000B |
| F2A1H | -3423 -1101 0101 1111 B |
| 原题 | 【X+Y】补 | 对应的真值 | 溢出否 |
| 43+18 | =0010 1011B+0001 0010B=0011 1101B | 61 | 未溢出 |
| -52+17 | =1100 1100B+0001 0001B=1101 1101B | -35 | 未溢出 |
| 72-8 | =0100 1000B+1111 1000B=0100 0000B | 未溢出 | |
| 50+87 | =0011 0010B+0101 0111B=1000 1001B | -119 | 溢出 |
| (-33)+(-47) | =1101 1111B+1101 0001B=1011 0000B | -48 | 未溢出 |
| (-91)+(-75) | =1010 0101B+1011 0101B=0101 1010B | 90 | 溢出 |
| -127+ | =1000 0001B+0100 0000B=1100 0001B | -63 | 未溢出 |
| 二进制机器数 | (若为)无符号数 | (若为)原码 | (若为)反码 | (若为)补码 |
| 01101 1110 | 110 | 110 | 110 | 110 |
| 0101 1001 | ||||
| 1000 1101 | 141 | -13 | -114 | -115 |
| 1111 1001 | 249 | -121 | -6 | -7 |
第二章
一.思考题(略)
二.综合题
1. 设当前SS=C000H,SP=2000H,AX=2355H,BX=2122H,CX=8788H,则当前栈顶的物理地址是多少?若连续执行PUSH AX,PUSH BX,POP CX 3跳指令后,堆栈的内容发生了什么变化?AX ,BX,CX中的内容是什么?
答:物理地址=C0000H+2000H=C2000H;
执行指令后,地址C000H:1FFFH内容是23H;
地址C000H:1FFEH内容是55H;
地址C000H:1FFDH内容是21H;
地址C000H:1FFCH内容是22H;
(AX)=2355H,(BX)=(CX)=2122H;
2. 假设某CPU的时钟频率是8MHz,如果在进行存储器写操作时插入了一个等待周期,完成该写操作的总线周期所需要的时间是多少ns? 答:
时钟周期=1/8MHz=125ns;
所以所需时间=时钟周期*5=625ns。
3. 设存储器内数据段中存放了两个字2FE5H和3EA8H,已知DS=3500H,数据存放的偏移地址为4B25H和3E5AH,画图说明两个字在存储器中的存放情况。若要读取这两个字,需要对存储进行几次总线读操作?答:
| … | |
| A8H | 38E5AH |
| 3EH | 38E5BH |
| … | |
| E5H | 39B25H |
| 2FH | 39B26H |
| … | |
4. 8086中的标志寄存器FR中有哪些状态标志和控制标志?这些标志位各有什么含义?假设(AH)=03H,(AL)=82H,试指出将AL和AH中的内容相加和相减后,标志位CF、AF、OF、SF、IF和PF的状态。答:
6个状态标志:
CF:进位标志;
PF:奇偶标志;
AF:辅助进位标志;
ZF:零标志;
SF:符号标志;
OF:溢出标志;
3个控制标志:
IF:中断允许标志;
DF:方向标志;
TF:单步标志。
03H+82H=85H计算后:CF=0;PF=0;AF=0;ZF=0;SF=1;OF=0。
03H-82H=81H计算后:CF=1;PF=1;AF=0;ZF=0;SF=1;OF=1。
82H-03H=7FH计算后:CF=0;PF=0;AF=1;ZF=0;SF=0;OF=1。
5. 有一个22个字的数据组成的数据区,起其实地址为6101H:1CE7H。试计算出该数据区首末存储单元的物理地址?答:
起始物理地址为:62CF7H
数据区末的物理地址为:62CF7H+(22*2-1)2 = 62D22H
堆栈必须为字操作—只有PUSH BX 是正确的
此时,BX中的高8位BH不能确定,但不影响压栈操作,不影响SP的变化
6. 假设(SS)=20A0H,(SP)=0032H,将(CS)=0A5BH,(IP)=0012H,(AX)=0FF42H,(SI)=537AH,(BL)=5CH依次压入堆栈保存。要求:
(1)画出堆栈数据存放示意图;
(2)写出压栈完毕后SS和SP的值。
答:(1)
堆栈必须为字操作
(2)SS=20A0H, SP=0028H
7. 若某存储单元的实际地址为2BC60H,且该存储单元所在的段首地址为2AF00H,则该存储单元在段内的偏移地址为多少?答:
偏移地址=2BC60H-2AF00H=0D60H
第三章
1. 指出下列指令的错误原因。
(1) AND AX, DL ;类型不匹配
(2) ADD CS, DX ;CS不能作为目的操作数
(3) MOV AX, IP ;IP不能作为指令的操作数
(4) MOV [BP][SI], [SI] ;两个操作数不能同时为内存操作数
(5) SUB [BP][SI], ES:DX ;段超越前缀只能用在内存操作数之前
(6) XCHG AL, [SI][DI] ;没有[SI][DI]这种操作数形式
(7) JGE AX ;条件转移指令的操作数只能是标号
(8) PUSH DL ;对堆栈不能进行字节操作
2. 用一条指令将BX清0。(请给出3种方法)
方法1:MOV BX, 0
方法2:SUB BX, BX
方法3:AND BX, 0 ;将BX和0做与,可以将BX清零
方法4:XOR BX, BX
3. 写出实现下列功能的指令序列。
(1) 判断AX的值,若AX等于0,则转到标号LABEL处。(请写出3种方法)
方法1:
CMP AX, 0
JZ LABEL ; 如果 ZF = 0,说明AX为0,因为CMP指令是做减法,但是不写回结果,因此指令执行后AX内容不会受到破坏
方法2:
TEST AX, 0FFFFH
JZ LABEL ; 如果ZF = 0,说明AX为0
方法3:
AND AX, 0FFFFH
JZ LABEL
(2) 将AL的高4位与低4位分别放入AH与AL的低4位,并将AH与AL的高4位清0。
MOV AH, AL
AND AL, 0FH ; AL高4位通过与清零,而低4位保持不变
MOV CL, 4
SHR AH, CL ; 这两条指令通过逻辑右移将AH的高4位清零,因为SHR在右移后,高位补零
(3) 若AX和BX中的数恰好1个是奇数、1个是偶数,则将奇数放入AX,偶数放入BX;否则,AX和BX不变。
MOV DX,AX ;首先判断是否是1奇1偶,如是则保持不变
ADD DX,BX
TEST DX,01H ;检测AX与BX是否同为偶数或同为奇数
JZ CONTINUE
TEST AX, 01H ;检测AX的最低位
JNZ CONTINUE
XCHG AX, BX
CONTINUE : …. ;无需处理,AX,BX中内容将不变
4. 分析下列指令序列完成什么功能。
MOV CL, 4
SHL DX, CL
MOV BL, AH
SHL AX, CL
SHR BL, CL
OR DL, BL
答案:将DX.AX中的32位数整体逻辑左移4位。
5. 给出下列各条指令执行后AL以及CF、OF、SF、和ZF的值。
| 指令 | AL | CF | OF | SF | ZF | 备注 |
| MOV AL, 100 | 100/H | MOV指令不影响标志位 | ||||
| XOR AL, AL | 100/H | 0 | 0 | 0 | 1 | 除NOT外,逻辑运算后CF=OF=0,其余据结果设置;逻辑运算指令下,AF标志位为任意值 |
| MOV AL, -1 | -1/0FFH | 0 | 0 | 0 | 1 | MOV指令不影响标志位 |
| INC AL | 0 | 0 | 0 | 0 | 1 | INC不影响CF,其余根据结果设置 |
| NOT AL | 0FFH | 0 | 0 | 0 | 1 | NOT指令不影响标志位 |
| SHL AL, 1 | 0FEH | 1 | 0 | 1 | 0 | 位移指令根据移出的位设CF;根据结果设SF,ZF,PF;只移动一位时,根据移位前后最高位是否变化设置,决定OF,有变化OF = 1, 无变化OF = 0;移动多位时,OF位无定义;位移运算指令下,AF标志位为任意值 |
| CMP AL, 10 | 0FEH | 0 | 0 | 1 | 0 | CMP指令根据结果设置6个标志位 |
| SUB AL, 7FH | 7FH | 0 | 1 | 0 | 0 | SUB根据结果设置6个标志位 |
| SHL AL, 1 | 0FEH | 0 | 1 | 1 | 0 | 解释同上 |
答案:
CMP AX, BX
JC BBB ; 如果AX <= BX,跳转
XCHG AX, BX ; 否则,交换AX和BX的值,将两者中的小值放到AX中去
BBB:
CMP AX, CX
JC CCC ; 如果AX <= CX,跳转
XCHG AX, CX ; 否则,交换AX和CX的值,将两者中的小值放到CX中去
CCC:
INT 20H ;返回DOS
7. 变量定义伪指令与符号定义伪指令的主要作用是什么?
答案:
变量定义伪指令:主要用来为某种类型(比如字节型、字型)的内存单元的地址,指定一个可以引用的名字标识。
符号定义伪指令:其实就是定义一个宏替换常量,用定义的符号代表一个文本串或者一个数值,在程序中遇到定义的符号时,用相应的文本串或者数值去替换。
8. 设有下列段定义:
DSEG SEGMENT
X DW 1, 3
DSEG ENDS
给出下列两组指令序列分别执行后AX的值。
(1) MOV AX, DSEG
MOV DS, AX
MOV AX, X+1 ;地址运算
(2) MOV AX, SEG X
MOV ES, AX
MOV AX, ES: X
INC AX
答案:
(1) (AX) = 0300H (2) (AX) = 0002H
| 0010H | V1 | 14H |
| 0011H | 00H | |
| 0012H | 14H | |
| 0013H | 00H | |
| 0014H | 1EH | |
| 0015H | 00H | |
| 0016H | BUF1 | ‘1’ |
| 0017H | ‘0’ | |
| 0018H | ‘0’ | |
| 0019H | 05H | |
| 001AH | 0 | |
| 001BH | 0 | |
| 001CH | 0 | |
| 001DH | 0 | |
| 001EH | BUF2 | 01H |
| 001FH | 00H | |
| 0020H | 02H | |
| 0021H | 00H | |
| 0022H | A9H | |
| 0023H | 02H | |
| 0024H | VA | 16H |
| 0025H | 00H |
DATA SEGMENT
ORG 10H
V1 DW 2 DUP (20), $ + 10
BUF1 DB ‘100’, 5
DD 0
BUF2 DW 1, 2, 2A9H
LEN EQU BUF2 – BUF1
VA DW BUF1
DATA ENDS
则:V1+1中存放的字节数据为 ( 00H );
V1+4中存放的字数据为(001EH);
VA的内容为(16H);
LEN的值为(8)。
10. 在数据段定义的两个变量S1和S2,要求设计一个完整的程序,
将以S1为首地址的50个字节依次传送到以S2为首地址的内存单元中。
datasg segment
s1 db 25 dup ('12')
s2 db 50 dup (?)
datasg ends
codesg segment
assume cs : codesg, ds : datasg
start: mov ax, datasg
mov ds, ax
mov es, ax
mov si, offset s1
mov di, offset s2
mov cx, 50
AND AX,0
LOP: MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
LOOP LOP
mov ax, 4c00h
int 21h
codesg ends
end start
end start
习题五
一. 思考题
⒈ 半导体存储器主要分为哪几类?简述它们的用途和区别。
答:按照存取方式分,半导体存储器主要分为随机存取存储器RAM(包括静态RAM和动态RAM)和只读存储器ROM(包括掩膜只读存储器,可编程只读存储器,可擦除只读存储器和电可擦除只读存储器)。
RAM在程序执行过程中,能够通过指令随机地对其中每个存储单元进行读\写操作。一般来说,RAM中存储的信息在断电后会丢失,是一种易失性存储器;但目前也有一些RAM芯片,由于内部带有电池,断电后信息不会丢失,具有非易失性。RAM的用途主要是用来存放原始数据,中间结果或程序,与CPU或外部设备交换信息。
而ROM在微机系统运行过程中,只能对其进行读操作,不能随机地进行写操作。断电后ROM中的信息不会消失,具有非易失性。ROM通常用来存放相对固定不变的程序、汉字字型库、字符及图形符号等。
根据制造工艺的不同,随机读写存储器RAM主要有双极型和MOS型两类。双极型存储器具有存取速度快、集成度较低、功耗较大、成本较高等特点,适用于对速度要求较高的高速缓冲存储器;MOS型存储器具有集成度高、功耗低、价格便宜等特点,适用于内存储器。
⒉ 存储芯片结构由哪几部分组成?简述各部分的主要功能。
答:存储芯片通常由存储体、地址寄存器、地址译码器、数据寄存器、读\写驱动电路及控制电路等部分组成。
存储体是存储器芯片的核心,它由多个基本存储单元组成,每个基本存储单元可存储一位二进制信息,具有0和1两种状态。每个存储单元有一个唯一的地址,供CPU访问。
地址寄存器用来存放CPU访问的存储单元地址,该地址经地址译码器译码后选中芯片内某个指定的存储单元。通常在微机中,访问地址由地址锁存器提供,存储单元地址由地址锁存器输出后,经地址总线送到存储器芯片内直接进行译码。
地址译码器的作用就是用来接收CPU送来的地址信号并对它进行存储芯片内部的“译码”,选择与此地址相对应的存储单元,以便对该单元进行读\写操作。
读\写控制电路产生并提供片选和读\写控制逻辑信号,用来完成对被选中单元中各数据位的读\写操作。
数据寄存器用于暂时存放从存储单元读出的数据,或暂时存放从CPU送来的要写入存储器的数据。暂存的目的是为了协调CPU和存储器之间在速度上的差异。
⒊ 简述SRAM和DRAM的应用特点。
答:SRAM具有鲜明的应用特点:
a、由电路结构的特点,可以保证存储的数据信息只要不断电,就不会丢失;不需要定时刷新,简化了外部电路。
b、相对动态RAM,存取速度更快。
c、内部电路结构复杂,集成度较低;制造价格成本较高。
d、双稳态触发电路总有一个处于导通状态,使得静态RAM的电功耗较大。
e、一般用作高速缓冲存储器(cache)。
DRAM的应用特点主要有:
a、集成度高、功耗小,制作成本低,适合制作大规模和超大规模集成电路,微机内存储器几乎都是由DRAM组成。
b、由于电容存在漏电现象,存储的数据不能长久保存,因此需要专门的动态刷新电路,定期给电容补充电荷,以避免存储数据的丢失或歧变。
⒋ 8086/8088CPU与存储器连接时,三总线应如何实现连接?
答:1)、存储器与CPU数据总线的连接
CPU的数据总线和存储器的数据线直接连接。当需要进行位扩充时,各芯片的数据线分别连接到数据总线的不同位线上,CPU需一次选中多片并从多片芯片上读\写一个字节的数据。当需要进行字扩充时,各存储芯片的数据线均连接到数据总线上,CPU只能选中其中的一个芯片,并从该片中读\写一个字节数据。
2)、存储器与CPU控制总线的连接
存储器与CPU控制总线的连接的控制信号主要有:地址锁存允许信号、读\写对象选择信号、读写选通信号、准备就绪信号等。存储器的控制信号将与CPU上述的对应信号线连接。
3)、存储器与CPU地址总线的连接
存储器与CPU地址总线的连接涉及译码和寻址问题。通过全译码或部分译码,可以规划设计微机系统中存储器的地址空间分配,将整个地址空间合理地分配到ROM和RAM等不同类型的存储器上。将构成存储器的各个存储芯片的地址信号线与CPU地址总线中低位相连接;CPU地址总线的高位地址线连接译码器,产生并送出片选信号,连接到对应芯片的片选信号引脚;或将高位地址线直接连接到芯片的选引脚。
⒌ 简述线选、部分译码和全译码的应用特点。
答:线选的应用特点是不需要地址译码设备,线路简单,适用于连接存储芯片数量较少的场合;部分译码方式由于一定有一些未参与实际译码的地址线,他们的取值具有“无关性”,既可以为1,也可以为0,因此采用部分译码法虽然可以简化译码电路,但每个存储单元必将对应多个地址,出现“地址重叠”的现象,一部分地址空间将被浪费。因此在系统存储容量要求不大的情况下,适合采用该译码方式;在全译码译码方式下,全部20位地址总线信号都参加译码,存储器芯片上的每一个单元在整个内存空间中具有唯一的一个地址,不会出现“地址重叠”的问题。
⒍ 简述存储器芯片中存储单元数量、存储位数与所连接的总线数量的对应关系。
答:存储单元数=;(M为地址线数量);
数据线数=存储单元的存储位数。
⒎ 简述CPU与Cache、主存、外(辅)存之间的关系。
答:CPU可直接用指令对内存储器进行读/写访问。为了解决和协调容量、速度、价格之间的矛盾,在主存和CPU之间增加速度更高、但容量较小的高速缓冲存储器(cache)来提高CPU的存取速度。外存的容量最大,每单位存储容量的相对价格最低,但访问速度也是较慢的。
⒏ 简述存储芯片的位扩充和字扩充的意义。
答:位扩充指的是对存储单元的位数不足8位的芯片,通过多片“并联”的连接方式,扩充为8位的存储位数。字扩充是对存储器容量的扩充,或称对存储单元数量的扩充。
二. 综合题
⒈ 已知一个SRAM 芯片的容量为16K×4位,该芯片的地址线为多少条?数据线为多少条?
答:芯片容量为213B=8KB,所以该芯片的地址线为14条,数据线为4条。
⒉ 巳知一个DRAM 芯片外部引脚信号中有4条数据线,7条地址线,计算其存储容量。
答:位。
3.某存储芯片上有1024个存储单元,每个存储单元可存放4位二进制数值,则该存储芯片的存储容量是多少字节。
答:512B。
4. 某 RAM 芯片的存储容量为 1024×8 位,该芯片的外部引脚最少应有几条?其中几条地址线?几条数据线?若已知某 RAM 芯片引脚中有 13 条地址线,8 条数据线,那么该芯片的存储容量是多少?(本题表述的不够清楚)
答:该芯片外部引脚最少应有1;其中10条地址线,数据线。
芯片的存储容量是8KB。
5. 在部分译码电路中,若CPU的地址线A15、A14和A13未参加译码,则存储单元的重复地址有多少个。
答:个。
6. 假设选用一片62芯片(8K*8位)和一片27芯片(8K*8位)构成内存储系统。采用线选法控制片选端,至少需要多少条片选地址线?若采用部分译码法控制片选端,至少需要多少条片选地址线?采用全部译码法控制片选端,则需要多少条的片选地址线?
答:用线选法控制片选端,至少需要 1 条片选地址线;若采用部分译码法控制片选端,至少需要 1条片选地址线;采用全部译码法控制片选端,则需要全部的高位片选地(对于该题为7条)址线。
7.设某微型机的内存RAM区的容量为128KB,若用 21(K*1位) 芯片构成这样的存储器,需多少片 21?至少需多少根地址线?其中多少根用于片内寻址?多少根用于片选译码?
答:需16片 21;至少需17根地址线;其中16根用于片内寻址;1根用于片选译码。
8. 设有一个存储器系统,由2个8KB的62SRAM芯片构成。其中1#芯片的地址范围为0A6000H~0A7FFFH,2#芯片的地址范围为0AA000H~0ABFFFH,下图画出了74LS138译码器、存储器与8088CPU的连接图,但只画出了连线图的一部分,请将电路连接图补充完整。
答:
应该是一个或门
9. 选用8088CPU设计一个微处理器系统,要求存储器的容量为8KB的EPROM,采用27芯片(8K×8位);RAM的容量为16KB,采用62芯片(8K×8位)。连接电路如下图所示。假设工作在最小模式下。试计算确定各个存储芯片的地址空间。
答:27的存储地址为8E000H~8FFFFH;1#62的存储地址为82000H~83FFFH;2#62的存储地址为80000H~81FFFH.
10.在第8题的基础上,若仍选用1片27增加8KB的ROM,选用1片62增加8KB的RAM。试画出电路连接示意图,并确定扩充芯片的地址空间。
答:2#27地址空间为8C000H~8DFFFH,3#62地址空间为84000H~85FFFH。
第7章
1.列举中断的具体应用。
要点:符合如下四种的均可
(1)响应外部突发事件。
(2)实时多任务调度。
(3)实现外设与CPU的并行处理
(4)分时多任务操作系统的基础。
2.中断的分类方式及其关系。
要点:
可屏蔽中断和不可屏蔽中断
内部中断和外部中断
软件中断和硬件中断
| 软件中断 | 内部中断 | 不可屏蔽中断 |
| 硬件中断 | 外部中断/内部中断 | 可屏蔽/可屏蔽 |
要点:中断向量表是存放中断服务程序入口地址的一个特定的内存区域,中断号都与一个中断服务程序的入口地址相对应,实现中断处理程序的直接跳转
8086/8088cpu通过中断号标识中断源,外部中断的中断号由中断控制器(如8259a)提供,内部中断中断号和不可屏蔽中断号系统固定分配
发生中断时:
1)将标志寄存器、CS、IP内容压入堆栈。
2)获取中断类型号n,生成中断向量表地址4*n。
3)从中断向量表地址为4*n的存储单元中取出中断向量送入CS和IP,继而转去执行中断服务子程序。
4.中断的一般处理流程包括那些步骤,分别完成什么功能?
要点:
中断处理的一般过程由中断请求、中断优先级判别、中断响应、现场保护、中断服务、现场恢复和中断返回构成。
中断请求:发起中断信号
中断判优:优先级判断确定响应那个中断
中断响应:通过中断屏蔽确定是否响应中断,回复中断响应信号
现场保护:保存状态寄存器、地址寄存器和相关重要寄存器
中断服务:中断处理程序
现场恢复:恢复状态寄存器、地址寄存器和其他重要寄存器
中断返回:跳转到断点
5.8259A如何进行优先级管理?
要点:全嵌套方式、特殊全嵌套方式和优先级自动循环方式,分别针对单片,级联和特殊情况下的应用
6.设8259A的端口地址为80H和81H,用程序清除中断服务寄存器的ISR6。
要点:
MOV AL, 66H : EOI=1;SL=1;R=0;L2L1L0=6
OUT 80H, AL ; 设置OCW2
7.2片8259A组成的级联系统,设备A接在从片的IR0上,从片接在主片的IR4上,说明A设备发生中断到CPU响应的全过程。
要点:
1),A设备产生中断请求
2),从片8259A进行优先级判断,如果IR0上的中断优先级高于当前从片的其它优先级,从片8259A响应中断,向主片的IR4脚发起中断请求
3),主片8259A进行优先级判断,如果IR4上的中断请求优先级高于当前主片的其它优先级,则主片通过INT管脚向CPU发起中断请求
4),CPU接收到中断请求后,若允许中断,则向主片8259A发送两个INTA响应。在第一个INTA周期,主8259A通过这CS0-3级联线,发出优先权最高的从8259A设备标志代码ID。第二个INTA周期,与ID相一致的从8259A把中断向量号代码送上数据总线。
5),进入中断服务程序处理
6),中断结束,CPU要发两次EOI命令,分别使主8259A和正在服务的从8259A结束执行中断操作。因为在中断响应周期,与主、从8259A相应的ISR都被置位。
8.下列程序分别是8259A初始化程序和中断服务程序,分析程序并为每行程序加上注释。
[注1:程序中标红色的地方有误,应该将OFFSET 改为SEG;]
[注2:INT 21调用书上没有具体讲,该程序用到INT21调用的25号功能]
[注3:中断服务程序中的0A0H和20H分别为2片8259A的地址]
INT1 PROC FAR
PUSH DS ; 保存DS
PUSH AX ; 保存AX
PUSH DX ; 保存DX
MOV DX,OFFSET INT2 ; 获取中断服务程序INT2的偏移量
MOV AX,SEG INT2 ; 获取中断服务程序INT2的段地址
MOV DS,AX ; AX =ds
MOV AL,78H ; 中断号
MOV AH,25H ; dos调用功能号
INT 21H ; 调用21号中断,设置中断向量 中断向量地址为 DS:DX
POP DX ; 恢复DX
POP AX ; 恢复AX
POP DS ; 恢复DS
RET ;程序结束
INT1 EDNP
INT2 PROC FAR
PUSH AX ; 保存AX
INC [SI] ; SI地址的内容加1;
MOV AL, 20H ; AL=20H
OUT 0A0H, AL ; A0H地址的8259A的Ocw2寄存器结束中断
OUT 20H,AL ; 20H地址的8259A的Ocw2寄存器结束中断
POP AX ; 恢复AX
IRET ; 中断返回
INT2 ENDP
9.假定按键Key连接到单片8259A的IR3引脚,编程实现如下功能:1)按键高电平时产生中断请求,并在显示器上打印“IRQ-H”字符串和中断的次数。2)按键上升沿触发中断请求,在显示器上打印“IRQ-L-H”和中断的次数。
假设8259A地址为20H和21H,中断号为43H
DATA SEGMENT
STRING DB ‘IRQ-H’,ODH,OAH,’$’ ; 上升沿STRING DB ‘IRQ-L-H’,0DH,0AH,’$’
DATA ENDS
STACK SEGMENT STACK
DW DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE
start: CLI
PUSH ES
;设置irq3中断服务程序地址
MOV AX, 0000H
MOV ES, AX
MOV AX, OFFSET IRQ3
MOV BX, 40H*4
MOV ES:WORD PTR[BX],AX
MOV AX, SEG IRQ3
MOV ES:WORD PTR[BX+2], AX
POP ES
; 初始化
MOV AL, 1BH ; 8259A初始化,单片,高电平触发 ; 13H为上升沿触发
OUT 20H, AL ; 设置ICW1
MOV AL, 40H ; 中断号40H开始
OUT 21H, AL ; 设置ICW2
MOV AL, 03H ; 自动结束中断方式
OUT B1H, AL ; 设置ICW4
; 读写OCW1,去掉对irq3的屏蔽
IN AL, 21H
AND AL, F8H
OUT 21H, AL
MOV CX, 0000H ;计数值
STI ;开中断
HLT ;处理器暂停,等待PC机操作
A1: STI ;循环,等待中断
JMP A1
;中断服务中,调用bios 显示功能,显示IRQ-H,中断次数
IRQ3 proc near
MOV AX, 09H
MOV DX, SEG STRING
MOV DS, DX
MOV DX, OFFSET STRING
INT 21H
INC CX
MOV AL, CX
ADD AL,30H
MOV AH,01H
INT 10H
CLI
IRET
IRQ7 endp
CODE ENDS
END START
10.设计一个3片8259A级联中断系统,主片中断号从20H开始,从片从30H和40H开始,要求实现5个中断源的输入,其中主片连接1个中断源A,从片分别连接2个中断源B、C和D、E。优先级为B>C>E>D>A,画出级联连接图,并编写3片8259A的初始化程序。
如下图示,
要点: 不可以将IR0连接到从片;主片采用特殊全嵌套方式;主片和从片ICW3的设置
假设地址分别为20H/21H;80H/81H;A0H/A1H
主片初始化
MOV AL,11H ;ICW1边沿触发,级连,有ICW4
OUT 20H,AL
MOV AL,20H ;ICW2 中断类型号的初值为20H
OUT 21H,AL
MOV AL,06H ;ICW3 从片INT接主片IR1,IR2
OUT 21H,AL
MOV AL,09H ;ICW4 8086系统、非自动EOI、非缓冲、特殊完全嵌套
OUT 21H,AL
MOV AL,46H ;OCW1允许IR1,IR2,IR6中断
OUT 21H,AL
MOV AL,20H ;OCW2一般EOI
OUT 20H,AL
从片1的初始化代码如下:
MOV AL,11H ;ICW1边沿触发、级连、有ICW4
OUT 80H,AL
MOV AL,30H ;ICW2 中断类型号的初值为30H
OUT 81H,AL
MOV AL,01H ;ICW3 从片INT接主片IR1
OUT 81H,AL
MOV AL,01H ;ICW4 8086系统、非自动EOI、非缓冲、一般完全嵌套
OUT 81H,AL
MOV AL,0AH ;OCW1允许IR1,IR3中断
OUT 81H,AL
MOV AL,20H ;OCW2一般EOI
OUT 80H,AL
从片2的初始化代码如下:
MOV AL,11H ;ICW1边沿触发、级连、有ICW4
OUT 0A0H,AL
MOV AL,40H ;ICW2 中断类型号的初值为40H
OUT 0A1H,AL
MOV AL,02H ;ICW3 从片INT接主片IR2
OUT 0A1H,AL
MOV AL,01H ;ICW4 8086系统、非自动EOI、非缓冲、一般完全嵌套
OUT 0A1H,AL
MOV AL,0AH ;OCW1允许IR1,IR3中断
OUT 0A1H,AL
MOV AL,20H ;OCW2一般EOI
OUT 0A0H,AL
第八章
一、填空题
1. 3 16
2. 213H
3. 2、3 1、5
4. 端口A和端口C的高4位 端口B和端口C的低4位
5. 3 2 1
6. 22DH
7. 单工 半双工 全双工
8. 数据位 校验位
9. DTR DSR RTS CTS
10. MCR MSR
二、选择题
1.B 2.C 3.C 4.D 5.C 6.C 7.B 8.B 9.D
三、应用简答题
1、片选信号是有地址译码器产生的,用于确定芯片基地址和进行芯片选择的信号。如果芯片内部有5个不同寄存器则需要3根地址线对其内部寄存器进行译码。
4、 MOV DX, 43H
MOV AL, 10110000B
OUT DX, AL
…
MOV DX, 40H
IN AL, DX
…
MOV DX, 41H
OUT DX, AL
5、不妨用PB输入,PA输出,程序代码如下:
IO8255BASE equ 200H
IO8255A equ IO8255BASE
IO8255B equ IO8255BASE+1
IO8255K equ IO8255BASE+3
DATA SEGMENT
VAR DB 00H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV DX,IO8255K
MOV AL,10000010B
OUT DX,AL
L: MOV DX,IO8255B
IN AL,DX
MOV VAR,AL
MOV DX,IO8255A
MOV AL,VAR
MOV CX,8
L1: TEST AL,01H
JNZ L2
SAR AL,1
LOOP L1
AND AL,00H
JMP L3
L2: AND AL,01H
ROL AL,CL
OUT DX,AL
JMP L3
L3: MOV AH,01H
INT 16H
JZ L
MOV AH,4CH
INT 21H
CODE ENDS
END START
7、8255A工作在方式1时,使用的握手信号有两类:
输入时,使用数据选通信号,输入缓冲器满信号IBF和中断请求信号INTR。
输出时,使用输出缓冲器满,外设应答信号和中断请求信号INTR。
8、每个字符信息长度=1+7+1+1=10bit
所以每秒传输字符数=3600/10=360,即每秒发送360个字符
9、 空闲 启动 字符数据 奇校验 停止
| 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 |
