复 习
1.十进制数1990,其对应的十六进制数是 7C6H ,压缩BCD码数是 1990H 。 2.设机器码字长为6位,X=10111,写出下列各数原码[X]原=010111、补码[X]补=010111。 3. 某数据存储单元的物理地址为20101H,其对应的段寄存(DS)= 2000H ,有效地址为 0101H 。
4.设(SP)=0202H,(SS)=1000H,执行PUSH AX指令后,栈顶的物理地址为 10200H 。5.在8086/8088系统中,内存储器与I/O接口的地址编址方式是 独立 方式,因此CPU访问内存储器时用 MOV 指令,访问I/O端口时用 IN 指令和 OUT 指令。
1. 为什么把微机的基本结构说成是总线结构?
微型计算机从硬件结构看是由微处理器、存储器和I/O接口三大部分组成,而各部分又是通过总线联系在一起的。正是因为总线,才使各部分之间的相互依赖关系变为与总线间的单向依赖关系,即只要满足总线规范的存储器和I/O接口就可以应用于系统,从而使微型计算机的系统构造比较简单,且具有更大的灵活性和更好的可扩充性、可维护性,所以常把微型计算机的基本结构说成是总线结构。
2. 试述中断向量、中断向量号和中断向量地址三者之间的差别,以及它们之间的关系? 解:中断向量是中断服务程序的入口地址,中断向量号是中断类型的识别码,中断向量地址是存放中断向量的存储单元地址。
在向量式中断系统中,CPU通常通过中断向量号计算出中断向量地址,从而取出中断向量改变程序计数器PC的值,转入中断服务处理。
3. 试述保护模式下虚拟地址与8086的逻辑地址有何差别。 解:不同之处主要体现在以下三点:
(1)保护模式下段基址和偏移地址不再是16位,而是32位。
(2)段的基址不直接由16位的段寄存器提供,而是含在段的描述符中。每个描述符由8个字节组成,其中32位是这个段的基址,它们存放在两个描述符表GDT和LDT定义的存储区中。
(3)在保护模式下,16位的段寄存器称为段选择器,其内容为指向段描述符的选择符。依据选择符可以找到在描述符表中对应的段描述符,进而在段描述符中获得段的基址。
4. 试述CPU进行I/O操作时,要对I/O设备进行I/O同步控制的原因。
这是由CPU与外设之间本身不同步所决定的。一方面,CPU的速度比外设的速度要高出好几个数量级;另一方面,外设的定时是独立于CPU,即外设什么时候准备好数据或准备好接受数据的准备不是由CPU控制决定的。因此,为确保数据传输正确可靠,CPU进行I/O操作时就必须引入某种I/O同步控制策略,来保证只有外设准备好数据时才输入,同样,只有在外设做好接受数据的准备时才输出。
1.指出下列指令的源操作数的寻址方式是什么? (1) MOV EBX,2135H ;立即数寻址
(2)MOV BX,[SI][DX*5] ;基址加比例变址寻址 (3)MOV AX,[2200H] ;直接寻址 (4)MOV EAX,[ESI*3] ;比例变址寻址 (5)MOV ECX, EDX ;寄存器寻址
2.设下列指令语句中的标识符均为字变量,请指出每条指令是否合法,若非法,指出其错误之处。
(1)MOV AX,VAR2[SI][DI] ;错 在16位寻址中,地址寄存器同为变址寄存器 (1)MOV DS,2200H ;错,不能直接将立即数送给段寄存器
(3)IN AX,310H ;错,I/O端口大于255时,不能使用立即数的直接寻址 (4)MOV CS,AX ;错,不能用传送指令改变CS的值
(5) CMP WOR1, VAR1; 错,源和目的操作数同为存储器操作数
1.已知(DS)=091DH,(AX)=1234H,(BX)=0024H,(CX)=5678H, (SI)=0012H, (DI)=(0032H), [09226H]=00F6H,[09228H]=1E40H,[1E4F6H]=091DH,试求单独执行下列指令后的结果 (1) MOV CL,20H[BX][SI] ;(CL)= 006F (2) LEA BX,20H[BX][SI] ;(BX)=0056H
MOV AX,2[BX] ;(AX)=[09228H]=1E40H (3) LDS SI,[BX][DI] ;(SI)= [09226H]=00F6H; (DS)=[09228H]=1E40H MOV [SI],BX ;[SI]= [1E4F6H] =(BX)=0024H
2.编写程序段完成S=(a×b+c)/d的运算,其中变量a、b、c、d和S均为带符号的字数据,结果的商存入S,余数则不计。 解:MOV AX,a
IMUL b ;a×b在CX:BX中 MOV CX,DX MOV BX,AX
MOV AX,c
CWD ;c在DX:AX中
ADD AX,BX ;a×b+c在DX:AX中 ADC DX,CX
IDIV d ;(a×b+c)/d,商存入S MOV S, AX
试编写完成如下功能的完整程序:将64个字节的数组BLOCK中的正数选出来存入正数数组PLUS_DATA,并计算正数数据的个数存入内存变量PLUS_CNT中。
解:取出数组元素与零进行比较,根据比较结果选择不同分支进行正、负数挑选。 DATA SEGMENT
BLOCK DB 56,-98,-34,0,…,67 PLUS_DATA DB 100 DUP(?)
PLUS_CNT DB 0 DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START MOV AX,DATA MOV DS,AX LEA SI,BLOCK
LEA DI,PLUS_DATA MOV CX,64
AGAIN: MOV AL,[SI] CMP AL,0 JL NEXT
MOV [DI],AL INC DI
INC PLUS_CNT NEXT: INC SI LOOP AGAIN MOV AH,4CH INT 21H CODE ENDS
END START 六、存储器扩展(15分)
如图所示,某微机系统选用4K*4的SRAM芯片扩展了存储器,假定CPU有8根数据线,根地址线,试分析电路,回答下列问题: (1)系统存储容量为多少?
(2)每片存储器芯片的地址范围? (3)该电路是什么地址译码方式? (4)存储器有无地址重叠,为什么?
20
解:
由已知的存储器地址范围,可计算出该存储器的容量为: 存储器的容量 =4*4K = 16(KB)
下面,先根据给定的存储器空间地址范围,列出各芯片组的地址范围和地址分配,如表所示。 芯片组号 0# 1# 2# 3#
如图所示,为采用8255实现一组开关状态的监测电路,其中,8255的A口与一组开关相接,8255的B口与发光二极管相接。要求当系统通过8255的开关Ki(i=0,1,2,…,7)断开时,发光二极管LEDi不亮,当开关Ki闭合时,发光二极管LEDi亮。设8255的四个端口地址为:2C0H,2C1H,2C2H,2C3H,要求完成下列工作:
(1)按给定的8255的端口地址,在原题图上补画译码电路; (2)按题设功能要求,编写8255的初始化控制字;
(3)按题设要求设计8255的工作程序,实现开关状态的显示与控制程序。
地址位分配 A19 A18 A17 A16 A15 A14 A13 A12 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 1 1 0 0 0 0 1 1 0 1 0 0 0 0 1 1 1 A11 ~ A0 000H ~ FFFH 000H ~ FFFH 000H ~ FFFH 000H ~ FFFH 84000H~84FFFH 85000H~85FFFH 86000H~86FFFH 87000H~87FFFH 地址范围 该电路采用全译码的地址译码方式,无地址重叠
解:
(1)按给定的端口地址,可实现译码电路如图所示。
(2)A口为方式0输入,B口方式0输出。因此,8255的初始化控制字为10010000B (3)实现开关状态显示的控制程序如下: DATA SEGMENT
MESG DB “请按复位键”,ODH,OAH,’$’ DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MOV DS,AX MOV DX,2C3H
MOV AL, 10010000B;方式控制字 OUT DX,AL
AGAIN: MOV DX,2C0H;取A口地址
IN AL,DX MOV CL, 04 SHL AL,CL ) MOV DX ,2C1H OUT DX,AL JMP AGAIN
CODE ENDS
附:8255A控制字格式
END START
NOT AL START: MOV AX,DATA