李伯成《微机原理》习题 第一章
本章作业参考书目:
① 薛钧义主编 《微型计算机原理与应用——Intel 80X86系列》
机械工业出版社 2002年2月第一版
② 陆一倩 编 《微型计算机原理及其应用(十六位微型机)》
哈尔滨工业大学出版社 1994年8月第四版
③ 王永山等 编 《微型计算机原理与应用》
西安电子科技大学出版社 2000年9月
1.1将下列二进制数转换成十进制数:
X=10010110B=
1*27+0*26+0*25+1*24+0*23+1*22+1*21 +0*21 =128D+0D+0D+16D+0D+0D+4D+2D=150D X=101101100B
=1*28+0*27+1*26+1*25+0*24+1*23+1*22+ 0*21+0*20 =256D+0D+64D+32D+0D+16D+4D+0D=364D X=1101101B=
1*26+1*25+0*24+1*23+1*22+0*21 +1*20 =64D+32D+0D+8D+4D+0D+1D=109D 1.2 将下列二进制小数转换成十进制数:
(1) X=0.00111B=
0*2-1+0*2-2+1*2-3+1*2-4+1*2-5=
0D+0D+0.125D+0.0625D+0.03125D=0.21875D
(2) X=0.11011B=
1*2-1+1*2-2+0*2-3+1*2-4+1*2-5=
0.5D+0.25D+0D+0.0625D+0.03125D=0.84375D
(3) X=0.101101B=
1*2-1+0*2-2+1*2-3+1*2-4+0*2-5+1*2-6=
0.5D+0D+0.125D+0.0625D+0D+0.015625D=0.703125D 1.3 将下列十进制整数转换成二进制数:
(1)X=254D=11111110B
(2)X=1039D=10000001111B (3)X=141D=10001101B
1.4 将下列十进制小数转换成二进制数: (1) X=0.75D=0.11B
(2) X=0.102 D=0.0001101B (3) X=0.6667D=0.101010101B
1.5 将下列十进制数转换成二进制数 (1) 100.25D= 0110 0100.01H
(2) 680.75D= 0010 1010 1000.11B
1.6 将下列二进制数转换成十进制数 (1) X=1001101.1011B =77.6875D
(2) X=111010.00101B= 58.15625D
1.7 将下列二进制数转换成八进制数
(1) X=101011101B=101‘011‘101B=535Q
(2) X=1101111010010B=1‘101‘111‘010‘010B=15722Q (3) X=110B=6Q
1.8 将下列八进制数转换成二进制数: (1) X=760Q=111'110'000B
(2) X=32415Q=11'010'100'001'101B
1.9 将下列二进制数转换成十六进制数:
X=101 0101 1110 1101B= 5 5 E D H
X= 1100110101'1001B= 11 0011 0101 1001B= 3 3 5 9H X= 1000110001B= 10 0011 0001 B= 2 3 1 H 1.10 将下列十六进制数转换成二进制数: X= ABCH= 1010 1011 1100 B
X=3A6F.FFH = 0011 1010 0110 1111.1111 1111B X= F1C3.4B =1111 0001 1100 0011 . 0100 1011B 1.11 将下列二进制数转换成BCD码:
(1) X= 1011011.101B= 1'011'011.101B= 91.625d=1001 0001.0110BCD
(2) X=1010110.001B= 1‘010‘110.001 =126.1 BCD 1.12 将下列十进制数转换成BCD码:
(1) X=1024D=0001 0000 0010 0100 BCD (2) X=632 = 0110 0011 0010 BCD (3) X= 103 = 0001 0000 0011 BCD
1.13 写出下列字符的ASCI I码:
A 41H 65D 0100 0001B 9 39H 47D * 2AH 42D = 3DH 45D ! 21H 33D
1.14 若加上偶校验码,下列字符的ASCII码是什么?
字符 原码 加上偶校验码之后 B 42H, 0100 0010B 42H,0100 0010B 4 34H, 0011 0100B B4H,1011 0100B 7 37H, 0011 0111B B7H,1011 0111B = 3DH,0011 1101B BDH,1011 1101B ! 21H,0010 0001B 21H,0010 0001B ? 3FH 0011 1111B 3FH,0011 1111B 1.15 加上奇校验,上面的结果如何?
字符 原码 加上奇校验码之后 B 42H, 0100 0010B C2H,1100 0010B 4 34H, 0011 0100B 34H,0011 0100B 7 37H, 0011 0111B 37H,0011 0111B = 3DH,0011 1101B 3DH,0011 1101B ! 21H,0010 0001B A1H,1010 0001B
? 3FH 0011 1111B BFH,1011 1111B 1.16 计算下式:
(1)[?B‘/2+ABH-11011001B]*0.0101BCD=(42H/2+ABH-D9H)*0.21 BCD = = F3H*0.21 BCD =(-DH) *0.21 BCD= -2.73D
(2) 3CH – [(84D)/(16Q)+‘8‘/8D]= 60D-[84D/14D+(56/8)]=60D-[13]D=
=47D
1.17 对下列十进制数,用八位二进制数写出其原码、反码和补码:
(正数的反码与原码相同,负数的反码除符号位之外其余各位按位取反。正数的补码与原码相同;负数的补码除符号位以外,其余各位按位取反之后再加一。)
数据 原码 反码 补码
+99 0110 0011 0110 0011 0110 0011 -99 1110 0011 1001 1100 1001 1101 +127 0111 1111 0111 1111 0111 1111 -127 1111 1111 1000 0000 1000 0001 +0 0000 0000 0000 0000 0000 0000 -0 1000 0000 1111 1111 0000 0000
1.18 8位二进制数原码可表示数的范围是 +127~-128; 8位二进制数补码可表示的数的范围是 +127~-127; 8位二进制数反码可表示的数的范围是:+127~-128;
1.19 16位二进制数的原码、补码、反码可表示的数的范围是多少?
+32767~-32768、+32767~-32768、+32767~-32768;
1.20 至少写出3种用二进制编码状态表示十进制数字的编码方式。
8421码、 5421码 2421码 余3码 十进制数 0000 0000 0000 0011 0 0001 0001 0001 0100 1 0010 0010 1000 0101 2 0011 0011 1001 0110 3 0100 0100 1010 0111 4 0101 1000 1011 1000 5 0110 1001 1100 1001 6 0111 1010 1101 1010 7
1000 1011 1110 1011 8 1001 1100 1111 1100 9
李伯成《微机原理》习题 第二章
① 薛钧义主编 《微型计算机原理与应用——Intel 80X86系列》
机械工业出版社 2002年2月第一版
② 陆一倩 编 《微型计算机原理及其应用(十六位微型机)》
哈尔滨工业大学出版社 1994年8月第四
版 ③ 王永山等 编 《微型计算机原理与应用》
西安电子科技大学出版社 2000年9月 ④洪志全等 编 《现代计算机接口技术》
电子工业出版社 2002年4月 ⑤仇玉章主编 《32位微型计算机原理与接口技术》
清华大学出版社 2000年9月
2.1 8086CPU的RESET引脚的功能是什么?
答:RESET引脚称为复位引脚,输入、三态、高电平有效;RESET引脚将使CPU立即结束当前操作,处理器要求RESET信号至少要保持4个时钟周期的高电平,才能结束它正在进行的操作。CPU复位以后,除了代码段寄存器CS的值为FFFFH外,其余所有寄存器的值均为零,指令队列为空。
当RESET回到低电平时,CPU开始执行―热启动‖程序,由于此时CS的值为FFFFH,IP的值为0000H,所以CPU复位以后执行的第一条指令的物理地址为
FFFF0H,该单元通常放置一条段间直接转移指令JMP SS:OO,SS:OO即为系统程序的实际起始地址。 2.2 在8086 CPU 工作在最小模式时,
(1) 当CPU 访问存储器时,要利用哪些信号? 当CPU访问存储器时,要利用AD0~AD15、WR*、RD*、IO/M*以及A16~A19;
(2) 当CPU访问外设接口时,要利用哪些信号? 当CPU访问外设接口时,同样要利用AD0---AD15、WR*、RD*以及IO/M*,但不使用高端地址线A16---A19;
(3)当HOLD有效并得到响应时,CPU哪些引脚置高阻?
当HOLD有效并得到响应时,CPU除HOLD、HOLDA引脚外其余所有的信号引脚均为高阻态。
2.3 略
2.4 说明8086 CPU READY 信号的功能。
见 P23
2.5 8086 CPU 的NMI和INTR引脚的不同有几点?
两点:
(1) INTR是可以由用户用指令禁止的,(通过中断允许标志IF的开---STI和关CLI进行);而NMI不能由用户禁止;
(2) INTR是可以区分优先级别的,NMI是最高级的,没有中断优先级的排队。
2.6 说明8086CPU内部标志寄存器各位的含义。 8086 CPU的标志寄存器(PSW或FLAG)共有9个
标志位,分别是:
CF (Carry Flag)--- 进位或借位标志; PF (Parity Flag)--- 奇偶标志;
AF (auxiliary Flag)----半进位标志; ZF (Zero Flag) -----结果为零标志; SF (Sign Flag) ----- 符号标志; OF (Overflow Flag)-----溢出标志;
IF (Interrupt Enable Flag)-----中断允许标志;
DF (Direction Flag) ---- 方向标志; TF (Trap Flag) ----- 陷阱标志。 2.7 说明8086CPU内部14个寄存器的作用。 8086内部的寄存器可以分为3类: 第一类:通用寄存器:
AX、BX、CX、DX、SI、DI、SP、BP,共8个可以存储数据或者地址的低16位;AX、BX、CX和DX可以分成8个8位的寄存器使用;SI、DI又称变址寄存器,用于存储变址地址;SP和BP存放指针变量值。 第二类:段寄存器:
CS、DS、SS、ES,共4个寄存器,只能存放对应段的段地址;
第三类为IP和FLAG,IP在通常情况下不允许用户访问,而FLAG是用以向用户提供了解ALU工作状态或者控制CPU工作方式的标志寄存器。 2.8 试画出8086CPU工作在最小模式时的总线形成示意图。
(注:BHE*引脚为34脚---即SS0,参见P25状态编码表)
四点说明:
A、MN/MX端接+5V,决定了8086工作在最小模式。
B、有一片8234A,作为 时钟发生器。
C、有三片8282或74LS373,用来作为 地址锁存器。 D、当系统中所连接的存储器和外设比较多时,需要增加系统数据总线的驱动能力, 这时,要用两片8286/8287(74LS244或74LS245)作为 总线收发器。
2.9 8086/8088为什么采用地址/数据引线复用技术?
答:考虑到芯片成本,8086/8088采用40条引线的封装结构。40条引线引出8086/8088的所有信号是不够用的,采用地址/数据线复用引线方法可以解决这一矛盾,从时序逻辑的角度,地址与数据信号不会同时出现,二者可以分时复用同一组引线。
2.10 怎样确定8086的最大或最小工作模式?最大、最小模式产生控制信号的方法有何不同?
答:引线MN/MX*的逻辑状态决定8086的工作模式,MN/MX*引线接高电平,8086被设定为最小模式;MN/MX*引线接低电平,8086被设定为最大模式。最小模式下所有的控制信号由CPU相关引线直接提供;最大模式下控制信号由8288专用芯片译码后提供,8288的输入由8086的S2─S0三条状态信号引线提供。
李伯成《微机原理》习题 第三章
本章作业参考书目:
1.周明德: 微型计算机IBM-PC系统原理与应用 清华大学出版社 1991 2.王永山等: 微型计算机原理与应用 西安电子科大出版社 1998 3.张怀莲: IBMPC汇编语言程序设计 电子工业出版社 1990
注:本习题解中的程序仅为代码片段,可在Emu8086 version 2.57环境下仿真运行,如果在MASM下进行汇编,需添加段设置以及相应的伪指令。
3.1
MOV AX,00H;
SUB AX,AX; MOV AX,[BX]; MOV AX,TABLE; MOV AL,ARAY1[SI]; MOV AX,[BX+6];
立即寻址 寄存器寻址 寄存器间接寻址 直接寻址
寄存器相对寻址 寄存器相对寻址
3.2 若1KB的数据存放在TABLE以下,试编写程序将该数据拌到NEXT之下。
程序片段如下:
ORG 100h
MOV CX,03FFH;数据个数 LEA SI,TABLE;源区首地址 LEA DI,NEXT; 目的区首地址 AGAIN: MOV AL,[SI]; MOV [DI],AL; 搬移
INC SI
INC DI; 移动地址指针 DEC CX; 循环计数器递减 JNZ AGAIN; 循环未结束转 HLT; 暂停
TABLE DB 1024 dup ('A'); 源数据区
NEXT DB 1024 dup (0); 目的数据区
3.3 编写10个字(16位二进制数)之和的程序
ORG 100h LEA SI,ADD1;
LEA DI,ADD2; LEA BX,SUM; MOV CL,CONT; MOV CH,0; 循环初始化 CLC; 进位清零 MADD1: MOV AX,[SI]; 读加数1
ADC ADD ADD MOV ADD LOOP HLT;
AX,[DI] SI,2; DI,2; [BX],AX; BX,2; MADD1;
移动源区地址指针
移动目的区地址指针 回存计算结果
移动―和‖存储区地址指针 循环控制 暂停
ADD1 ADD2 SUM CONT
DB 0FEH,86H,7CH,44h,56H,1FH,24H,01H,02H,33H;加数1 DB 56H,49H,4EH,0FH,9CH,22H,45H,11H,45H,21H; 加数2 DB 10 DUP (0); 和存储单元 DB 5 ; 循环次数
3.4 某16位二进制数,放在DATA连续的两个单元中,试编程求其平方根和余数,将其分别存放在ANS和REMAIN中。
ORG 100h MOV BL,2; 除数初值 AGAIN: MOV CX,NUM; 预计最大循环次数 MOV AL,BL; 0、1的平方根除外 MUL BL; 得到2的平方 CMP AX,CX; 大于原始数据么? JG EXIT; 若原始数据小于4转EXIT MOV AX,CX; 读数 DIV BL; 试除 INC BL; 除数递增 JMP AGAIN; 继续除 EXIT: DEC BL; 去除除数自加 MOV ANS,BL; 存商 MOV AL,BL; 恢复余数 MUL BL; SUB CX,AX; MOV REMAIN,CL; HLT
NUM DW 7; ANSDB ?;
REMAIN DB ?;
3.5 在DATA1之下顺序存放着以ASCII码表示的千位数,将其转换成二进制数。
MOV MOV
CL,4; 移位次数 CH,CL; 循环次数 SI,OFFSET ASCBIN AX,AX DX,DX AL,7FH AL,'0'
MOV CLD XOR XOR ASCB1: LODSB AND CMP
;不大于?0‘结束转换
JL ERR
CMP AL,'9' JG ASCB2 ;大于?9‘转ASCB2 SUB AL,30H ; 数字形式二进制数减30H
JMP ASCB3
ASCB2: CMP AL,'A' ;大于?9‘又小于?A‘结束转换
JL ERR
CMP AL,'F' JG ERR SUB AL,37H
;大于?F‘为不合理数,结束转换
;字符形式ASCII数减37H
ASCB3: OR DL,AL ROL DX,CL DEC CH JNZ ASCB1 ROL DX,CL MOV BIN,DX;存储转换结果 ERR: NOP HLT
ASCBIN DB '1','B,'4','3' BIN DW ?
3.7 编写程序将MOLT中的一个8位数乘以20,乘积放在ANS中(用3种方式)。
解:第一种方法:常规乘法运算
ORG 100h
MOV AL,MOLT MOV BL,20 MUL BL
MOV ANS,AX
HLT MOLT DB 2 ANSDW ?
第二种方法,将MOLT连加20次
第三种方法,将―20‖连加MOLT次
ORG 100h
MOV CX,MOLT MOV BX,20 XOR AX,AX CLC
ADD1:ADC AX,BX LOOP ADD1 MOV ANS,AX HLT MOLT DW 5 ANSDW ?
在DATA之下存放100个无符号的8位数,找出其最大者并将其存放在KVFF单ORG 100h MOV CX,20 MOV BX,MOLT XOR AX,AX CLC
ADD1:ADC AX,BX LOOP ADD1 MOV ANS,AX HLT MOLT DW 5 ANSDW ?
3.8 元。
ORG 100h
XOR DL,DL LEA DI,KVFF; NEXT0: LEA SI,BUFFER; MOV CL,99;
比较次数为N-1次
NEXT1: MOV AL,[SI]; INC SI; CMP DL,AL; JNC NEXT2; MOV DL,AL;
DL中始终存目前最大值
NEXT2: DEC CL;
JNZ NEXT1; MOV [DI],DL; 最大值存储
HLT
BUFFER DB ;自行定义100个数据
KVFF DB ?
3.9 若将数据按大小顺序排序,试编写程序..
解:此处采用 ―冒泡法‖予以处理:
ORG 100h LEA MOV
DI,BUFFER; 数据区 BL,99; 外循环次数
NEXT0:
NEXT3:
NEXT5:
MOV SI,DI; MOV CL,BL; 内循环次数 MOV AL,[SI]; 读数 INC SI; 移动指针 CMP AL,[SI]; 比较 JNC NEXT5; 大于转NEXT5 MOV DL,[SI]; MOV [SI-1],DL; MOV [SI],AL; 不大于互换 DEC CL; 内循环次数减一
JNZ DEC
NEXT3; BL; 外循环次数减一
JNZ NEXT0
HLT
BUFFER DB 自行定义100个字节型数据
3.10 在BVFF单元中有一个BCD数A,试根据下列关系编写程序,计算结果存在DES中.
A<20,Y=3*A; A<60,Y=A-20; A>=60,Y=80.
ORG 100h MOV AL,BVFF CMP AL,20 JL EX1 CMP AL,60 JL EX2 MOV AL,80 JMP STOP EX1: MOV BL,3 MUL BL JMP STOP EX2: SUB AL,20 STOP: MOV DES,AL HLT BVFF DB 8 DES DB ?
3.11址为DATAB开始的80个单元中,存放某班80个学生的某课程成绩,要求:
统计>=90分、80~89分、70~79分、60~69分、60分以下的人数,结果存放在BTRX开始的5个单元中
求平均成绩,结果存放在LEVEL中。
解:寄存器使用分配:90分以上在DH,80分以上在DL,70分以上在BH,60分以上在BL,60分以下在AH,总分、均分都在[DI]。
ORG 100h XOR AH,AH XOR DX,DX XOR BX,BX
;统计结果清零 ;统计结果清零
LEA SI,DATA LEA DI,LEVEL
MOV CL,CONT; 总人数送循环计数器 CX goon: MOV AL,[SI] ;读原始数据
ADC [DI], AL;累加总分 ADC [DI+1],0 ;计算进位
CMP AL,90
JL PP8 ; 不高于90分者转PP8 INC DH ; 90--100分的人数加一 JMP STOR
PP8:
PP7:
PP6:
CMP AL,80 JL PP7 ;不高于80分转PP7 INC DL ;80----89分的人数加一 JMP STOR CMP AL,70 JL PP6 ;不高于70分者转PP6 INC BH ;70---79分的人数加一 JMP STOR CMP AL,60 JL PP5 ;不高于60分者转PP5 INC BL ;60---69分的人数加一
JMP STOR
PP5: INC AH ;低于60分的人数加一 STOR: INC SI ;读下一个分数
LOOP GOON ;CX=CX-1,CX不为零转GOON,继续统计 LEA SI,BUFFER ;回存统计结果 MOV INC SI MOV INC SI MOV INC SI MOV INC SI MOV MOV
[SI],DH [SI],DL [SI],BH [SI],BL
[SI],AH
AX,WORD PTR [DI] ;计算平均成绩
MOV CL,CONT DIV CL
MOV LEVEL,AL ;回存平均成绩
HLT CONT DB 10
DATA DB 30,65,99,80,75, 89,100,45,60,70 BUFFER DB ?,?,?,?,? LEVEL DB ? ,? xxx 3.12 求两个有符号数(DATA1,DATA2)差的绝对值,结果存入DATA3.
ORG 100h
MOV AL,DATA1;读入被减数 SUB AL,DATA2;减去减数 JC CHANGE;
JMP STOR CHANGE: NEG AL STOR: MOV DATA3,AL HLT DATA1 DB 3 DATA2 DB 5 DATA3 DB ?
3.13 存从40000H到4BFFH的个单元均写入55H,并再逐个读出,验证是否一致,若一致,置AL为7EH,否则置AL为81H.
ORG 100h MOV AX,4000H; MOV DS,AX; MOV SI,0 START: MOV CX,0BFFFH BEGIN: MOV [SI],55H MOV AL,[SI] INC SI CMP AL,55H JNZ ERR LOOP BEGIN MOV AL,7EH JMP STOP ERR: MOV AL,81H STOP: HLT
3.14~3.15 端口03FBH的BIT5为状态标志,当该位为1时,表示外设忙,不能接收数据;当为0时,表示外设闲,可以接收数据;当CPU向端口03F8H写入一个字节的数据时,03FBH的BIT5置1,当它变为0状态时,又可以写入下一个数据。据此编写将起始地址为SEDAT的50个数据输出到03F8H端口的程序。
WAIT:
MOV DX,03FBH IN AL,DX
TEST AL,0010 0000B;(20H)
JZ SEND JMP WAIT SEND:MOV DX,3F8H MOV AL,[SI]; CMP AL,0AH;输出字串结束标志符
JZ STOP OUT DX,AL
WAIT
JMP
STOP:HLT
3.16 口02E0H的BIT2和BIT5同时为1,表示端口02E7H有一个字节型数据准备好可以
用以输入,当CPU从该端口读入数据后,02E0端口的BIT2和BIT5就不再同时为1;
只有当02E7H端口的数据再次准备好时,它们才会再次同时为1,据此编写从02E7H端口输入32个数据然后存入A1000H单元开始的区域。
MOV AX,0A000H MOV DS,AX MOV SI,1000H; 设置存储区地址 MOV CL,20H; 输入数据个数 BEGIN:MOV DX,0E20H IN AL,DX TEST AL,0010 0100B; 测试状态位 BIT5、BIT2 JZ BEGIN; 不同时为1继续测试 MOV DX,02E7H IN AL,DX; 输入数据 MOV [SI],AL; 存到指定区域 INC SI; 移动地址指针 LOOP BEGIN; 循环
HLT
3.17 在内存40000H开始的16K的单元中存放着一组数据,将其顺序搬移到起始地址为A0000H的区域。
解:利用字符串操作指令 MOVSB,16K即16*1024=3FFFH。
MOV MOV MOV MOV MOV MOV MOV
AX,4000H DS,AX AX,A000H ES,AX SI,0 DI,0 CX,3FFFH
CLD
REPMOVSB HLT
3.18 上题的基础上,将两个区域的数据逐个进行比较,若有错将BL置0,全对将BL置
FFH。
MOV MOV
AX,4000H DS,AX
MOV MOV MOV MOV MOV
AX,A000H ES,AX SI,0 DI,0
CX,03FFH
CLD AAB: CMPSB
JNZ STOP LOOP AAB MOV BL,0FFH
JMP EX1 STOP: MOV BL,0; EX1: NOP
HLT
3.19 统计由40000H单元开始的16K个单元中所存字符?A‘的个数,统计结果存放在DX寄存器中。 MOV AX,4000H MOV DS,AX MOV SI,0; MOV CX,3FFFH; 数据个数 MOV DX,0;统计结果寄存器清零 XOR DX,DX CLD AAB: LODSB CMP AL,?A‘; 比较 JZ AAC;字符为?A‘转计数 LOOP AAB; 循环 JMP STOP; 处理完毕转结束 AAC: INC DX; 统计结果加1 DEC CX; 循环次数减1 JCXNZ AAB; CX<>0继续 STOP: HLT
3.20 编写对AL中的数据进行―偶校验‖的一个过程,并将校验结果放入AL寄存器。
PJY
PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX
MOV AL,DAT AND AL,AL JNP PJY1
3.21
MOV
AL,00H; 表示为偶
JMP EXIT
PJY1: MOV AL,FFH; 表示为奇 EXIT: POP DX PJY
POP CX POP BX POP AX RET ENDP DAT DB ?
对80000H开始的256个单元的数据加上偶校验。
ORG 100h
MOV AX,8000H MOV DS,AX
MOV SI,0
MOV CX,100H CLD
LODSB;(MOV AL,[SI] ;INC SI) TEST AL,AL JNP PAR1
LOOP PAR0 JMP STOP OR AL,80H; MOV [SI-1],AL DEC CX JNZ PAR0 HLT
PAR0:
PAR1: STOP:
4-1 某以8088为CPU的微型计算机内存RAM区为00000H ~3FFFFH,若采用6264、62256、
2164或21256各需要多片芯片? 解答: 8088 内存单元为8 bit,所以,从00000H 到3FFFFH,共需要214 个byte,共214*8bit,也就是共占用16K byte空间。由于各种芯片的数据总线根数不同,所以在连接时要特别注意芯片的位数; 对于如下芯片:
6264 有8根数据线,13根地址线,故其容量为 213*8bit,即8Kbyte, 所以需要2片; 62256 有8根数据线,15根地址线,故其容量为 215*8bit,即32 Kbyte, 所以仅需要1片;尽管题目要求只需要16K的空间,但在使用62256时不得不使用1片。
2164 有8根数据线,12根地址线,故其容量为 212*8bit,即4Kbyte, 所以需要4片; 21256 有1根数据线,10根地址线(实际为20根,分两组),但由于仅有一根数据线,要构成八位的存储器至少需要8片,但总容量为8*256Bit,远远超过题目的要求。
4.2 利用全地址译码将6264接在8088的系统总线上,其所占的地址范围为BE000H~BFFFFH,试画出连接图。
解答:6264有13根地址线,连接时接到系统总线的低13位,即A0~A12, 其他7根地址线A19~A13的 地址译码输入应该为:1011 111 B,故而有如下的连接:
4.3
试利用6264 芯片,在8088系统总线上实现0000H~03FFFH的内存区域,试画出电路连接图。
解答:0000H~03FFFH的地址范围为214=16K, ,而6264芯片的容量为8*8K, 所以需要连接2片,其中,第一片的地址为00000H~01FFFH,第二片的地址为02000H~03FFFH,这里用74LS138的Y0、Y1 作为两个芯片的片选。
4.4
叙述EPROM的编程过程,说明EEPROM的编程过程。
EPROM编程通常采用两种模式:标准编程和快速编程:
标准编程是在VCC、VPP、CE、OE、地址信号、数据信号有效并稳定后加入50毫秒的PGM编程负脉冲,可以在写入一个数据后使OE变高而立即校验,也可以在所有数据写入后逐一校验。
标准编程有两大缺陷:一是时间过长,比如2764全片编程约需7分钟,时间过长;再是编程脉冲宽度稍大容易造成芯片因功耗过大而烧毁。
快速编程将PGM的宽度减小到100微妙左右,显然速度加快了500倍左右。 能否使用快速编程取决于芯片的型号。
EEPROM 由于可以在线擦除信息,所以可以单字节编程或自动按页编程。 在单字节写入时,CE为低,OE为高,在WE加入100纳秒的负脉冲,写入时间包括擦除原有内容和写入新内容的时间,一般为10毫秒以内,可以通过查询READY/BUSY的状态判定。
自动按页编程用高位线决定页地址,低位线决定页容量,然后一次写入一页内容,写完后查询READY/BUSY状态,此一过程耗时在300微秒左右,所以速度较快。
4.5已有两片6116,现欲将其接到8088系统中去,其地址范围为40000H~40FFFH,试画出电路连接图;写入某数据并读出与之比较,若有错,则在DL中写入01H,若全对,在DL中写入EEH,试编写此检测程序。 解答:电路连接如图示:
检测程序定义为一个过程,编程如下: CHKRAM
PROC FAR
SI; DL; CX; AX;
CX,10000H;
待检验的单元个数
PUSH PUSH PUSH PUSH
MOV MOV MOV MOV MOV MOV MOV
SI,4000H; 存储体段地址 DS,SI; SI,0000H; AL,0FFH; [SI],AL; AL,[SI];
存储体首地址
写入检验数据FFH 读出
CHK:
ADD JNZ
AL,01H RAMERR
写入另一格检验数据 读出
MOV AL,0; MOV MOV AND JNZ
[SI],AL; AL,[SI]; AL,AL RAMERR
MOV DL,0EEH; JMP MOV
RAMCHKOUT DL, 01H;
所有单元全对
RAMERR: 发现错误单元
RAMCHKOUT: POP
POP
AX; CX;
POP DL; POP SI;
RET ENDP CHKRAM
4.6 利用全地址译码将EPROM27128接到首地址为A0000H的内存区,试画出电路图。 解答:EPROM27128 的容量为8* 16K,所以有14根地址线, 那么如果将其接到首地址为A0000H 内存区,高6位地址线的排列应该为:1010 00B,所以有如下的连接:
4.7 内存地址从40000H到BBFFFH共有多少K?
解答:从40000H到BBFFFH的地址空间应该为 BBFFFH-40000H= 7BFFFH 每K为210,即3FFH,7BFFFH/3FFH=1F0H=496D
所以,该地址空间的范围应该为496KByte。
4.8 试判断8088系统中存储器译码器74LS138的输出Y0、Y4、Y6和Y7所决定的内
存地址范围,电路连接见附图。 解答:
根据示意图,A19、A18、A17、A16 的电平值为 1X00B,由于采用的是部分译码(A18未使用),所以每个地址译码输出对应的两个地址范围。
Y0对应 A15、A14、A13 均为0,所以其地址范围应该为: 当A18=0时,地址范围为:
1000 0000 0000 0000 ~ 1000 0001 1111 1111 1111 B 即80000H~ 81FFFH 当 A18=1时,地址范围为:
1100 0000 0000 0000 ~ 1100 0001 1111 1111 1111B 即C0000H~ C1FFFFH
Y4 对应的 A15、A14、A13 为 100,所以其地址范围应该为:
当A18=0 时,地址范围为:
1000 1000 0000 0000 0000B~ 1000 1001 1111 1111 1111B 即88000H~ 89FFFH 当A18=1时,地址范围为:
1100 1000 0000 0000 0000 ~1100 1001 1111 1111 1111B 即C8000H~C9FFFH
Y6 对应的A15、A14、A13 为110,所以其地址范围为: 当A18=0时,地址范围为:
1000 1100 0000 0000 0000B~ 1000 1101 1111 1111 1111B 即 8C000H~ 8DFFFH 当A18=1 时,地址范围为:
1100 1100 0000 0000 0000 B~ 1100 1101 1111 1111 1111B 即CC000H~CDFFFH
Y7 对应的A15、A14、A14为111,所以其地址范围为:
当 A18=0时,地址范围为:
1000 1110 0000 0000 0000B~ 1000 1111 1111 1111 1111B 即 8E000H~ 8FFFFH 当 A18=1 时,地址范围为:
1100 1110 0000 0000 0000B~ 1100 1111 1111 1111 1111 B 即
CE000H~CFFFFH。
李伯成《微机原理》习题 第五章
本章作业参考书目:
1. 王永山等: 微型计算机原理与应用 西安电子科大出版社 1998 3. 洪志全等 编 《现代计算机接口技术》 电子工业出版社 2002年4月
5-1 满足那些条件8086CPU才能响应中断源的中断请求?
参考答案:
8088/8086的中断承认需要满足4个条件:
(1) 一条指令执行之后---因为8088/8086CPU只在指令周期的最后一个时钟周期检测INTR信号;
(2) 中断允许标志IF=1;
(3) 没有发生 NMI、HOLD和RESET;
(4) 指令STI、IREI指令执行之后须再执行一条其他指令,但一些指令组合(如REP)要视为一个指令总体。
5-2 说明8088/8086 软件中断指令INT n的执行过程。
由指令INT n引起的中断也称为“异常”,即软件中断或内部中断。这里,INT 为指令操作码,n 是中断类型号(中断向量码);当该指令执行时,CPU 根据中断向量码的数值在中断向量表(IDT---Interrupt Direction Table)找到相应的中断服务程序入口地址,在对CS 、IP和FLAG进行入栈保护之后,进而转向指定程序的运行。
5-3 用三态门 74LS244 作为输入接口,接口地址规定为04E5H,试画出其与8088的总线
连接图。
解:根据题意,当地址线上的电平为 0000 0100 1110 0101 且IOR信号为低(IOR低电平有效)时,74LS244的门控信号E1、E2应该为低,据此画出下列电路:
5-4 利用具有三态输出的锁存器74LS374 作为输出接口,就接口地址为0E504H,试画出连
接图。若5-3题中的输入接口的BIT3、BIT4、BIT7同时为1时,将DATA为首地址的10个内存数据连续由输出接口输出。若不满足则等待,试编写程序。
解:根据题意,当地址线上的电平为 1110 0101 0000 0100 且IOW信号为低(IOW低电平有效)时,74LS374的时钟端CP 应该为低,而 74LS374的OE始终为低,据此画出下列电路:
根据题5-3和题5-4 电路,如果题5-3电路中的BIT3、BIT4 和BIT7 同时为1,则将以DATA为首地址的10个数据连续由0E504H输出口输出,不满足条件等待,对应的程序段如下: OUTWAIT : MOV DX,04E5H IN AL,DX TEST AL,98H; 10011000B JZ OUTWAIT; MOV SI,OFFSET DATA MOV CL,0AH; 数据个数
MOV DX,0E504H
OUTPUT: MOV AL,SI INC SI OUT DX,AL LOOP OUTPUT
5-5若要求8259 的地址为E010H和E011H,试画出与8080总线的连接图。若系统中只有一片8259,允许8个中断源边沿触发,不要缓冲,一般全嵌套方式,中断向量定为40H,试编写初始化程序。
解:电路连接见图示,根据8259的ICW格式,有如下数据:
ICW1 0 00 1 0 0 1 1 = 13H 特征位 无意义 特征位 边沿触发 无意义 单片 有ICW4
ICW2 0 1 0 0 0 0 0 = 40H 无ICW3 (单片,无级连控制)
ICW4 000 0 00 1 1 = 03H 无意义 一般嵌套 非缓冲模式 自动EOI 8086模式
据上述有下列初始化语句: MOV DX,0E010H;方式控制寄存器端口1地址 MOV AL,13H OUT DX,AL MOV DX,0E011H;方式控制寄存器端口2地址 MOV AL,40H OUT DX,AL MOV AL,03H OUT DX,AL;
5-5 DMAC(8237)占几个接口地址?这些地址在读写时的作用是什么?叙述DMAC由内存向接口传送一个数据块的过程。若希望利用8237 把内存中的一个数据块传送到内存的另一个区域,应当如何处理?当考虑到8237工作在8088系统,数据是由内存的某一段向另外的一段传送且数据块的长度大于64KB,应当如何考虑?
答: 8237的A0~ A3在其空闲周期作为内部寄存器的选址线,故而8237 共
占用16个端口地址;
当利用8237由内存向接口传送一个数据块时,8237送出内存地址及MEMR控制信号,将选中的存储单元的内容读出并放置到数据总线,同时,DMAC送出IOW 控制信号,将数据写到预选的规定接口中,此后,DMAC自动修改内部寄存器得值,以适应下一个数据的传送;
当利用8237把内存中的一个数据块传送到内存的另一个区域时,选择通道0和通道1 实现传送。这时由通道0送出源区地址和MEMR控制信号,将选中的数据送入8237内部暂存器,同时修改源区地址指针;此后,由通道1 送出目的区地址和MEMW信号,将内部暂存器的数据写到目的区,同时通道1修改地址和字节计数,当通道1的字节计数器为零时或者外部输入了EOP信号,传送结束。
数据是由内存的某一段向另外的一段传送且数据块的长度大于64KB时, 可以利用页面寄存器技术来完成,即改变写入页面寄存器74LS670的内容,以达到传送64KB以上的内容。
5-7说明微机中常用的外设编址方式及其优缺点。
答:在微机系统中主要采用两种外设的编址,即外设与内存统一编址和外设和内存独立编址;
统一编址又称存储器映射编址,即把内存的部分地址分配给外设,这样,外设就占用了部分内存地址,这样做的好处是不需要I/O 指令,但也就不易分辨存储器操作指令还是I/O指令,同时,内存范围相应的减小了。
独立编址时,内存空间和外设地址空间是相对独立的。这样,地址范围相应扩大,但需要IO/M信号和对应的输入、输出指令。
5-8 说明8088中采用中断方式工作时必须由设计人员完成的3项工作。 答:在采用中断方式工作时,程序设计人员通常要做的3项工作如下:
(1)、编写中断服务程序,即ISP;在编写ISP时,要注意现场保护、中断嵌套以及中断标志的处理;
(2)、确定中断向量,此时要注意,如果系统采用了8259,那么在中断向量表内至少要有32个连续的字节;
(3)、填写中断向量表,即把ISP的段地址和偏移地址填入向量表中相应的字节, 这是,可以用机器指令方式,也可以统过DOS 调用来完成,具体方法如下:
机器指令方式: MOV AX,0 MOV DS,AX; 中断向量表段地址设置 MOV SI,(向量码* 4); 向量表中的地址 MOV DX,OFFSET ISP; 中断服务程序偏移地址 MOV [SI],DX MOV DX,SEG ISP; 中断服务程序的段地址 MOV [SI+2],DX
DOS调用方式: MOV AH,25H; DOS调用功能号 MOV AL,向量码; MOV DX,SEG ISP MOV DS,DX
MOV DX, OFFSET ISP INT 21H