1、 第一章 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、计算机为
2、什么采用补码形式存储数据?当计算机的字长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
3、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)补 正确
4、[X-Y]补=11101110+10001000=01110110B=(123D)补 由于X-Y=-138 超出了机器数范围,因此出错了。 13、微型计算机的主要性能指标有哪些? 答:CPU字长、存储器容量、运算速度、CPU内核和IO工作电压、制造工艺、扩展能力、软件配置。 第二章 2、8086标志寄存器包含哪些标志位?试说明各标志位的作用。 答:进位标志:CF;奇偶校验:PF;辅助进位:AF;零标志:ZF;符号标志:SF;溢出标志:OF。 5、逻辑地址与物理地址有什么区别?如何将逻辑地址转换为物理地址? 答:物理地址是访问存储器的实际地址,一个存储单元对应唯一的一
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、
6、设一个16字的数据区,它的起始地址为70A0H:DDF6H(段基址:偏移地址),求这个数据区的首字单元和末字单元的物理地址。 答:首字:70A0*10H+DDF6H=7E7F6H 末字单元地址=起始地址+(字数-1)*2=7E7F6H+(16-1)*2=7E814H。 13、80486CPU内部由哪些主要部件构成?有哪几种工作模式? 答:(1)总线接口单元、指令预取单元、指令译码单元、控制单元,整数运算单元,浮点运算单元,段预存储器管理单元,高速缓冲单元。 (2)实地址模式、保护虚拟地址模拟、虚拟8086模式 14、80486CPU存储器最大可寻址空间是多少?虚拟存储空间是多少?两
7、者有何区别? 答:最大可寻址空间是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)=15
8、00H、(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
9、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
10、 (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]
11、 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的内
12、容是多少? (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 B
13、L,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只有目标操作
14、数 (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指令和条件转移指令实现下列判断 (
15、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个字
16、数据,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 END
17、S 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 0
18、0H 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
19、 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
20、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
21、 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 PA
22、RA 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]
23、 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
24、 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
25、 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中
26、 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
27、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
28、 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个
29、数,绝对值最大数为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
30、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
31、 ;递推 DEC CX JNZ LOP1 ;循环 LEA BX, MAX ;取最大值存储区地址 MOV [BX], AL ;移入最大值 MOV AH, 4CH INT 21H
32、 ;返回DOS CP PROC ;比较AL和DL,将较大的数存入AL.入口参数: AL, DL出口参数: AL CMP DL, 0 JG POSITIVE ;DL为正数 NEG DL ;求相反数 POSITIVE:
33、 CMP AL, DL ;比较AL和[BX]中的大小 JG EXIT ;AL大于DL则跳转 MOV AL, DL ;将DL移入AL EXIT: RET ;退出 CP ENDP CODE ENDS END START
34、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
35、数据段装入 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 J
36、NZ 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片 1
37、024=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 1
38、111 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)中断请求:中断源需
39、要进行中断服务时,由硬件产生一个中断信号INTR发给CPU且保持到CPU响应。 (2)中断响应:CPU在当前指令执行结束后采样查询INTR,若中断请求信号有效且允许响应INTR中断(IF=1),则向请求设备送回低电平有效的中断响应信号,自此系统自动进入中断响应周期,并由硬件自动完成内容入栈,清除TF和IF标志、断点(中断返回之后将要执行的指令地址)入栈,取中断服务程序的入口地址等一系列操作,继而转去执行中断服务程序。 (3)中断处理:执行中断的主体部分。不同的中断请求源,其中断处理的内容是不同的。需要根据中断请求源所要完成的功能,编写相应的中断服务程序存入内存。等待中断响应后调用执行。
40、4)中断返回:又中断服务程序中的中断返回指令IRET完成。执行该指令时,将压入对战的断点和标志位弹出,使CPU转向被中断的现行程序中继续执行。 6-10 中断向量表用来存放什么内容?它占用多大的存储空间?存放在内存的哪个区域?可以用什么方法写入或者读取中断向量表的内容? 答:中断向量表用来存放中断服务程序的偏移地址和段基址。占用1KB内存。最低端的1KB RAM区,地址范围是000H~3FFH。 写入方法:1、 用传送指令直接装入。 2、 DOS功能调用: INT 21H (AH)=25H
41、 (AL)=中断类型号 (DS:DX)=中断服务程序的入口地址 读出方法:1、 用传送指令直接读。 2、 DOS功能调用:INT 21H (AH)=35H (AL)=中断类型号 出口参数: (ES:BX)=中断服务程序的入口地址 6-19 某系统使用两片8259A管理中断,从片的INT连接到主片的IR2
42、请求输入端。设主片工作于边沿触发、特殊完全嵌套、非自动结束和非缓冲方式,中断类型号为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 ;定义
43、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 ;定义I
44、CW1 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
45、 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 OU
46、T 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
47、 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 D
48、S,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,
49、04H ;屏蔽IR2请求 OUT DX,AL STI ;开中断 MOV AX,4C00H ;返回操作系统 INT 21H NEXT: IRET ;中断返回 CODE: ENDS END MAIN 第七章 3、CPU与IO接口设备数据传送的控制方式有哪几种?它们各有何特点? 答:(1)查询方式:不需要额外的硬件支持,但由于CPU与外设工作的不同步,致使CPU利用率低,适用于工作不太繁忙
50、的系统中。 (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的地






