资源描述
第一章 习 题
ü 1.2 请简述机器数和真值的概念。
ü 1.3 将下列十进制数分别转化为二进制数、八进制数、十六进制数和压缩BCD数。
ü (1)125.74 (=7D.BCH) (2)513.85 (3)742.24 (4)69.357
ü 1.4 将下列二进制数分别转化为十进制数、八进制数和十六进制数。
ü (1)101011.101B (=43.625) (2)110110.1101B
ü (3)1001.11001B (4)100111.0101B
ü 1.5 将下列十六进制数分别转化为二进制数、八进制数、十进制数和压缩BCD数。
ü (1)5A.26H (2)143.B5H
ü (3)6CB.24H (4)E2F3.2CH
ü 1.6 8位和16位二进制数的原码、补码和反码可表示的数的范围分别是多少?
ü 1.7 写出下列十进制数的原码、反码、补码表示(采用八位二进制,最高位为符号位)。
ü (1)120 (78H) (2)62 (3)-26 (E6H补码) (4)-127
ü 1.8 已知补码求出其真值。
ü (1)46H(=70) (2)9EH (=-98) (3)B6H ( =-74) (4)6C20H
本章作业点评
注意正数的原码、反吗和补码相同,而负数不同。
作业解答请看书第2章 微处理器习 题
ü 2.1 8086/8088 CPU由哪两部分组成?它们的主要功能各是什么?
ü 2.2 8086/8088 CPU为什么要采用地址/数据线分时复用?有何好处?
ü 2.3 8086/8088 CPU中的标志寄存器分为哪两类标志?二者有何区别?
ü 2.4 设段寄存器CS=2400H,指令寄存器IP=6F30H,此时指令的物理地址PA是多少?指向这一物理地址的CS值和IP值是否是唯一的?
答:PA=2AF30H,不唯一。
ü 2.5 什么叫总线周期?8086/8088系统中的总线周期由几个时钟周期组成?如果CPU的主时钟频率为25MHz,一个时钟周期是多少?一个基本总线周期是多少时间?
答:4个T周期,1个T周期为1/25MHZ=4*10-8S
ü 2.10 什么是指令周期?什么是时钟周期?什么是总线周期?三者有何关系?
2.15 什么是总线?简述微机总线的分类。
ü 2.16 简述PCI总线的特点。
ü 2.17 简述USB总线的特点。
本章作业点评
作业解答请看书习 题
3.1 请解释名词:操作码、操作数、立即数、寄存器操作数、存储器操作数。
3.2 什么叫寻址方式?8086指令系统有哪几种寻址方式?
3.3 指出下列指令中源操作数的寻址方式
点评:根据指令格式,仅给出源操作数的寻址方式
(1) MOV SI,200
(2) MOV AL,[2000H]
(3) MOV CX,DATA[SI]
(4) ADD AX,[BX+DI]
(5) AND AX,BX
(6) MOV [SI],AX
(7) MOV AX,DATA[BP+SI]
(8) PUSHF
(9) MOV AX,ES:[BX]
(10) JMP FAR PTR PROCS_1(答:直接寻址)
3.4 设DS=1000H,ES=2000H,BX=2865H,SI=0120H,偏移量D=47A8H,试问下列各指令中源操作数所在位置,若有物理地址请计算出其物理地址值。
点评:题目要求给出物理地址,仅(3)(4)(5)(7)(8)(10)计算物理地址
(1)MOV AL,D (代码段中)
(2)MOV AX,BX (cpu寄存器中)
(3)MOV AL,[BX+D]内存数据段
(4)MOV AL,[BX+SI+D] 内存数据段
(5)MOV BX,[BX+SI+2]内存数据段
(6)MOV [BX+5],AX(cpu寄存器中)
(7)INC BYTE PTR[SI+3]内存数据段
(8)MOV DL,ES:[BX+SI]内存附加数据段
(9)MOV AX,2010H (代码段中)
(10)MOV AX,DS:[2010H]内存数据段
3.5 现有DS=2000H,BX=0100H,SI=0002H,20100H=12H,20101H=34H,20102H=56H,20103H=78H,21200H=2AH,21201H=4CH,21202H=B7H,21203H=65H,试说明下列指令执行后,AX寄存器中的内容。
(1) MOV AX,1200H (AX=1200H)
(2) MOV AX,BX (AX=0100H)
(3) MOV AX,[1200H] (AX=4C2AH)
(4) MOV AX,[BX] (AX=3412H)
(5) MOV AX,1100H[BX] (AX=4C2AH)
(6) MOV AX,[BX+SI] (AX=7856H)
(7) MOV AX,[1100H+BX+SI] (AX=65B7H)
3.9 假设下列程序执行前SS=8000H,SP=2000H,AX=7A6CH,DX=3158H。执行下列程序段,画出每条指令执行后,寄存器AX,BX,CX,DX的内容和堆栈存储的内容的变化情况,执行完毕后,SP=?
PUSH AX (答: AX不变)
PUSH DX (答: DX不变)
POP BX (答: BX=DX)
POP CX (答: CX=AX)
3.10 编程序段分别完成如下功能:
(1) AX寄存器低4位清零。(答:AND AX,FFF0H)
(2) BX寄存器低4位置“1”。 (答:OR BX,000FH)
(3) CX寄存器低4位变反。 (答:XOR CX,000FH)
(4) 测试DL寄存器位3,位6是否同时为0,若是,将0送DL;否则1送DH。
(答:TEST DL,48H
JZ NEXT
MOV DH,01H
JMP DONE
NEXT:MOV DL,00H)
3.11 写出三种不同类型的指令将寄存器BX清零。
答:
MOV BX,0
XOR BX,BX
SUB BX,BX
3.12 已知从DS:2200H,ES:3200H单元起分别存放20个ASCII的字符。找出这两个字符串中第一个不同字符的位置(段内偏地址),并放入DS:22A0H开始的连续两个单元中。请设计完成此任务的程序段。
(1)使用通常用的比较指令(CMP)实现;
(2)使用数据串比较指令(CMPSB)实现。
答(1)
MOV SI,2200H ;
MOV DI,3200H ;
MOV CX,20 ;
NEXT: MOV AL,[SI]
CMP AL,ES:[DI] ;
JNZ STOP
INC SI
INC DI ;
DEC CX ;
JNZ NEXT
JMP DONE ;
STOP: MOV [22A0H],SI ;
DONE: HLT
答(2)
MOV SI,2200H ;
MOV DI,3200H ;
MOV CX,20 ;
NEXT: REPZ CMPSB ;
JCXZ DONE ;如果CX=0,表示所有的字符都相同
DEC SI
STOP: MOV [22A0H],SI ;
DONE: HLT
3.13 读下面程序段,请问:在什么情况下,本段程序的执行结果是AH=0?
BEGIN: IN AL,5FH
TEST AL,80H
JZ BRCH1
MOV AH,0
JMP STOP
BRCH1: MOV AH,0FFH
STOP: HLT
答 端口 地址5FH的内容为负数时,AH=0
3.16 阅读下列程序:
NEXT: MOV AL,[SI]
MOV ES:[DI],AL
INC SI
INC DI
LOOP NEXT
写出用串指令完成上述功能的程序段。
答:
REP MOVSB
3.18 假设寄存器AX=1234H,DX=0A000H,阅读下列程序段:
MOV BX,0
MOV CX,BX
SUB CX,AX
SBB BX,DX
MOV AX,CX
MOV DX,BX
上述程序执行后AX=?,DX=?,程序功能是什么?
答:AX = EDCCH
DX =5FFFH
功能:0 - A0001234H
3.19 比较AX,BX,CX中带符号数的大小,将最大的数放在AX中,请编程。
CMP AX,BX
JG NEXT
MOV AX,BX
NEXT: CMP AX,CX
JG NEXT
MOV AX,CX
3.21 编写程序段,在数据区0000H:2000H开始100字节范围内,查找字符'A',若找到,则将偏移地址送入DX,没有找到,则结束。
答:
DATA SEGMENT
ORG 2000H
STRING DB ‘1222677ASS…..’共100个字符
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, ES:DATA
MOV AX,DATA
MOV ES,AX
CLD ;置DF=0,地址增量方向
MOV DI,OFFSET STRING ;
MOV CX,100 ;
MOV AL,‘A’ ;
NEXT:SCASB ;
JZ STOP ;ZF=1,找到“A”相同的字符,转STOP
DEX CX ;没找到(ZF=0),长度减1
JNZ NEXT ;
JMP DONE ;
STOP:DEC DI ;字符A所在偏移地址→BX
MOV DX,DI
DONE: HLT
CODE ENDS
END START
3.28 已知数据段DATA从存储器实际地址02000H开始,作如下定义:
DATA SEGMENT
VAR1 DB 2 DUP(0,1,?)
VAR2 DW 50 DUP(?)
VAR3 DB 10 DUP(0,1,2 DUP(4),5)
DATA ENDS
求出3个变量的SEG、OFFSET、TYPE、LENGTH和SIZE。
答:
SEG OFFSET TYPE LENGTH SIZE。
VAR1 DATA 0000H 1 2 2
VAR2 DATA 0006H 2 50 100
VAR3 DATA 0037H 1 10 10
3.29 已知数据区定义了下列语句,采用图示说明变量在内存单元的分配情况以及数据的预置情况。
DATA SEGMENT
A1 DB 20H,52H,2 DUP(0,?)
A2 DB 2 DUP(2,3 DUP(1,2),0,8)
A3 DB ’GOOD!’
A4 DW 1020H,3050H
DATA ENDS
答:相当于:
A1 DB 20H,52H, 0,?,0,?
A2 DB (2,1,2,1,2,1,2,0,8),(2,1,2,1,2,1,2,0,8)
A3 DB ’GOOD!’,字符在内存用ASCII码表示
A4 DB 20H,10H,50H,30H
3.30 采用示意图来说明下列变量在内存单元的分配以及数据的预置。
DATA SEGMENT
ORG 4
VAR1 DW 9
VAR2 DW 2 DUP(0)
CONT EQU 2
VAR3 DB CONT DUP(?,8)
VAR4 DB 2 DUP(?,CONT DUP(0),′AB′)
DATA ENDS
答:与题3.29类似
3.32 执行下列指令后,AX寄存器中的内容是什么?
TABLE DW 10,20,30,40,50
ENTRY DW 3
.
MOV BX,OFFSET TABLE
ADD BX,ENTRY
MOV AX,[BX]
答: AX=1E00H
3.34 在数据区中,以TABLE开始连续存放0~6的立方值(称为立方表),设任给一数x(0≤x≤6),x在TAB1单元,查表求x的立方值,并把结果存入TAB2单元。
DSEG SEGMENT
TABLE DB 0,1,8,27,64,125,….. ;定义立方表
TAB1 DB 4 ;定义要查表的数X
TAB2 DB ? ;定义结果存放单元
DSEG ENDS
COSEG SEGMENT
ASSUME CS:COSEG,DS:DSEG,SS:SSEG
BEGIN: MOV AX,DSEG
MOV DS,AX
MOV BX,OFFSET TAB1 ;置数据指针
MOV AH,0
MOV AL,DATA ;取待查数
ADD BX,AX ;求得查表地址
MOV AL,[BX] ;查表
MOV TAB2,AL ;平方数送RUSULT单元
MOV AH,4CH
INT 21H
COSEG ENDS
END BEGIN
3.36 编写程序,计算下面函数的值。
DATA SEGMENT
X DB -10
S DW ?
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA, CS:CODE
START: MOV AX,DATA ;给相关段寄存器赋值
MOV DS,AX
MOV AL,X
CMP AL,0
JL A1
CMP X,10
JG A2
MOV BL,3
IMUL BL
MOV S, AX
JMP EXIT
A1:MOV BL,2
IMUL BL
MOV S, AX
JMP EXIT
A2: MOV BL,4
IMUL BL
MOV S, AX
EXIT: MOV AH,4CH ;返回DOS
INT 21H
CODE ENDS
END START
3.39 现有两个多字节压缩BCD码数9876543219H和1234567891H,它们分别按低位字节在前高位字节在后存放在变量A1和 A2中,求它们的和与差,并将结果放在变量SUM和DEF中。
DATA SEGMENT
A1 DB 19H,32H,54H,76H ,98H
A2 DB 91H,78H,56H,34H ,12H
SUM DB 6 DUP(?)
DEF DB 5 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
MAIN PROC FAR
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET A1
MOV DI,OFFSET A2
MOV BX,OFFSET SUM
MOV CX,05
CLC
ADDF: MOV AL,[SI]
ADC AL,[DI]
MOV [BX],AL
INC SI
INC DI
INC BX
DEC CX
JNZ ADDF
MOV AL,0
ADC AL,AL
MOV [BX],AL (该三条指令用来处理最高位的进位)
MOV SI,OFFSET A1
MOV DI,OFFSET A2
MOV BX,OFFSET DEF
MOV CX,05
CLC
SUBF: MOV AL,[SI]
SBB AL,[DI]
MOV [BX],AL
INC SI
INC DI
INC BX
DEC CX
JNZ SUBF
CODE ENDS
END START
3.40设变量K中存放了由100个有符号整数组成的数组,编写程序段找出其中最大的一个,放到AX中.(注意:编程时只用于10个数)
DSEG SEGMENT
K DW 23,45,87,……,98
COUNT EQU $ - BUFFER
MAX DW ?
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
START:MOV AX,DSEG
MOV DS,AX
MOV CX,COUNT/2 ;除2是字节数
LEA BX,BUFFER
MOV AX,[BX]
INC BX
INC BX
DEC CX
AGAIN: CMP AX,[BX]
JGE NEXT
MOV AX,[BX]
NEXT: INC BX
INC BX
LOOP AGAIN
MOV MAX,AX
CSEG ENDS
END START
3.43 在数据段中有一个字节数组,编程统计其中正数的个数,放入A单元,负数的个数,放入B单元。
DSEG SEGMENT
DAT DB 23,45,87,……,98
COUNT EQU $ - BUFFER
A DB ?
B DB ?
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
START:MOV AX,DSEG
MOV DS,AX
MOV DX , 0
MOV CX,COUNT
LEA BX,DAT
AGAIN: MOV AL,[BX]
CMP AL , 0
JGE PLUS
INC DL ; 统计负数个数
JMP XEXT
PLUS : INC DH
NEXT: INC BX
LOOP AGAIN
MOV A,DH
MOV B,DL
CSEG ENDS
END START
习 题
1.分析半导体随机存储器和只读存储器的特点和分类。静态存储器和动态存储器的最大区别是什么?它们各有什么优缺点?
3.存储器的寻址范围是怎样确定的?举例说明它的确定方法。
5 用下列芯片构成存储系统,各需要多少个RAM芯片?需要多少位地址作为片外地址译码?设系统为20位地址线,采用全译码方式。
(1)512×4位RAM构成16KB的存储系统;
(答:64片,11根,芯片上有9根地址线,片外有11根,全部参加译码)
(2)1024×1位RAM构成128KB的存储系统;
(答:128*8片,10根)
(3)2K×4位RAM构成64KB的存储系统;
(答:64片,9根)
(4)64K×1位RAM构成256KB的存储系统;
7.有一个6264SRAM芯片的译码电路,如下图所示,请计算该芯片的地址范围及存储容量。
习题7 图
答:容量为8KB
本题 图中 A14和A17没有使用,为部分地址译码法,共有4组重叠地址;
假设A14=0和A17=0 ,地址范围为DA000H~DB000H
9. 使用4K×8位的EPROM2732和2K×8位的静态RAM6116以及LS138译码器,构成一个8KB.的ROM、地址范围为:FE000H~FFFFFH;4KB的RAM存储器系统,地址范围为:00000H~0FFFH。系统CPU8088工作于最小模式。画出系统连接图。
提示:本题中两个存储空间 相差较远,使用两个138译码器分别完成译码
EPROM2732 两片
第1片,地址空间从FE000H~FEFFFH
第2片,地址空间从FF000H~FFFFFH
RAM6116 2片
第1片,地址空间从00000H~007FFH
第2片,地址空间从00800H~00FFFH
10.试为某8位微机系统设计一个具有16KB ROM和40KB RAM的存储器。
(1)选用EPROM芯片2764组成只读存储器(ROM),从0000H地址开始;
(2)选用SRAM芯片6264组成随机存取存储器(RAM),从4000H地址开始;
(3)分析出每个存储芯片的地址范围。
答:提示 题目中给出的8位CPU其地址总线总计 为16条
EPROM芯片2764 共两片 ;
第1片,地址空间从0000H~1FFFH
第2片,地址空间从2000H~3FFFH
SRAM芯片6264 共5片;
第1片,地址空间从4000H~5FFFH
第2片,地址空间从6000H~7FFFH
第3片,地址空间从8000H~9FFFH
第4片,地址空间从A000H~BFFFH
第5片,地址空间从C000H~DFFFH
第5章习题
5.3 计算机与外设之间的数据传送控制方式有哪些?它们各有什么特点?
5.5 CPU与外设采用查询方式传送数据的过程是怎样的?现有一输入设备,其数据端口的地址为FFE0H,并于端口FFE2H提供状态,当其D0位为1时表明输入数据备好。请编写采用查询方式进行数据传送的程序段,要求从该设备读取100个字节并输入到从2000H:2000H开始的内存中。
DSEG SEGMENT
ORG 2000H
DATA DB 100 DUP (?)
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
START:MOV AX,2000H
MOV AX , 2000H
MOV DS,AX
MOV BX,2000H
MOV CX,100;
NEXT:MOV DX , FFE2H
IN AL,DX
AND AL,01H
JZ NEXT
MOV DX , FFE0H
IN AL,DX
MOV [BX] ,AL;
INC BX
DEC CX;
JNZ NEXT
HLT
CSEG ENDS
END START
第6章 习题
6.1. 什么是中断?计算机采用中断有什么好处?简述中断的响应和处理过程。
6.6.简述中断向量、中断向量表、中断类型码之间的关系。在基于8086/8088的微机系统中,中断类型码和中断向量之间有什么关系?若某中断类型码是12H,则其中断向量存于何处?若软中断指令INT 30H,其中的中断类型号为多少,该中断的服务程序的入口地址在内存单元什么位置?
答;中断类型码是12H,12H*4=48H
则其中断向量存于内存 0000:0048H开始的4个单元中
若软中断指令INT 30H,其中的中断类型号为30H,30H*4=C0H该中断的服务程序的入口地址在内存单元 0000:00C0H开始的4个单元中
6.7 简述8259A的内部结构和主要功能。8259A的中断屏蔽寄存器IMR与8086中断允许标志IF有什么区别?
答 :8259A的中断屏蔽寄存器IMR,是对8259的中断请求IR输入端 进行屏蔽控制,8086中断允许标志IF是对CPU的中断请求输入端INTR允许或不允许进行控制。第7章 习 题
7.2 8253有几个独立的计数器?各有几种工作方式?各种工作方式的名称是什么?
7.8 设8253三个计数器的端口地址为40H、41H、42H,控制寄存器端口地址43H。输入时钟为2MHz,使计数器1周期性的发出脉冲,其脉冲周期为1ms,试编写初化程序段。
答 :计数初值 2MHZ* 1ms=2000
MOV AL , 01110111,方式3
MOV 43H,AL
MOV AL,00H
OUT 41H,AL
MOV AL,20H
OUT 41H,AL
7.9 设8253计数器的时钟输入频率为1.91MHz,为产生25KHz的方波输出信号,应向计数器装入的计数初值为多少?
1.91MHz/25KHz= 77
第8章 习 题
8.5 设8255端口A工作在双向方式,允许输入中断,禁止输出中断,B口工作在方式0输出,C口剩余数据线全部输入,请初始化编程。设8255端口地址为60H、62H、64H、66H。
START: MOV AL ,1 10 0 0 0 0 1 B ;
OUT 66H ,AL8086中断允许标志IF有什么区别?
8.6 8255A的A口与共阴级的LED显示器相连,若片选信号A10~A3 =11000100,问8255A的端口地址是多少?A口应工作在什么方式?画出8255A、LS138、8086CPU微机总线接口图,写出8255A的初始化程序。
图中为部分地址译码法,
当A1 A0 接到8255芯片地址线上,其他假设为0
A15 A14 A13 A12 A11 11000100 A2 A1 A0
00000 110001000 00
00000 110001000 01
00000 110001000 10
00000 110001000 11
上述确定的端口地址为 0620H, 0621H, 0622H, 0623H,
8.7 以一个5*5键开关矩阵为例,用8255A的A、B口对矩阵进行扫描,请:
(1)画出硬件连接图;
(2)根据你的设计,对8255A进行初始化编程;
(3)编一段程序实现一次完整的扫描。
本题分析:键盘识别方法:
第一种:行反转法
1)行线和列线分别接到并行端口;
2)行线输出,列线输入;
2)行线输出全0,然后读入列线值;
3)当列线中有0,表示某键被按下;记录该列值,并将列端口置为输出,输出刚读入的列值;行线端口设为输入,再读取值,则必有一位为0,记录行值。由此得到行列值,然后查表确定按下的键。
第二种:行扫描法
1、首先判断是否有键按下
• 1)所有行输出“0”,读列线,判断是否全“1’;
• 2)不是全 “1” ,可能有键按下;
• 3)延时20ms,再读列线判断是否全 “1”,不是全 “1”,有键按下,进行下一步
2、行扫描:逐行输出“0”,读取列线,当列线中出现“0”,表示该行列交叉键按下;
3、键分析:将键行列编码组合后,到键值行列编码表中查表,得到键值
如果遇到多个键同时闭合的情况,键值行列编码表中不会查到。
参考答案:
采用行反转法:将行和列分别接到8255的A口和B口
根据图编写一个键盘编码表
键
PA7
PA6
PA5
PA4
PA3
PA2
PA1
PA0
PB7
PB6
PB5
PB4
PB3
PB2
PB1
PB0
0
0
0
0
1
1
1
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
2
0
0
0
0
0
0
0
0
3
0
0
0
0
0
0
0
0
4
0
0
0
0
0
0
0
0
5
0
0
0
0
0
0
0
0
6
0
0
0
0
0
0
0
0
7
0
0
0
0
0
0
0
0
8
0
0
0
0
0
0
0
0
9
0
0
0
0
0
0
0
0
A
0
0
0
0
0
0
键0的编码值为1E1EH
键1的编码值为1E1DH
键2的编码值为1E1BH
键3的编码值为1E17H
按上述规则依次编写出键值编码
。设8255A端口A的地址为40H,端口B的地址为41H,端口C的地址为42H,控制寄存器地址为43H。
键盘编码表:
DATA SEGMENT
TABLE DW 1E1EH , 1E1DH , 1E1BH ,1E17H,............. ;各键值编码
DAT DB ‘0’, ‘1’, ‘2’, ‘3’, …. ;各键值
DATA ENDS
START: MOV AL,10000010B ;设方式0,端口A口输出,B口输入
OUT 43H,AL
MOV AL,0
OUT 40H,AL ;端口A(行线)为0
WAIT: IN AL,41H ;读入端口B(列线)的状态
AND AL,1FH ;保留低5位
CMP AL,1FH ;检查有键按下否(即是否存在有0的位)
JE WAIT ;相等,即全1表示无键按下,循环继续检测
MOV AH,AL ;否则,保存列值
MOV AL,10010000B ;设方式0,端口A输入,B输出
OUT 43H,AL ;即端口A \B反转输入输出方向
MOV AL,AH
OUT 41H,AL ;把列值反向输出到列线B端口上
IN AL,40H ;读入行线(端口A)状态
AND AL,1FH ;保留5位
MOV DL,AH ;组合行值和列值 DX
MOV DH,AL
LEA SI ,TABLE
LEA DI, DAT
MOV AX,-1
NEXT : CMP DX,[SI]
JZ OK
INC SI
INC SI
JMP NEXT
OK:ADD AX,1
ADD DI , AX
..............[DI]中的字符为按下的键
26
展开阅读全文