第1章 (略) 第2章 (略) 第3章
3. 1. 已知DS=091DH,SS=1E4AH,AX=1234H,BX=0024H,CX=5678H,BP=0024H,SI=0012H,DI=0032H,(09226H)=00F6H,(09228H)=1E40H,(1E4F6H)=091DH。
在以上给出的环境下,试问下列指令或指令段执行后的结果如何?
(1) MOV CL,[BX+20H][SI]; (2) MOV[BP][DI],CX; (3) LEA BX,[BX+20H][SI]
MOV AX,[BX+2]; (4) LDS SI,[BX][DI]
MOV[SI],BX;
(5) XCHG CX,[BX+32H] XCHG[BX+20H][SI],AX
解:
(1) CL=[09226H]=F6H
(2) [BP][DI]=[1E4F6H]=CX=5678H (3) BX=0056H; AX=[09228H]=1E40H
(4) SI=[09226]=00F6H; [SI]=[1E4F6H]=BX=0024H (5) AX=5678H; [BX+20H][SI]=1234H
3. 2. 设,DS=1000H:SS=2000H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1350H,SI=1354H,(1135OH)=OA5H,(11351H)=3CH,(11352H)=OFFH,(11353H)=26H,(11354H)=52H,(11355H)=0E7H,(126A4H)=9DH,(126A5H)=16H,(21350H)=88H,(21351H)=51H 下列各指令都在此环境下执行,在下列各小题的空格中填入相应各指令的执行结果。
(1) MOV AX,1352H
AX= (2) MOV AX,[1352H]
AX=
1
(3) MOV 0150H[BX],CH
(11350H)= ,(11351H)= (4) MOV AX,0150H[BP]
AX= (5) POP AX
AX= ,SP= (6) ADD[SI],CX
(11354H)= ,(11355H)= ,SF= ZF= ,PF= ,CF= ,OF= (7) SUB BH,0150H[BX][SI]
BH= ,SF= ,ZF= , PF= ,CF= ,OF= (8) INC BYTE PTR 0152H[BX]
(11352H)= ,(11353H)=______,CF=______
(9) INC WORD PTR 0152H[BX]
(11352H)= ,(11353H)= ,CF= (10) SAR BYTE PTR 0150H[BX],1
(11350H)= ,CF= ,OF= (11) SAL BYTE PTR 0150H[BX],
(11350H)= ,CF= ,OF=
解: (1) AX=1352H (2) AX=26FFH (3) [11350H]=33H; [11351H]=3CH (4) AX=5188H (5) AX=5188H ; SP=1352H (6) [11354H]=ECH; [11355H]=1AH; SF==ZF=PF=OF=0; CF=1 (7) BH=75H; SF==ZF=PF=OF=0; CF=1 (8) [11352H]=00H; [11353H]=26H; CF不变 (9) [11352H]=00H; [11353H]=27H; CF不变 (10) [11350H]=D2H; CF=1; OF=0 (11) [11350H]=4AH; CF=1; OF=1
3. 3. 设下列各转移指令的第一字节在内存中的地址为CS=2000H和IP=016EH,且环境均为;DS=6000H,BX=16C0H,(616COH)=46H,(616C1H)=01H,(616C2H)=00H,(616C3H)=30H,(61732H)=70H,(61733H)=17H。写出下列各无条件转移指令执行后CS和IP值。各指令左首的16进制编码是该指令的机器码。指令中的目的地址用相应的标号表示。 (1) EBE7 JMP SHORT AGAIN
2
(2) E90016 JMP NEAR PTR OTHER
(3) E3 JMP BX (4) EA46010030 JMP FAR PROB (5) FF67 JMP WORD PTR 0072H[BX] (6) FFEB JMP DWORD PTR[BX] 解: (1) CS=2000H; IP=0157H (2) CS=2000H; IP=1771H (3) CS=2000H; IP=16C0H (4) CS=3000H; IP=0146H (5) CS=2000H; IP=1770H (6) CS=3000H; IP=0146H
3. 4. 阅读下列各小题的指令序列,在后面空格中填入该指令序列的执行结果。
(1) MOV BL,85H
MOV AL,17H ADD,AL,BL DAA
AL= ,BL= ,CF= (2) MOV AX,BX
NOT AX ADD AX,BX INC AX
AX= ,CF= (3) MOV AX,OFF60H
STC
MOV DX,96 XOR DH,OFFH SBB AX DX
AX= ,CF= (4) MOV BX,OFFFEH
XOV CL,2 SAR RX,CL
BX= ,CF=
解: (1) (2) (3) (4)
AL=02H; BL=85H; CF=1 AX=0000H; CF=0 AX=0000H; CF=0 BX=0FFFFH; CF=1
3
3. 5. 阅读分析下列指令序列
ADD AX,BX JNO L1 JNO L2
SUB AX,BX JNC L3 JNO L4 JMP L5
若AX和BX的初始值分别如下列五种情况所示,则执行该指令序列后,程序将分别转向何处执行(注:即写出转移去的目的地址L1~L5中的一个)。
(1) AX=14C6H,BX=80DCH
(2) AX=0B568H,BX=54B7H (3) AX=42C8H,BX=608DH (4) AX=0D023H,BX=9FD0H (5) AX=9FD0H,BX=0D023H 解: (1) 转向L1 (2) 转向L1 (3) 转向L2 (4) 转向L5 (5) 转向L5
3. 6. AND AL,AL
JZ BRCH1 RCR AL,1 JZ BRCH2 RCL AL,1 INC AL JZ BRCH3 …
上述程序运行后,试回答:
(1) 当(AL)= 时,程序转向BRCH1 (2) 当(AL)= 时,程序转向BRCH2 (3) 当(AL)= 时,程序转向BRCH3 解: (1) AL= 00H (2) AL=01H (3) AL=0FFH
4
3 .7. 完成下列操作,选用什么指令:
(1) 将AX的内容、减去0520H,和上次运算的借位; (2) 将变量名TABL的段地址送AX; 解: (1) SBB AX, 0520H (2) MOV AX, SEG TABL
3. 8. D1 DB 20H DUP(?)
D2 DW D1
请写出用一条指令实现取D1的偏移地址→SI中的三种方法。 解: (1) MOV SI, OFFSET DI (2) MOV SI, D2 (3) LEA SI, DI
3. 9. 程序段1 程序段2
MOV AX,147BH MOV AX,99D8H MOV BX,80DCH MOV BX,9847H ADD AX,BX SUB AX,BX JNO L1 JNC L3
JNC L2 JNO L4
上述两个程序段执行后,分别转移到哪里? 解: (1) 转向L1 (2) 转向L3
3. 10. MOV BX,0FFH
AND BX,0FFFH OR BX,0F0FH XOR BX,00FFH
上述程序段运行后,BX= ,CF= 解:
BX=0F00H; CF=0
3. 11. CMP AX,BX
JGE NEXT
XCHG AX,BX
NEXT: CMP AX,CX
JGE DONE
5
XCHG AX,CX
DONE: … 试回答:
(1) 上述程序段执行后,原有AX,BX,CX中最大数存放在哪个寄存器中? (2) 这三个数是带符号数还是无符号数? 解:
AX ; 带符号数
第4章
4.1 画出下列语句中的数据在存储器中的存储情况。 ARRAYB DB 63,63H,‘ABCD’,
3DUP(?),2 DUP(1,3)
ARRAYW DW 1234H,5,‘AB’,‘CD’,?,
2DUP(1,3)
解:
地址 数据 地址 ARRAYB 3FH 63H 41H 42H 43H 44H ? ? ? 01H 03H 01H 03H 34H 12H 05H 00H
4. 2. 程序中数据定义如下:
DATA1 DW ?
DATA2 DB 32DUP(?) DATA3 DD ?
6
数据 42H 41H 44H 43H ? ? 01H 00H 03H 00H 01H 00H 03H 00H DLENGTH EQU $-DATA1 此时DLENGTH的值是多少? 解:
DLENGTH=38=26H
4. 3. 程序中数据定义如下:
ARRAY DB ‘ABCDEF’ RESULT DB ?
TABLE DW 20 DUP(?)
则执行指令 MOV AX,TYPE RESULT后,AX=?
MOV BX,TYPE TABLE后,BX=? MOV CX,LENGTH TABLE后,CX=? MOV DX,LENGTH ARRAY后,DX=? MOV SI,SIZE TABLE后,SI=? MOV DI,SIZE ARRAY后,DI=?
解:
AX=1; BX=2; CX=20; DX=1; SI=40; DI=1
4. 4. 指令AND AX,7315H AND 0FFH中,两个AND有什么差别?这两个AND操作分别在什么时候执行? 解:
左为助记符,由CPU执行指令时运算; 右为运算符,由汇编程序在汇编时运算。
4. 5. 设BX=1034H,则执行下列指令
MOV AX,BX AND 0FFH MOV CX,BX EQ 1234H
后,AX和CX各为多少?若BX=1234H,则结果如何? 解:
AX=0034H; CX=0000H; AX=0034H;CX=FFFFH
4. 6. 设已知语句为:
ORG 0024H
DATA1 DW 4,12H,$+4
则执行指令MOV AX,DATA1+4后AX的值是多少? 解:
AX=002CH
4. 7. 已知数据定义语句为:
BUFFER DB 16 DUP(O,2DUP(1))
则其中字数据单元内容为0100H的单元数是多少? 解:
7
16个
4. 8. 要在以DA1为首址的数据区中依次存放下列数据;
‘A’,‘B’,O,0,‘C’,‘D’,0,0 请分别用DB、DW和DD语句实现。 解:
DAT DB ‘A’, ‘B’,0,0,’C’,’D’,0,0 DAT DW ‘BA’,0,’DC’,0 DAT DB ‘BA’,’DC’
4. 9. 试按下列要求在数据段中依次书写各数据定义语句:
(1) 以DA1为首字节的连接存储单元中存放20H个重复的数据序列:2,3, 10 个4,一个7。
(2) DA2为字符串变量,用字变量(DW)设置一字符串;‘STUDENTS’(按 此顺序存放在各单元中)
(3) 用等值语句给符号COUNT赋值以DA1为首址的数据区共占有的字节数,此等值语句必须放在最后一语句。 解:
(1) DAT1 DB 20H DUP (2,3,10 DUP (4),7) (2) DAT2 DW ‘TS’, ‘DU’ ,’NE’,’ST’ (3) COUNT EQU DATA2-DATA1
4. 10. 下面程序段是实现从键盘输入十个一位10进数后累加。最后累加和以非压缩BCD码形式存放在AH(高位)和AL(低位)中。试把程序段中所空缺的指令填上。
XOR BX,BX
LOP: MOV AH,01H ;键盘字符输入
INT 21H
MOV AH,BH ADD AL,BL
MOV BX,AX
解:
MOV CX, 10 AAA
4. 11. 下面程序段的功能是把DA1数据区的数0~9转换为对应的ASCII码。试完善本程序段。 DA1 DB OOH,O1H,02H,03H,04H,05H,06H,07H,08H,09H ASCI DB 10 DUP(?) CUNT=ASCI-DA1
LEA SI,DA1 LEA DI,ADCI
8
LOP1: MOY AL,[SI]
MOV[DI],AL INC SI INC DI
LOOP LOP1
解:
MOV CX, COUT ADD AL, 30H
4. 12. BUFF‘ABD$QC%$A…XYZ’
CONT EQU $-BUFF
…
CLD
LEA DI,BUFF MOV CX,CONT MOV AL,‘$’ XOR DX,DX
NEXT: REPNZ SCA,SB
CMP CX,0 JZ K1 INC DX JMP NEXT
K1: …
上述程序段运行后,DX中的值表示的意义是什么? 解:
DX中为$个数
4. 13. 设A,B是长度为10的字节数组,用串操作指令编写程序实现AB两数组内容的相互交换,试完善本程序。 DATA SEGMENT A DB1,2,3,4,5,6,7,8,9,0AH
DRG OO10H
B DB 0AH,9,8,7,6,5,4,3,2,1 DATA ENDS
…
LEA SI,A LEA DO,B MOV CX,10
LOP: LODSB
XCHG AL,[DI] DEC DI
9
STOSB
INC DI LOOP LOP
解:
XCHG SI, DI XCHG SI, DI
4. 14. 现有一子程序:
SUB1 PROC
TEST AL,80H JE PLUS
TEST BL,80H JNE EXITO JMP XCHANGE
PLUS: TEST BL,80H
JE EITO
XCHANGE: XCHG AL,BL EWITO: RET SUB1 ENDP 试回答:
(1) 子程序的功能是什么?
(2) 如调用子程序前AL=9AH,BL=77H,那么返回主程序时,AL=?BL=? 解:
(1) 测试AL, BL两数的符号,如为同号直接返回,如为异号,则AL与BL交换
(2) AL=77H, BL=9AH
4. 15. 编写一程序段,将AL中的第7和0位,第6和1位,第5和2位,第4和3位互换。 解:
MOV CX, 8
MOV AH, 0
K1: SHR AL, 1 RCL AH, 1 DEC CX JNZ K1
MOV AL,AH
4. 16. 试编写一程序段,在CHAR为首址的26个字节单元中依次存放字母‘A’~‘Z’ 解:
10
MOV AL, ‘A’
MOV DI, OFFSET CHAR MOV CX, 26
LOP: MOV [DI], AL INC AL INC DI LOOP LOP
4. 17. 设在数据段中有X,Y两变量(字节单元),试编写程序段计算(只写有关程序功能的指令):
X 当X≥0时
Y= |X| 当X<0时
解:
MOV AL, X
CMP AL, 0 JGE BIGR NEG AL
BIGR: MOV Y, AL
4. 18. 编程序段计算SUM==al+a2+…+a20,已知a1~a20依次存放在以BUF为首址的数据区,每个数据占两个字节,和数SUM也为两个字节。(要求用循环结构编写,循环控制采用计数控制)。此题考生勿需书写源程序格式,只需把试题要求的有关指令序列书写出来。) 解:
MOV AX, 0
MOV BX, OFFSET BUF MOV CX, 20
LOP: ADD AX, [BX] INC BX INC BX LOOP LOP MOV SUM, AX
4. 19. 编写一个完整的源程序,将BUF字节单元存放的两位BCD码,转换成2个字节的ASCII码,并分别存放在ASC和ASC+1字节单元中。 例如:(BUF字节单元)=58H,那么(ASC字节单元)=35H,(ASC+1字节单元)=38H。 解:
DATA SEGMENT BUF DB 58H
ASC DB 2 DUP (?) DATA ENDS
STACK1 SEGMENT PARA STACK
11
DW 20H DUP (0) STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA START : MOV AX, DATA MOV DS, AX MOV AL, BUF AND AL, 0F0H MOV CL, 4 SHR AL, CL OR AL, 30H MOV ASC, AL MOV AL, BUF AND AL, 0FH OR AL, 30H
MOV ASC+1, AL MOV AL, 4CH INT 21H
CODE ENDS
END START
4. 20. 在A1单元开始定义了一长度为N的字符串,找出其中所有的小写字母并存放到以A2开始的存储区中。统计出小写字母的个数,存放到SL单元中。请编一完整的源程序。数据段如下: DATA SEGMENT A1 DB‘…’ N EQU $-A1 A2 DB N DUP(?) SL DB ? DATA ENDS 解:
DATA SEGMENT A1 DB ‘……’ N EQU $-A1 A2 DB N DUP (?) SL DB ? DATA ENDS
STACK SEGMENT PARA STACK
DW 10H DUP (0) START ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK START : MOV AX, DATA MOV DS, AX
12
LEA SI, A1 LEA DI, A2 MOV CX, N XOR BL, BL AGAIN: MOV AL, [SI] CMP AL, ‘a’ JB EXIT CMP AL, ‘z’ JA EXIT
MOV [DI], AL
INC BL INC DI
EXIT: INC SI
LOOP AGAIN MOV SL, BL MOV AH, 4CH INT 21H CODE ENDS
END START
4. 21. 设在DAT单元存放一个-9~+9的字节数据,在SQRTAB数据区中存放0~9的平方值,请用直接查表法编写一个子程序,在SQRTAB中查找出DAT单元中数据对应的平方值送SQR单元。并写出主程序的调用方式。 数据段如下:
DATA SEGMENT DAT DB XXH
SQRTAB DB 0,1,4,9,…7781 SQR DB ? DATA ENDS 解:
DATA SEGMENT
DAT DB XXH
SQRTAB DB 0,1,4,9, ……,81
SQR DB ? DATA ENDS
STACK1 SEGMENT PARA STACK
DB 20H DUP (0) STACK1 ENDS CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK1 START : MOV AX, DATA
MOV DS, AX …………
CALL SUBROT
13
……
MOV AH, 4CH INT 21H SUBROT PROC
PUSH AX PUSH BX
LEA BX, SQRTAB MOV AL, DAT
TEST AL, 80H JNS NEXT NEG AL
NEXT: XLAT SQRTAB MOV SQR, AL POP BX POP AX RET SUBROT ENDS CODE ENDS
END START
4. 22. 编写能完成下列要求的程序:测试字节数据STATUS,若其中位1、3、5有一位是“1”,程序就转至ROUT1;若有二位是“1”,就转向ROUT2;若三位都是“1”,就转向ROUT3;若这三位没有一位是“1”,就转向ROUT4。 解:
MOV AL, STATUS AND AL, 00101010B JZ ROUT4
CMP AL,00101010B JZ ROUT3
TEST AL, 00001010B JZ ROUT1
TEST AL, 00101000B JZ ROUT1
TEST AL, 00100010B JZ ROUT1 JMP ROUT2 HLT
4. 23. STRING字符串的最大长度为80个字符,字符串的结束用字符$表示。编写程序在该字符串中查找是否有空格符(ASCII码为20H),若有就将第一个空格在字符串中的位置(00~4FH)存入POST单元;若无空格则将-1存入POST。 解:
DATA SEGMENT
14
STRING DB ‘……$
LENT’ EQU $- STRING POST DB ?
SEARCH: MOV BX, OFFSET STRING MOV DL, 20H MOV POST, 0FFH LOP: MOV AL, [BX] INC BX
CMP AL, ‘$’ JZ STP
CMP AL, DL JNZ LOP
DEC BX
MOV POST, BX
STP: MOV AH, 4CH INT 21H
第5章
5. 1. 用下列芯片构成存储系统,各需要多少个RAM芯片?需要多少位地址作为片外地址译码?设系统为20位地址线,采用全译码方式。
(1) 512×4位RAM构成16KB的存储系统; (2) 1024×1位RAM构成128KB的存储系统; (3) 2K×4位RAM构成64KB的存储系统; (4) 64K×1位RAM构成256KB的存储系统; 解:
1) 需要16KB/512×4=64片 片外地址译码需11位地址线。 2) 需要128KB/1K×1=1024片 片外地址译码需10位地址线。 3) 需要64KB/2K×4=64片 片外地址译码需9位地址线。 4) 需要256KB/64K×1位=32片 片外地址译码需4位地址线。
15
5. 2. 现有一种存储芯片容量为512×4位,若要用它组成4KB的存储容量,需多少这样的存储芯片?每块芯片需多少寻址线?而4KB存储系统最少需多少寻址线? 解:
4KB/ 512×4b= 16,需要16片 每片芯片需9条寻址线
4KB存储系统最少需12条寻址线
5. 3. 有-2732EPROM芯片的译码电路如图所示,请计算该芯片的地址范围及存
储容量。
图习 5-1
解:
2732的地址范围为
11111111000000000000~11111111111111111111=FF000H~FFFFFH,
存储容量为4KB。
5. 4. 某一存储器系统如图习5-2所示,回答它们的存储容量各是多少?RAM和EPROM存储器地址分配范围各是多少? 解:
EPROM的地址范围为FD000H~FDFFFH,存储容量为4KB;RAM的地址范围为F9000H~F97FFH或F9800H~F9FFFH,存储容量为2KB。由于A11未参加译码,因而有地址重叠,一个内存单元有2个地址对应。
5. 5. 使用6116、2732和74LS138译码器构成一个存储容量为12KB ROM(00000H~02FFFH)、8KB RAM(03000H~04FFFH)的存储系统。系统地址总线为20位,数据总线为8位。
解:
16
5. 6. 8086CPU执行MOV[2001]H,AX指令从取指到执行指令最少需要多少时间?设时钟频率为5MHZ,该指令的机器码为4个字节,存放在1000H;2000H开始的4个单元中。
图习 5-2
解:
在无等待周期的情况下,从取指到执行共需:
4×4×1/5M=3.2μs(一个总线周期在无等待周期的情况下由4个时钟周期T组成)。
17
5. 7 图习5-2. 为由2片静态RAM组成的微机系统存储器,此时芯片#1和芯片#2的地址范围和各自的存储总容量。
图习5-3
解:
芯片#1的地址范围为:
A19 ~ A14 A13 A12 A11 ~ A0 ×××××× 0 1 0 ~ 0 ×××××× 0 1 1 ~ 1
当A19~A14为全“0”时,其地址范围为01000H~01FFFH, 芯片#2的地址范围为:
A19 ~ A14 A13 A12 A11 A10 ~ A0 ×××××× 1 0 0 0 ~ 0 ×××××× 1 0 0 1 ~ 1
当A19~A14为全“0”时,其地址范围为02000H~027FFH,芯片#1的存储容量4KB;芯片#2为2KB。
5. 8. 用二片8K×8位的静态RAM芯片6264组成的8位微机系统的存储器电路如图习5-4所示,试计算芯片6264 #1和 #2的地址范围以及存储器的总容量。
18
图习5-4
解:
芯片 #1的的地址范围计算:
A19 ~ A15 A14 A13 A12 ~ A0 ××××× 1 0 0 ~ 0 ××××× 1 0 1 ~ 1
当无关项取“0”时,地址范围为04000H~05FFFH 芯片 #2的的地址范围计算:
A19 ~ A15 A14 A13 A12 ~ A0 ××××× 0 1 0 ~ 0 ××××× 0 1 1 ~ 1
当无关项取“0”时,地址范围为02000H~03FFFH。该存储器的总容量为16KB。
5. 9. 微机系统的存储器由5片RAM芯片组成,如图习5-5所示,其中U1有12 条地址线,8条数据线,U2~U5各有10条地址线,4条数据线,试计算芯片U1和U2,U3的地址范围,以及该存储器的总容量。
图习5-5
解:
芯片 U1的的地址范围计算:
A19 ~ A14 A13 A12 A11 A10 ~ A0 0 ~ 0 0 1 0 0 ~ 0 0 ~ 0 0 1 1 1 ~ 1 地址范围为01000H~01FFFH 芯片 U2和U3的的地址范围计算:
A19 ~ A14 A13 A12 A11 A10 A9 ~ A0
19
0 ~ 0 1 0 0 0 0 ~ 0 0 ~ 0 1 0 0 0 1 ~ 1
地址范围为02000H~023FFH。总容量为6KB(U1为4KB、U2、U3为1KB、U4、U5为1KB)。
第6章
6. 1. CPU同外设交换的信息有三种类型:数据信息、状态信息和控制信息,请说明CPU是如何通过其三总线(地址总线、数据总线和控制总线)同外设交换这三类信息的?
6. 2. 简述查询式数据传送方式的工作过程。 6. 3. 简述中断传送方式的工作过程。 6. 4. 简述三种DMA传送方式的区别。
6. 5. 简述DMA控制器同一般接口芯片的区别。 6. 6. 画出查询传送方式输出数据的流程图 解:
读入状态字 ←←←←←← ↓ ↑N 检查输出设备是否准备好→ ↓Y
数据口输出数据,控制口输出控制信息
6. 7. 通过如图习6-1的电路,可以把I/O指令寻址结构改为存储器映象I/O端口寻址的结构,试计算该电路结构中,I/O端口和存储器的地址范围。并扼要说明二种I/O端口寻址的区别。
20
图习 6-1 存储器映象I/O
解:
I/O端口的地址范围为:
11110000000000000000B~11111111111111111111B, F0000H~FFFFFH
存储器的地址范围为:
00000000000000000000B~11101111111111111111B 00000H~EFFFFH
两者区别见教材P.214
6. 8. 图习6-2为一个LED接口电路,写出使8个LED管自左至右依次发亮2秒的程序,并说明该接口属于何种输入输出控制方式,为什么?
解:
控制程序为:
图习 6-2 LED接口
MOV AL,7FH LOP: OUT
20H,AL
CALL DELAY2S ;调用延时2秒子程序
21
ROR AL,1 JMP
LOP
该接口属无条件传送方式,CPU同LED之间无联络信号,且无中断控制逻辑。LED总是已准备好,可以接收来自CPU的信息。
6. 9. 简要说明8237A三种基本传送类型的特点。
6. 10. 简要说明8237A四种特殊传送类型的特点。
6. 11 图习6-4是一个具有中断功能的输入接口电路,当外设数据准备就绪时,发一个READY的正脉冲,向CPU发中断请求,请分析该电路的工作过程。
图习6-4
解:
该电路工作过程如下:当外设准备好数据后,把数据送入数据寄存器U1,同时发出一个READY正脉冲送到中断请求触发器U3,U3的Q为高电平,送与门3。U2为中断允许触发器,在传送数据前,由CPU对U2初始化,即用MOV AL,01H;OUT Y2,AL使U2的D =“1”,则U3的Q端生成的中断请求信号通过与门3向CPU发出中断请求INTR,CPU若满足中断响应条件,转入中断服务程序,在中断服务程序中用IN AL,Y1指令产生负脉冲,使U1(输入数据寄存器)的OE有效,读入外设送入的数据。
第7章
7. 1. 具有中断屏蔽的接口电路中的“屏蔽”同“屏蔽中断”中的“屏蔽”是否
22
一回事,若不是,有何区别?
7. 2. 8086CPU有哪几种中断? 7. 3. 简要说明8086中断的特点?
7. 4. 简述8086可屏蔽中断的响应过程。
7. 5. 简要说明8259A中断控制器中的IRR、ISR和IMR三个寄存器的功能。 7. 6. 中断应答时序如图习7-1所示,说明前后两个INTA周期的任务。
图习 7-1
解:
从图可见,该中断应答时序是8086在最大方式下的总线时序,在两个INTA周期内, LOCK信号有效(低电平),通知其他CPU不能向当前控制总线的CPU发出总线请求RQ / GT信号,以保证中断响应周期完整地执行。
在第一个INTA有效期间,通知8259A,中断请求已被接受;在第二个INTA有效期间,8259A将请求服务的那个设备的中断类型码送上AD7~AD0。
7. 7. 有-8086中断电路如图习7-2所示,请回答下列问题:
(1)根据图中给出条件,写出五种内部中断1、2、3、4、5的名称(1、2两项次序不能颠倒);
(2)写出8086三条引脚6、7、8的符号及名称; (3)写出芯片9的名称,并简述其功能;
图习 7-2
解:
1.为单步中断; 2. 为溢出中断; 3. 为断点中断; 4. 为指令中断; 5. 为除法出错中断; (3~5可互换)
23
6. 不可屏蔽中断NMI; 7 为可屏蔽中断INTR 8. 为中断应答INTA;
9. 为可编程中断控制器8259,功能见教材P.258
7. 8. 简要说明8259A的五种中断优先权管理方式的特点。 7. 9. 简要说明8259A的二种中断结束方式的特点。
第8章
8. 1. 根据接口电路的功能,简要说明I/O接口电路应包括哪些电路单元? 解: [教材P.275]
8. 2. 扼要说明8255A工作于方式0和方式1的区别。 解: [教材P.280]
8. 3. 试说明8255A在方式1输入时的工作过程。 解:
[教材P.281]
8. 4. 试说明8255A在方式1输出时的工作过程。 解:
[教材P.280]
8. 5. 8255A的三个端口在使用时有什么差别? 解:
PA口可工作于方式0、方式1、和方式2 PB口可工作于方式0、方式1 PC口仅可工作于方式0
方式0可工作于无条件传送和查询传送
24
方式1和2可工作于查询传送和中断传送
8. 6. 说明8253-5的方式2与方式3的工作特点。 解:
可输出重复波形,既可软件触发启动,又可硬件触发启动。
8. 7. 说明8253-5的方式1与方式5的工作特点。 解:
只能采用硬件触发启动。
8. 8. 8253-5在写入计数初值时,二进制计数和十进制计数有无区别?若有,有何区别? 解:
采用二进制计数时,将计算所得的数值采用二进制、十进制或十六进制表示都可以,例如计数初值为50,可写成50、32H或00110010B都可;
采用十进制计数时,必需将计算所得的数值写成BCD码表示,例如, 计数初值为50,必需写成50H。
8. 9. 说明8251A引脚信号中-RTS、-CTS、-DTS和-DSR的作用。 解:
[教材P.331]
8. 10. 什么是8251A的方式指令字和命令指令字,对二者在串行通信中写入流程进行说明。 解:
[教材P.333]
8. 11. 异步通信中,异步的含义是什么? 解:
这里的异步是指所传送的字符串中,字符之间是异步的,而各字符内各位之间还是同步的。
8. 12. 8251A的状态字哪几位和引脚信号有关?状态位TXRDY和引脚信号
25
TXRDY有什么区别?它们在系统设计中有什么用处? 解:
[教材P.334~335]
8. 13. 试说明8251A芯片控制信号CS和C/D的功能。 解:
[教材P.330]
8. 14. 说明DAC0832芯片中8位输入寄存器和8位DAC寄存器的作用及工作过程。 解:
[教材P.3342]
8. 15. 说明D/A转换器芯片对输出电路的要求。 解:
数/模转换器一般为电流输出,若实际应用中需要模拟电压,通常加接运算放大器,用以实现I~V的转换。另外还有单极性输出和双极性输出的要求
8. 16. 如图习8-1所示的A/D转换器,试说明器件的运行过程,及各信号的作
用。
图习 8-1 图习 8-2
解:
输入模拟量,输出数字量(粗箭头)。
START为启动信号,上跳沿时触发启动模拟输入信号转换。
启动后,检查EOC(转换结束信号),转换结束时EOC=L,从输出端得到转换后的数字量。
8. 17. 8255用作查询式打印机接口时的电路连接和打印机各信号的时序如图习8
26
-2 所示,8255的端口地址为80H~83H,工作于方式0,试编写一段程序,将数据区中变量DATA的8位数据送打印机打印,程序以RET指令结束,并写上注释。
解:打印程序为:
MOV OUT
AL,0DH 83H,AL AL,82H AL,04H PULL
AL,DATA ;将DATA送PA口 80H,AL AL,0CH 83H,AL AL,0DH 83H,AL
;置STB为“H” ;产生负脉冲选通信号 ;置STB为“L” ;查询BUSY状态 ;置STB为“H”
PULL:IN
TEST JNZ
MOV OUT
MOV OUT
MOV OUT RET
8. 18. 键盘输入信息的过程有哪些? 解
[教材P.286]
8. 19. 若用共阴极LED数码管作显示器,它的接口连接图如图习8-3所示。写
出显示‘7’的段选码。 解:
共阴极接法,阴极接地,阳极连数据线接”1”,LED显示,”7”的段选码为CBA=111,即 07H。
8. 20. 若输入设备输入的ASCII码通过8255A端口B,采用中断方式,将数据送入INBUF为首址的输入缓冲区中,连接输入直到遇到$就结束输入。假设此中断类型码为52H,中断服务程序的入口地址为INTRP。8255A的端口地址为80H~83H。
(1) 写出8255A初始化程序(包括把入口地址写入中断向量表);
(2) 写出完成输入一个数据,并存入输入缓冲区BUF1的中断服务程序。
27
解:
MOV AL , 84H OUT 83H, AL MOV AL, 04H OUT 83H, AL
MOV [ 4×52H ] , OFFSET INBUF MOV [4×52H +2 ] , SEG INBUF STI
…….
INBUF PROC FAR
MOV BX , OFFSET BUF
LOP : IN AL , 81H
CMP AL , ‘ $ ‘ JZ DONE MOV [ BX ] , AL INC BX JMP LOP
DONE :IRET
8. 21. 定时器8253通道0按方式3(方波发生器)工作,时钟CLK0的频率为1MHZ,要求输出方波的频率为40KHZ,此时写入的计数初值应为多少?输出方波的“1”和“0”各占多少时间。 解:
计数初值为fCLK0 / fOUT0 = 1MHz / 40KHz = 25 方波的 ’1’ 占13μs, ‘ 0 ‘占12μs
8. 22. 定时器8253输入时钟频率为1MHZ,并设定为按BCD码计数,若写入的计数初值为0080H,则该通道定时时间是多少? 解:
80μs:(TCLK = 1 / 1MHz =1μs )
28
8. 23. 试编程,将8253计数器0设置为模式1,计数初值为3000H,计数器1设置为模式2,计数初值为2010H;计数器2设置为模式4,计数初值为4030H。 解:
0通道 方式1 n0 = 3000H 1通道 方式2
n1 = 2010H 图习 8-3
2通道 方式4 n3 = 4030H
MOV AL , 22H (00100010B) OUT 83H , AL MOV AL , 30H OUT 80H , AL
MOV AL , 74H (01110100B) OUT 83H , AL MOV AL , 10H OUT 81H , AL MOV AL , 20H OUT 81H , AL
MOV AL , 0B8H (10111000B) OUT 83H , AL MOV AL , 30H OUT 82H , AL MOV AL , 40H OUT 80H , AL
8. 24. 8253-5的计数通道0连接如图习8-4,试回答
(1) 计数通道0工作于何种工作方式,并写出工作方式名称 (2) 写出计数通道0的计数初值(要列出计算式)
29
图习 8-4
解:
方式2,频率发生器
n0 = 1ms / 400ms = 1ms / 0.4 = 2500
8. 25. 若用8253计数器对设备的转轴的旋转速度进行测试,接口电路如图习8-5 所示。从图可知,
若与轴相连的转盘上均匀地钻有每圈50个孔,当轴旋转时,通过光电转换,每通过一个小孔,产生一个正脉冲,当轴旋转一圈,就会有50个脉冲通过CLK
输入8253计数器进行减法计数,若假设此转轴的转速范围在50~1000转/秒,并设8253的端口地址为84H~87H。 习 8-5
(1) 若采用定时测试已转换过的脉冲个数而转换为测试转轴的转速,单位为转/秒。说明它的计算过程?
(2) 若用计数器0对脉冲计数,用计数器1作为定时器,设它的CLK1,频率为200KHZ,用定时100ms来计数。写出计数器0、1的工作方式控制字的计数初值,并注释?写出8253的初始化程序? 解:
(1) 若在定时T时间间隔内,测得计数脉冲个数为n,由于旋转一圈有50个脉冲,所以在T时间内旋转n / 50T (转 / 秒)。
(2)计数器0作为对脉冲个数计数,可以采用方式0,计数初值可设置为最大值0000H,因为可测的转速范围为50~1000转 / 秒,即2500~50000个脉冲 / 秒,按题意,采用100ms定时采集,脉冲个数也在250~5000之间,因此,采用BCD码,从10000开始减法计数。
计数器1作为100ms定时器,由它的OUT1作为定时中断请求,可设置为方式2,因为定时时间间隔T=NT0, N=T/T0
按题意:T = 0.1秒, f0=200×103,所以N=20000。
30
计数器0的工作方式控制字为:00110001B (31H) 计数初值N0=0000H,即10000 计数器0的工作方式控制字为:01110100B (74H) 计数初值N1=20000H,即4E20H 8253初始化程序 MOV AL , 31H OUT 87H , AL MOV AL , 00H OUT 84H , AL OUT 84H , AL MOV AL , 74H OUT 87H , AL MOV AL ,20H OUT 85H , AL MOV AL , 4EH OUT 85H , AL
8. 26. 设异步传输时,每个字符对应1个起始位、7个信息位、1个奇/偶校验位和一个停止位,如果波特率为9600b/s,则每秒钟能传输的最大字符数是什么? 解:
9600 /( 1+7+1+1)=960
8. 27. 设8251A为异步方式,1个停止位,偶校验,7个数据位,波特率因子为16。请写出其方式字。若发送使能,接收使能,DTR端输出低电平,TXD端发送空白字符,-RTS端输出低电平,内部不复位,出错标志复位。请给出控制字。 解:
方式字为 01111010 控制字为 00101111
8. 28. 对8251A进行初始化,要求:工作于异步方式、采用奇校验、指定二个停止位、7位ASCII字符、波特率因子为16;出错指示处于复位状态、允许发送、允许接收、数据终端就绪,不送出空白字符、内部不复位。
31
解:
设8251A的端口地址为80H和81H 则初始化程序为 MOV AL ,0DAH OUT 81H , AL MOV AL , 17H OUT 81H , AL
8. 29. 设计一个采用异步通信方式输出字符的程序段。规定波特率因子为64,7个数据位,1个停止位,用偶校验,端口地址为40H,42H,缓冲区为2000H~3000H。 解:
ADDR8251A EQU 40H BUF EQU 3000H ……
CLI
XOR AX , AX MOV DX , ADDR8251A ADD DX , 2 OUT DX ,AL OUT DX ,AL OUT DX ,AL MOV AL ,40H OUT DX , AL MOV AL ,01111011B OUT DX , AL MOV AL ,00110001B OUT DX , AL MOV AX ,2000H MOV ES ,AX
32
MOV SI , BUF
AGAIN : IN ,AL , DX
TEST AL ,01H JZ AGAIN
MOV AL ,ES:[ SI ] SUB DX ,2 OUT DX ,AL
8. 30. 如果8251A的工作方式寄存器内容为01111011,那么发送的字符格式如何?为了使接收的波特率和发送的波特率分别为300b/s和1200b/s,试问加到-RXC和-TXC上时钟信号的频率应为多少? 解:
方式字为 01111011B,表示8251A设定为异步方式,1位起始位,7位数据位,1位结束位,1位偶校验位,波特率因子为64,若接收和发送的波特率分别为300 b /s 和1200 b / s,则加到RXC和TXC上的时钟频率为300×64和1200×64。
8. 31. 设有甲乙两台计算机利用8251A进行通信。通信规程如下:异步传送,波特率为600b/s,数据位数为7,1位停止位,偶校验。其硬件连接如图习8-6 所示。试完成下述的通信功能:甲机发送,将内存首址为ADAT的200字节的数据块向乙机发送;乙机接收,将接收到的200字节的数据,顺序存放在内存首址为BDAT的数据缓冲区中。 解:
ADDR8251A为8251A的数据口地址 甲机程序段:
XOR AX ,AX
MOV DX , ADDR8251A INC
图习 8-6
OUT DX ,AL
OUT DX ,AL
OUT DX ,AL ;往8251A的控制口送3个00
33
DX
SEND AGAIN SEND
MOV AL ,40H
OUT DX ,AL ; 往8251A的控制口送40H,使其复位 MOV AL ,01111011B
OUT DX ,AL ;送方式字 MOV AL ,00000001H
OUT DX ,AL ;送控制字,置发送状态 CALL SEND ;调用发送子程序 …….
PROC NEAR ; 发送子程序
PUCH AX PUSH CX PUCH SI MOV CX ,80H
IN AL , DX
TEST AL ,81H
JZ AGAIN ;测TXRDY, DSR位 MOV AL ,ADAT [ SI ] DEC DX OUT DX ,AL INC SI LOOP AGAIN POP SI POP CX POP AX RET
ENDP
乙机程序段 XOR AX ,AX
MOV DX , ADDR8251A
34
: INC DX OUT DX ,AL
OUT DX ,AL
OUT DX ,AL 往8251A的控制口送3个00 其复位
RECEIVE
AGAIN
;
MOV AL ,40H
OUT DX ,AL MOV AL ,01111011B
OUT DX ,AL MOV AL ,00010110B
OUT DX ,AL CALL RECEIVE …….
PROC NEAR PUCH AX PUSH CX PUCH DI MOV ERROR , 0 MOV DI, 0 MOV CX ,80H
IN AL , DX
MOV AH ,AL
TEST AL ,02H JZ AGAIN DEC DX
INC DX MOV BDAT [ DI ] ,AL
INC DI
35
; 往8251A的控制口送40H,使
; 送方式字 ; 送控制字 ; 调用接收子程序 ;接收子程序 ; 测RXDRY ; 接收数据
: SEND 使其复位
RECEIVE
AND AH ,00111000B DEC DX OUT DX ,AL INC SI LOOP AGAIN POP SI POP CX POP AX RET
ENDP
乙机程序段 XOR AX ,AX
MOV DX , ADDR8251A INC DX OUT DX ,AL
OUT DX ,AL
OUT DX ,AL
MOV AL ,40H
OUT DX ,AL MOV AL ,01111011B
OUT DX ,AL MOV AL ,00010110B
OUT DX ,AL CALL RECEIVE …….
PROC NEAR PUCH AX
36
; 往8251A的控制口送3个00 ; 往8251A的控制口送40H,
; 送方式字 ; 送控制字 ; 调用接收子程序 ;接收子程序
PUSH CX PUCH DI MOV ERROR , 0 MOV DI, 0 MOV CX ,80H
AGAIN : IN AL , DX
MOV AH ,AL
TEST AL ,02H ;测RXDRY JZ AGAIN DEC DX
IN AL ,DX ;接收数据 MOV BDAT [ DI ] ,AL INC DI
AND AH ,00111000B OR ERROR , AH LOOP AGAIN POP SI POP CX POP AX RET
RECEIVE ENDP
8. 32. ADC0809通过并行接口芯片8255与系统总线相连的接口电路如图习8-7 所示,假定8255端口片选地址范围为80H~83H,ADC0809输出允许使能地址范围为84H~87H。
试编写一个子程序完成通道IN0的A/D数据输入。(应包括程序注释与8255芯片的初始化部分)
37
图习 8-7
解:
MOV AL , 10011000B (98H) OUT 83H , AL MOV AL , 08H OUT 82H , AL MOV AL ,00H OUT 82H , AL MOV AL ,08H OUT 82H , AL
LOP : IN AL , 82H TEST AL , 80H JZ LOP IN AL , 84H IN AL , 80H HLT
8. 33. 一个采用查询传送的输入接口由两个端口组成,一个是数据端口,地址为120H,一个是状态端口,地址为121H,用D7位表示就绪位,外设工作时,已启动外设。 利用上述接口电路从输入设备上输入1000个字节的数据送存储器中BUFFER缓冲区,画出流程图,编写控制程序段。 解:
38
该控制程序的流程图如图2.34所示。 程序段为:
LEA
SI,BUFFER CX,1000 DX,121H AL,DX AL,1 LOP1 DX AL,DX [SI],AL SI LOP
MOV MOV IN SHL
LOP: LOP1:
JNC DEC IN
MOV INC
LOOP HLT
图2.34 控制程序流程图
8. 34. 一个采用查询传送的输出接口,其数据端口地址为205H,状态端口地址为206H,外设状态位用D0传送,输出数据时可启动外设,将存储器缓冲区BUFFER中的5000个字节数据输出,画出流程图,编写控制程序段。
39
解:
该控制程序的流程图如图2.35所示。
程序段为:
MOV MOV
SI,OFFSET BUFFER CX,5000 AL,[SI] DX,205H DX,AL DX AL,DX AL,1 LOP2 SI LOP1
LOP1:MOV
MOV OUT INC
LOP2:IN
SHR JC INC
LOOP
HLT
图2.35控制程序流程图
40
8. 35. 用一片8255A控制一组红、绿、黄灯,如习图8-8所示,反复检测K1,K2,要求由K1、K2的“闭合”和“断开”控制红、绿、黄三灯的点亮。 当K1合,K2合时,黄灯亮;
K1合,K2断时,红灯亮; K1断,K2合时,绿灯亮; K1断,K2断时,黄灯亮; 请编制初始化程序以及控制程序。 习图8-8
已知8255A的端口地址为60H~63H。
解:
初始化程序及控制程序如下: MOV AL,90H
OUT
63H,AL LOP: IN AL,60H AND AL,03H JZ L3
CMP AL,03H JE L3
CMP AL,02H JE L2
CMP AL,01H
JE L1
JMP
LOP
L1:MOV AL,02H OUT 62H,AL
JMP
LOP
L2:MOV AL,01H OUT 62H,AL
JMP
LOP
L3:MOV AL,04H OUT 62H,AL
JMP
LOP
;初始化
;K1,K2全合
;K1,K2全断
;K1合,K2断
;K1断,K2合
;亮绿灯
;亮红灯
;亮黄灯
41
8. 36. 习图8-9为采用8253-5产生定时中断信号. 36. 习图8-9为采用8253-5产生定时中断信号,送8259A的IR2,已知fCLK=1MHz要求每隔1小时发出一个中断请求,IR2的中断类型号为0AH,中断服务程序的人口地址为INTER,8253-5的端口地址为180H~183H,试编制8253-5的初始化程序,并把中断服务程序的人口地址送入中断向量表。 解:
本题采用2个计数通道串联使用,要求两个计数通道的计数初始乘积为:
n0×n1=TOUT1/TCLK0
TCLK0=1/fCLK0=1/1MHz=1?s
n0×n1=3600s/1?s=36×108,可选取n0×n1=6×104 。因为n0和n1大于10000,
必需采用二进制计数。为方便起见,设定二个计数通道都工作于方式2。
8253初始化程序为:
MOV MOV OUT
AL,00110100B DX,183H DX,AL AL,01110100B DX,AL AX,60000 DX,180H DX,AL AL,AH DX,AL
DX,181H ;通道1写入计数初值 AX,60000 DX,AL AL,AH DX,AL
;通道0写入计数初值
;通道1初始化 ;通道0初始化
MOV OUT
MOV MOV OUT
MOV OUT
MOV MOV OUT
MOV OUT
MOV AX,0000H ;ES指向0000H(中断向量表首地
址在00000H)
MOV ES,AX
;DI指向IR2的中断向量地址指针
42
MOV DI,4×0AH
CLD MOV STOSW MOV STOSW HLT
AX,SEG INTER ;段基值写入中断向量表 AX,OFFSET INTER;偏移量写入中断向量表
8. 37. 8253-5的通道0按方式3工作,时钟CLK0的频率为1MHz,要求输出方波的重复频率为40KMHz,此时应如何写入计数值。 解:
通道0 方式3 fCLK0 =1MHz fOUT0=40KHz n0 = fCLK0 / fOUT0 = 1MHz / 40KHz = 25
MOV AL , 00010111 (17H) OUT 83H , AL MOV AL , 25H OUT 80H , AL
( 设8253的端口地址为80H~83H )
8. 38. 设8253-5与8086相连,8253-5的时钟频率为2 MHz,其口地址为340H~343H,通道0工作于定时方式,要求每20 ms向8086发出一中断请求信号,通道1要求输出频率为1000 Hz的方波,请编写初始化程序。 解:
8253的端口地址为340H~343H , fCLK=2MHz ,TCLK = 0.5μs 8253计数器0: TOUT0 = 20ms
计数器1:fCLK1=1KHz TOUT1 = 1ms
n0 = TOUT0 / TCLK0 = 20ms / 0.5μs = 40000 n0 = TOUT0 / TCLK0 = 1ms / 0.5μs = 2000
MOV
AL,00110100B (34H) ;通道0初始化 DX,343H DX,AL AX,40000 DX,340H DX,AL AL,AH
43
MOV OUT
MOV
MOV OUT
MOV
OUT
DX,AL
AL,01100111 (67H);通道1初始化 DX,343H DX,AL AL,20H DX,341H DX,AL
MOV
MOV OUT
MOV
MOV OUT
8. 39. 有一A/D转换器0809的接口如习图8-10所示。试回答如下问题:
(1)启动0809转换的程序段;
(2)检查0809转换是否结束的程序段; (3)读出0809转换后的数字量的程序段;
(4)按习图8-10电路连接,此时转换的是哪个模拟通道?
习图8-10
解:
1) OUT
40H,AL
2) LOP:IN
AL,41H
AL,01H LOP AL,41H AL,1 LOP
TEST JNZ
或LOP:IN
SHR JC
标号LOP可用其它名字。 注意:EOC输出端有一个反相器。 3) IN
AL,40H
44
4) IN7
8. 40. 有一8086系统同ADC0809的接口如习图8-11所示,请回答如下问题:
(1)启动ADC0809模拟通道IN7转换的指令(或指令段);
(2)查询ADC0809转换是否结束,未结束则继续查询的指令段; (3)使ADC0809的OE有效的指令段;
(4)若CLK88的重复频率为4 KHz,则CLOCK的重复周期为多少?
习图8-11
解:
74LS138
译码器Y2的地址范围为:
A8 A7 A6 A5 A4 A3 A2 A1 A0
即168H~16BH
1 0 1 1 0 1 0 × × Y3的地址范围为16CH~16FH
由于A2A1A0同0809的ADDC,ADDB,ADDA相连,则168H对应于模拟通道IN0,169H对应于模拟通道IN1,…16FH对应于模拟通道IN7 1)启动通道IN7的指令为: MOV OUT
DX,16FH DX,AL
注意:因为端口地址为16FH,大于8位,必须采用寄存器间接寻址,而且只能是D
2)查询0809 转换是否结束:
45
查EOC,即读8255A的PB。
8255A的端口地址为160H~163H,PB口地址为161H。
LOP :MOV IN
DX,161H AL,DX AL,01H
LOP
TEST JNZ
3)使OE有效的指令段: MOV IN
DX,16FH AL,DX
4)计算CLOCK的重复周期:
三个D门实现8分频,则CLOCK的周期为CLK88的8分频,fCLOCK = fCLK88/8=500KHz
8. 41. 教材图9-1的键盘接口中,若按下4行3列的键,问执行结果BL,BH,CX和AL各为何值? 解:
BL中的内容为键号,4行3列的键号为35, 则BL=35=23H;
BH中的内容为行码为EFH(11101111),但在执行后已指向下一行,故BH=DFH(11011111);
CX中的内容为计数值,扫描4行时CX=4;
AL中的内容为读出之列码,3列为F7H(11110111),但执行结束要循环右移到CF=1为止,此时AL=7FH(01111111)。
8. 42. 教材图9-3的8位数字显示器接口图中,若7段LED采用共阴极接法,要求程序不改变,硬件线路应作何变动? 解:
为使程序不改变,硬件连接可作如下改动:8个数码管的共阴极分别通过缓冲器同PA口连接,而每个阳极经过反相器同PB口的各位相连。当选择PA口送出的位选码为“0”时,如果PB口送出的段选码为“0”,则对应的发光管就发光,这同原来的共阳接法一样。
46
8. 43. 习图8-12为一微机系统的结构框图,#1、#2、#3是CPU总线,其中 #3为控制总线,h为M/-IO信号。试分析该结构框图,说明 #1、#2各为何种总线,a~g各为何种信号,U1~U9为何种器件?
习图8-12
解:
该微机系统由RAM、ROM、键盘、显示器、打印机及其接口组成。
①CPU三总线中已知 #3为控制总线,#1与 #2中 #2是双向总线,因此为数据总线;#1为地址总线。
②信号h接U1的控制端G,h经反相后接U2的控制端G,h为M/IO,U1,U2为地址译码器,其中U1供上部I/O接口的地址译码,U2供下部存储器的地址译码。U3为键盘接口是输入接口应为三态缓冲器,U4,U5分别是显示器接口和打印机接口是输出接口,应为锁存器。U6,U7的数据线为双向线,应为RAM,而U8,U9的数据线为输出线,应为ROM。
③信号a,f,g为RD信号,b,c为WR信号,d,e为RD或WR信号。
8. 44. 有一温度控制电路如习图8-13所示。通过计数器/定时器8253的通道1产生周期为1秒的方波,向可编程中断控制器8259A的IRj申请中断。若IRi上无中断请求信号IRQ,则CPU响应IRj,转向相应的中断服务程序INTJ。在INTJ中启动ADC0809,对IN5信号(来自温度传感器的温度信号)进行A/D转换,然后返回主程序。当A/D转换结束后,向8259A的IRk发出中断请求。若IRj上无中断请求信号IRQ,则CPU响应IRk,转向相应的中断服务程序INTK,在INTK中通过接通风扇与加热电炉来调节温度。上述程序中,若在IRi上有IRQ信号,则程序结束返回操作系统。
47
(1)计算8253、8255、8259的端口地址; (2)对8253初始化;
(3)启动0809工作的程序段;
(4)在固定优先权方式下,要保证本题中要求的操作,IRi、IRj和IRk的优先权排列图如何?
解:注意:教材的图中 (a)改为OUT1,(b)改为EOC ,
GATE1接+5V ,CLK1接1.25MHz
1)各芯片端口地址计算:
A7 A6 A5 A4 A3 A2 A1 A0 8253为88H~8BH(无关项为0) 1 0 0 0 1 × 0 0 0 1 1 0 1 1
1 0 0 1 0 × 0 0 8255A为90H~93H(无关项为0)
0 1 1 0
1 1
1 0 0 0 0 × 0 × 8259为80H,82H(无关项为0)
1 2)写方式选择字:
MOV OUT
AL,01100111B 8BH,AL
写入计数初值
n1 = TOUT1/TCLK1 = 1s/800μs = 1250 MOV OUT
AL,50H 89H,AL AL,12H 89H,AL 9DH,AL
MOV OUT
3) OUT
4) IRi >IRj >IRk
48
8. 45. 8255A的PA口写8个LED管连接如习图8-14,用8253作定时器控制8个LED管自下向上闪动,8253连接如习图8-8,闪动频率为每秒10次(即每秒钟每个LED管亮10次),8253三个计数通道和控制字寄存器的地址为40H~43H,8255A的端口地址为60H~63H,其控制程序如下: 主程序
习图8-13
… MOV AL,80H (1) OUT 63H,AL (2) MOV AL,34H (3) OUT 43H,AL (4) MOV AL,0A8H (5) OUT 40H,AL (6) MOV AL,61H (7) OUT 40H,AL (8) MOV AL,7FH (9) OUT 60H,AL (10) STI
LOP: HLT
JMP LOP 中断服务程序: INTROUT SEGMENT AT 1480H (11) ORG 3000H (12) ROR AL,1 (13) OUT 60H,AL (14) IRET (15) 试问:(1)从程序中给出的数据,计算8253中CLK0 的时钟周期TCLK0,以及该控制程序中所使用的中断服务程
49
习图8-14
序的中断类型号n的值,中断向量表见习图8-16。
(2)若闪动频率改为1分钟1次,且为自上到下闪动, 可采用如习图8-17所示的串接形式,中断类型为(1)中 习图8-15
计算值加1,请对程序作最小程度的更改,以满足上述要求(计数通道0工作不变)。
习图8-16 习图8-17
解:: 教材中P358第1行中为PA口与8个LED管….
(1)从主程序看,计数初值为61A8H=25000 n0 = Tout0 / TCLK0, TCLK0= Tout0 / n0 Tout0 = 1/10s÷8 = 12.5 ms fCLK0 = 1/TCLK0 = 2MHz
从中断服务程序看,中断向量为1480H:3000H,查中断向量表得中断向量的表指针为00034H,00034H/4=13=0DH(中断类型号)。这里必须指出中断向量的高8位1480H存在表内高地址,低8位3000存在表内低地址,因此所查中断向量从低地址到高地址为00H,30H,80H,14H。
(2)闪动频率改为1分钟1次即60秒内8个LED各亮1次。每管亮60秒/8 = 7.5秒
TCLK1=TOUT0=12.5ms,TOUT1=7.5s n1=TOUT1/TCLK1=7.5s/12.5ms=600=0258H
在主程序中指令(8)与指令(9)之间插入对计数通道1的初始化程序:
TCLK0 = Tout0 / n0 = 12.5 ms / 25000 = 0.5μs
MOV AL,74H
50