资源描述
第一章
2、完成下列数制之间的转换。
(1)01011100B=92D (3)135D=10000111B (5)10110010B=262Q=B2H
3、组合型BCD码和非组合型BCD码有什么区别?写出十进制数254的组合型BCD数和非组合型数。
答:组合型BCD码用高四位和低四位分别对应十进制数的个位和十位,其表示范围是0~99;非组合型BCD码用一个字节的低四位表示十进制数,高四位则任意取值,表示范围为0~9。
组合型:254=(001001010100)BCD
非组合型:254=(00000010 00000101 00000100)BCD
7、计算机为什么采用补码形式存储数据?当计算机的字长n=16,补码的数据表示范围是多少?
答: 在补码运算过程中,符号位参加运算,简化了加减法规则,且能使减法运算转化为加法运算,可以简化机器的运算器电路。+32767~ -32768。
9、设计算机字长n=8,求下列各式的[X+Y]补和[X-Y]补 ,并验证计算结果是否正确。
(1)X=18,Y=89 [X+Y]补=00010010+01011001=01101011B=107D 正确
[X-Y]补=10111001B=00010010+10100111=(-71D)补 正确
(2)X=-23,Y=-11 [X+Y]补=11101001+11110101=11011110B=(-34D)补 正确
[X-Y]补=11101001+00001011=11110100B=(-12D)补 正确
(3)X=18,Y=-15 [X+Y]补=00010010+11110001=00000011B=(3D)补 正确
[X-Y]补=00010010+00001111=00100001B=(33D)补 正确
(4)X=-18,Y=120 [X+Y]补=11101110+01111000=01100110B=(102D)补 正确
[X-Y]补=11101110+10001000=01110110B=(123D)补 由于X-Y=-138 超出了机器数范围,因此出错了。
13、微型计算机的主要性能指标有哪些?
答:CPU字长、存储器容量、运算速度、CPU内核和IO工作电压、制造工艺、扩展能力、软件配置。
第二章
2、8086标志寄存器包含哪些标志位?试说明各标志位的作用。
答:进位标志:CF;奇偶校验:PF;辅助进位:AF;零标志:ZF;符号标志:SF;溢出标志:OF。
5、逻辑地址与物理地址有什么区别?如何将逻辑地址转换为物理地址?
答:物理地址是访问存储器的实际地址,一个存储单元对应唯一的一个物理地址。逻辑地址是对应逻辑段内的一种地址表示形式,它由段基址和段内偏移地址两部分组成,通常表示为段基址:偏移地址。
物理地址=段基址*10H+偏移地址。
6、写出下列逻辑地址的段基址、偏移地址和物理地址。
(1)2314H:0035H (2)1FD0H:000AH
答:(1)段基址:2314H;偏移地址:0035H;物理地址:23175H。
(2)段基址:1FD0H;偏移地址:000AH;物理地址:1FD0AH。
8、设(CS)=2025H,(IP)=0100H,则当前将要执行指令的物理地址是多少?
答:物理地址=(CS)*10H+(IP)=20350H
9、设一个16字的数据区,它的起始地址为70A0H:DDF6H(段基址:偏移地址),求这个数据区的首字单元和末字单元的物理地址。
答:首字:70A0*10H+DDF6H=7E7F6H
末字单元地址=起始地址+(字数-1)*2=7E7F6H+(16-1)*2=7E814H。
13、80486CPU内部由哪些主要部件构成?有哪几种工作模式?
答:(1)总线接口单元、指令预取单元、指令译码单元、控制单元,整数运算单元,浮点运算单元,段预存储器管理单元,高速缓冲单元。
(2)实地址模式、保护虚拟地址模拟、虚拟8086模式
14、80486CPU存储器最大可寻址空间是多少?虚拟存储空间是多少?两者有何区别?
答:最大可寻址空间是4GB,虚拟存储空间是64TB。前者为实地址,虚拟存储空间为外部存储管理器。
第三章
4、指出下列指令中的源操作数和目标操作数的寻址方式。
(1)MOV BX,1000H 源操作数:立即寻址 ;目标操作数:寄存器寻址
(2)MOV AL,[BX] 源操作数:寄存器间接寻址; 目标操作数:寄存器寻址
(5)MOV [DI+1000H],BX 源操作数:寄存器寻址;目标操作数:寄存器相对寻址
(6)MOV [1000H],CX 源操作数:寄存器寻址 ;目标操作数:直接寻址
5、设(DS)=2000H、(ES)=2100H、(SS)=1500H、(BX)=0100H、(BP)=0040、(SI)=00A0H、(DI)=0120H,在指令MOV AX,src中,求用下列表示源操作数src的有效地址EA和物理地址PA各是多少?
(1)100H[BX] EA=(100H+0100H)=0200H ; PA=2000*10H+0200H=20200H
(2)ES:[BX+DI] EA=0100H+0120H=0220H ;PA=2100*10H+0220H=21220H
(3)[BP] EA=0040H ; PA=1500*10H+0040H=15040h
(4)ES:[BX+10H] EA=0100H+0010H=0110H ;PA=21000H+0110H=21110H
6、指出下列指令中的错误,并改正。
(1)MOV BL,30A0H 操作数不匹配 改:MOV BX,30A0H
(2)MOV 0010H,AL 立即数不可以作为目标操作数 改:MOV AX,0010H
(3)XCHG AL,BX 操作数类型不匹配 改:XCHG AX,BX
(4)MOV [AX],3456H 立即数送入存储器需要说明 改:MOV WORDPTR [AX],3456H
(5)PUSH AL 堆栈以字为操作单元 改:PUSH AX
(6)POP CS POP不可以用CS为目标操作数 改:POP AX
(7)MOV DS,1000H 立即数不能直接送入段寄存器 改:MOV AX,1000H MOV DS,AX
(8)MOV [BX],[1000H] 存储器不可以相互传送 改:MOV AX,[1000H]
MOV [BX],AX
(9)LDS (BX),[1000H] LDS使用时期目标为16位通用寄存器 改:LDS BX,[1000H]
(10)LEA BX,CX LEA源操作数为存储器 改:LEA BX,[CX]
7、已知(AX)=4A0BH,[1020H]单元中的内容为260FH,写出下列每条指令单独执行后的结果。
(1)MOV AX,1020H ;(AX)=1020H
(2)XCHG AX, [1020H] ;(AX)=260FH
(3)MOV AX,[1020H] ;(AX)=260FH
(4)LEA AX,[1020H] ;(AX)=1020H
10、设一个堆栈段共有100H个字节单元,堆栈的起始地址为1250H:0000H,若在堆栈中存有5个字数据,问:
(1)栈顶的物理地址多少?
(2)栈底的物理地址是多少?
(3)当前SS和SP的内容是多少?
(4)若弹出两个数据,SP的内容是多少?
答: 栈底:12600H 栈顶:12600-A=125F6H
SS:[1250H:0000H ] SP: [1250H:00F6H ]
(4)弹出两个数据后,SP内容,00F6+4=00FAH
则,SP:[1250H:00FAH ]
11、编程完成下列程序段,根据运算结果置标志位OF、SF、ZF、AF、PF、CF,并分析程序执行结果是否正确?为什么?(n=8)
(2)122-64 (4)-68+(-72)
答:(2)程序:MOV AL,120
MOV BL,64
SUB AL,BL
计算结果:00111010 OF=0 SF=0 ZF=0 AF=0 PF=1 CF=0
(4)程序: MOV AL,-68
MOV BL,-72
ADD AL,BL
计算结果:01110100 有溢出 OF=1 SF=0 ZF=0 AF=1 PF=1 CF=1
17、判断下列指令格式的对与错,并解释错在哪里。
(1)ADD 25H,AX 错;目标操作数不可以为立即数
(2)INC BX,1 错;INC只有目标操作数
(3)MUL AL,BL 错;乘法指令目标操作数是隐含的
(4)SUBB AL,3 错;减法指令是SUB
(5)DAA AL 错;DAA后无操作数
(6)NEG CX,0 错;NEG后只有目标操作数
(7)CMP [BX],1000H[BX+SI] 对
22、写出下列程序段执行后的结果。
MOV CL,4
MOV AL,87
MOV DL,AL
AND AL,0FH
OR AL,30H
SHR DL,CL
OR DL,30H
(AL)= 37H ,(DL)=35H
27、试用CMP指令和条件转移指令实现下列判断
(1)AX和CX中的内容为无符号数:
若(AX)>(CX)则转至BIGGER符号执行;若(AX)<(CX)则转至LESS符号执行。
(2)BX和DX中的内容为无符号数:
若(BX)>(DX)则转至BIGGER符号执行;若(BX)<(DX)则转至LESS符号执行。
答:(1)CMP AX,CX
JA BIGGER
JB LESS
(2)CMP BX,DX
JG BIGGER
JL LESS
第四章
8、按下列的要求写出段定义格式。
(1)数据段的位置从0E000H开始,在该段中定义的5个字节数据,3个字数据,2双字数据,要求字节数据从偏移地址0000H开始,字数据从偏移地址0010H开始,双字数据从偏移地址0020H开始。
(2)堆栈段定义100个字节
(3)代码段的开始位置给有关段寄存器赋值,在程序结束时能够返回DOS。
答:DATA SEGMENT
ORG 0000H
D1 DB 00H,01H,02H,03H,04H
ORG 0010H
D2 DW 0000H,0010H,0020H
ORG 0020H
D3 DD 3 DUP()
DATA ENDS
STACK SEGMENT STACk
DB 100 DUP
STACK ENDS
CODE SEGMENT CODE
ASSUME CS:CODE,DS:DATA
START :……
CODE ENDS
ENDS START
10、 定义数据段,画出数据存储示意图,并说明该数据段共有多少个字节单元。
DATA SEGMENT
D1 DB 12,0,’A’,-6
D2 DW 1234H,65H
D3 DB 3 DUP(3,0,5)
DATA ENDS
共有17个存储单元如下图:
0CH
00H
41H
FAH
34H
12H
65H
00H
03H
00H
05H
03H
00H
05H
03H
00H
05H
12、定义数据段如下,画出数据存储示意图,并说明变量X1和X2所对应的逻辑地址各是多少?
DATA SEGMENT AT 10A0H
ORG 0010H
X1 DB 22,33,
ORG $ + 0020H
X2 DB ‘AB12CD’
.
.
.
16H
21H
…
41H
42H
31H
32H
43H
44H
DATA ENDS
10A00H
10A10H
10A32H
X1逻辑地址:10A0H:0010H X2的逻辑地址:10A0H:0032H
13、定义数据段如下,写出执行以下指令后的结果。
DATA SEGMENT
DA1 DW 2437H ,14A2H
DA2 DB ‘ABCD’
DA3 DD 10 DUP (?)
DATA ENDS
(1)MOV BX,DA1 ;(BX)=2437H
(2)MOV SI,OFFSET DA1 ;(SI)=0000H
(3)MOV AL, TYPE DA1 ;(AL)=2
(4)MOV AL,[DA2+02H] ;(AL)=‘C’=43H
(5)MOV AL,LENGTH DA3;(AL)=10
(6)MOV AL,SIZE DA3;(AL)=10
14、程序中数据段定义的数据如下:
DATA SEGMENT
NAMES DB‘GOOD MORNING!’
DW 2050H,78H,3080H
DATA ENDS
请指出下列指令序列执行后累加器中的结果是多少?
(1) MOV BX,OFFSET NAMES
MOV AL,[BX+03H]
(2) MOV BX,12
MOV SI,3
MOV AX,NAMES[BX+SI]
(3) MOV BX,12
MOV SI,3
LEA AX,NAMES[BX+SI]
答:(1)[BX+03H]对应的是 “D” 因此结果是 44H
(2)78H
(3)LEA 将源操作数的逻辑地址送到目标操作数,因此 0FH
18、编写程序,将MBUF为起始单元的5个数按相反次序传送到NBUF开始的存储单元中。
答:DATA SEGMENT
MBUF DB 1,2,3,4,5
COUNT EQU $-MBUF
NBUF DB 5 DUP(?)
DATA ENDS
STACK SEGMENT PARA STACK
DB 20H DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET MBUF
MOV CX,5
LOP1: PUSH [BX]
INC BX
DEC CX
JNZ LOP1
MOV BX,OFFSET NBUF
MOV CX,5
LOP2:POP [BX]
INC BX
DEC CX
JNZ LOP2
MOV AX,4CH
INT 21H
CODE ENDS
END START
20、编写程序,将内存中某数据块中的正数和负数分开,并分别将这些正数和负数送同一数据段的两个缓冲区中,并在屏幕上显示正数和负数的个数(数据自定)。
答:DATA SEGMENT
SHU DB 2,4,-9,-10,5,-2,-2,4,5,7;源数据块,共有十个数,六个正数,四个负数
COUNT EQU $-SHU
ZS DB 10 DUP(?);给正数预留10个字节的空间
ORG 0020H ;调整数据位置
FS DB 10 DUP(?)
XZ DB 'NUMBER OF XZ:','$' ;显示在屏幕上的字符串
XF DB 'NUMBER OF XF:','$'
DATA ENDS
STACK SEGMENT STACK
DW 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX ;数据段装入
MOV BX,OFFSET SHU
MOV DI,OFFSET ZS
MOV SI,OFFSET FS
MOV CX,COUNT
LOP1: MOV AL,[BX]
CMP AL,0
JG SZ ;大于0跳转到SZ中
MOV [SI],AL
INC SI ;负数送到缓冲区FS中
JMP C1
SZ: MOV [DI],AL ;正数送到缓冲区ZS中
INC DI
C1: INC BX
DEC CX
JZ SHUCHU ;ZF标志位为1,cx为0 ,跳到SHUCHU执行
JMP LOP1 ;cx不为0,循环
SHUCHU: MOV DX,OFFSET XZ
MOV AH,09H
INT 21H ;输出字符串
SUB DI,OFFSET ZS ;正数的个数
ADD DI,30H
MOV DX,DI
MOV AH,02H
INT 21H ;转为ASCII码输出
MOV DX,OFFSET XF
MOV AH,09H
INT 21H
SUB SI,OFFSET FS ;负数的个数
ADD SI,30H
MOV DX,SI
MOV AH,02H
INT 21H ;转为ASCII码输出
MOV AH,4CH
INT 21H ;返回DOS
CODE ENDS
END START
21、编写程序,从内存BLOCK开始,存放着10个字节的有符号数,从这些数种找出绝对值最大的数,存在MAX中。
答:
DATA SEGMENT
BLOCK DB 2,8,9,18,-14,-12,5,12;源数据 共有8个数,绝对值最大数为18
COUNT EQU $-BLOCK ;数据长度
ORG 0020H
MAX DB ? ;最大数据
DATA ENDS
STACK SEGMENT STACK
DB 100 DUP (?)
STACK ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA,SS:STACK
START:
MOV AX, DATA
MOV DS, AX ;装入数据段基址
MOV AL, 0H ;初始AX
LEA BX, BLOCK
MOV CX, COUNT
LOP1:
MOV DL, [BX]
CALL CP ;调用比较子程序
INC BX ;递推
DEC CX
JNZ LOP1 ;循环
LEA BX, MAX ;取最大值存储区地址
MOV [BX], AL ;移入最大值
MOV AH, 4CH
INT 21H ;返回DOS
CP PROC ;比较AL和DL,将较大的数存入AL.入口参数: AL, DL出口参数: AL
CMP DL, 0
JG POSITIVE ;DL为正数
NEG DL ;求相反数
POSITIVE:
CMP AL, DL ;比较AL和[BX]中的大小
JG EXIT ;AL大于DL则跳转
MOV AL, DL ;将DL移入AL
EXIT:
RET ;退出
CP ENDP
CODE ENDS
END START
26、
DATA SEGMENT
D1 DB 3,4,2,7,8,12,10
COUNT EQU $-D1
D2 DB 10 DUP(?)
DATA ENDS
STACK1 SEGMENT STACK
DB 100 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AX,DATA
MOV DS,AX ;数据段装入
MOV CX,COUNT
DEC CX ;外层循环CX-1次
LOP1: MOV SI,CX
LEA BX,D1
LOP2: MOV AL,[BX]
CMP AL,[BX+1] ;比较D1的第一个数与第二个数的大小
JAE LOP3
XCHG AL,[BX+1] ;交换两个数
MOV [BX],AL
LOP3: INC BX
DEC CX
JNZ LOP2
MOV CX,SI
DEC CX
JNZ LOP1
LIST: MOV AH,4CH
INT 21H ;返回DOS
CODE ENDS
END START
第五章
5-7 若用1024*1b的RAM芯片组成16K*8b的存储器,,需要多少芯片?在地址线中有多少位参与片内寻址?多少位用做芯片组选择信号?
解:
先进行位扩展,一组芯片需要8片
再进行字扩展,需要16组芯片.
所以共需要16*8=128片
1024=1K,需要10位参与片内寻址
16=24,需要4位做选择信号.
5-8 试用4K*8b的EPROM2732和8K*8b的SRAM6264,以及74LS138译码器,构成一个8KB的ROM,32KB的RAM存储系统,要求设计存储器扩展电路,并指出每片存储芯片的地址范围.
解:
5-9 用EPROM2764(8K*8b)和SRAM6264(8k*8b)各一片组成存储器,其地址范围为FC000~FFFFFH,试画出存储器与CPU的连接图和片选信号译码电路(CPU地址线20位,数据线8位)。
1111 1100 0000 0000 0000
1111 1101 1111 1111 1111
1111 1110 0000 0000 0000
1111 1111 1111 1111 1111
5-10 现有存储芯片:2K*1b的ROM和4K*1bde RAM,若用它们组成容量为16KB的存储器,前4KB为ROM,后12KB为RAM,问各种存储芯片分别用多少片?
解:
4KB=4K*8b 需要2*8=16片
12KB=12K*8b 需要3*8=24片
第六章
6-3 CPU响应中断时的处理过程是什么?在各个处理环节主要完成哪些操作?
解:中断处理过程通常由中断请求、中断响应、中断处理和中断返回四个环节完成。
(1)中断请求:中断源需要进行中断服务时,由硬件产生一个中断信号INTR发给CPU且保持到CPU响应。
(2)中断响应:CPU在当前指令执行结束后采样查询INTR,若中断请求信号有效且允许响应INTR中断(IF=1),则向请求设备送回低电平有效的中断响应信号,自此系统自动进入中断响应周期,并由硬件自动完成内容入栈,清除TF和IF标志、断点(中断返回之后将要执行的指令地址)入栈,取中断服务程序的入口地址等一系列操作,继而转去执行中断服务程序。
(3)中断处理:执行中断的主体部分。不同的中断请求源,其中断处理的内容是不同的。需要根据中断请求源所要完成的功能,编写相应的中断服务程序存入内存。等待中断响应后调用执行。
(4)中断返回:又中断服务程序中的中断返回指令IRET完成。执行该指令时,将压入对战的断点和标志位弹出,使CPU转向被中断的现行程序中继续执行。
6-10 中断向量表用来存放什么内容?它占用多大的存储空间?存放在内存的哪个区域?可以用什么方法写入或者读取中断向量表的内容?
答:中断向量表用来存放中断服务程序的偏移地址和段基址。占用1KB内存。最低端的1KB RAM区,地址范围是000H~3FFH。
写入方法:1、 用传送指令直接装入。
2、 DOS功能调用: INT 21H
(AH)=25H
(AL)=中断类型号
(DS:DX)=中断服务程序的入口地址
读出方法:1、 用传送指令直接读。
2、 DOS功能调用:INT 21H
(AH)=35H
(AL)=中断类型号
出口参数: (ES:BX)=中断服务程序的入口地址
6-19 某系统使用两片8259A管理中断,从片的INT连接到主片的IR2请求输入端。设主片工作于边沿触发、特殊完全嵌套、非自动结束和非缓冲方式,中断类型号为70H,端口地址为80H和81H;从片工作与边沿触发、完全嵌套、非自动结束和非缓冲方式,中断类型号为40H,端口地址为20H和21H。要求:
(1)画出主、从片级联图
(2)编写主、从片初始化程序
解:
电路图参见教材P179图6-21,主片由A19-A1=0000 0000 0000 1000 000和M/给出低电平,从片由A19-A1=0000 0000 0000 0010 000和M/给出低电平。
主片8259A
MOV AL,11H(00010001B)
OUT 80H, AL ;定义ICW1
MOV AL, 70H(01110000B)
OUT 81H, AL ;定义ICW2
MOV AL, 04H(00000100B)
OUT 81H, AL ;定义ICW3
MOV AL, 11H(00010001B)
OUT 81H, AL ;定义ICW4
MOV AL, FBH(11111011B)
OUT 81H, AL ;定义OCW1
(开放从片IR2的请求)
IN AL, 81H
AND AL, 11111011
OUT 81H, AL
从片8259A
MOV AL,11H(00010001B)
OUT 20H, AL ;定义ICW1
MOV AL, 40H(01000000B)
OUT 21H, AL ;定义ICW2
MOV AL, 02H(00000010B)
OUT 21H, AL ;定义ICW3
MOV AL, 01H(00000001B)
OUT 21H, AL ;定义ICW4
6-20 某系统由8259A的IR2引入外设中断请求(跳变信号有效),要求当CPU响应IR2请求时,输出显示字符串“****”,并中断10次退出,试编写主程序和中断服务程序。
解:
设8259A的I/O地址为20H,21H,中断类型号0AH,从IR2引入
DATA SEGMENT
MESS DB '*****',OAH,ODH,'$'
INTA00 EQU 0020H
INTA01 EQU 0021H
DATA ENDS
STACK SEGMENT STACK
DB 100H DUP (?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN:MOV AX,DATA
MOV DS,AX
MOV DX,INTA00 ;8259A初始化
MOV AL,13H ;写ICW1
OUT DX,AL
MOV DX,INTA01
MOV AL,08H ;写ICW2
OUT DX,AL
MOV AL,01H ;写ICW4
OUT DX,AL
PUSH DS
MOV AX,SEG INT-P ;设置中断矢量
MOV DS,AX
MOV DX,OFFSET INT-P
MOV AL,0AH
MOV AH,25H
INT 21H
POP DS
MOV AL,0FBH ;写中断屏蔽字OCW1
OUT DX,AL
MOV DX,INTA00
MOV AL,20H ;写中断结束方式OCW2
OUT DX,AL
MOV BX,10
WAIT1: STI ;开中断
JMP WAIT1 ;等待中断
INT-P:MOV AX,DATA ;中断服务程序入口
MOV DS,AX
MOV DX,OFFSET MESS ;输出指定字符串
MOV AH,09H
INT 21H
MOV DX,INTA00 ;写OCW2,送中断结束命令EOI
MOV AL,20H
OUT DX,AL
DEC BX ;控制10次循环
JNZ NEXT
MOV DX,INTA01 ;读屏蔽寄存器IMR
IN AL,DX
OR AL,04H ;屏蔽IR2请求
OUT DX,AL
STI ;开中断
MOV AX,4C00H ;返回操作系统
INT 21H
NEXT: IRET ;中断返回
CODE: ENDS
END MAIN
第七章
3、CPU与IO接口设备数据传送的控制方式有哪几种?它们各有何特点?
答:(1)查询方式:不需要额外的硬件支持,但由于CPU与外设工作的不同步,致使CPU利用率低,适用于工作不太繁忙的系统中。
(2)中断方式:CPU与外部设备并行工作
(3)DMA方式:数据传送过程中,由DMA控制器参与工作,不需要CPU的干预,对批量数据传送效率高。
6、设8255A的A口工作于方式1输出,B口工作于方式0输入,试编写初始化程序(设端口地址为40H~43H)
答:MOV DX ,43H
MOV AL ,10100010
OUT DX,AL
7.使用8255A作为开关和LED指示灯电路的接口.要求8255A的A口连接8个开关,B口连接8个LED指示灯,将A口的开关状态读入,然后送至B口控制指示灯亮、灭。试画出接口电路设计图,并编写程序实现。
程序实现:
设8255的地
展开阅读全文