新《考研资料》《微机原理及应用》习题答案.doc
微机原理及应用习题答案教材:80X86/Pentium微型计算机原理及应用答案第一章计算机基础 1-3(1) 01101110 真值110 (2) 10001101 真值-13 1-4(1)010111+010111原+010111反+010111补00010111 (2) +101011 +101011原+101011反+101011补00101011(3) 101000 -101000原10101000 -101000反11010111-101000补11011000(4) -111111-111111原10111111 -111111反11000000 -111111补11000001 1-6 (1) x1+y1补=x1补+ y1补=00010100+00100001=00110101(2)x2-y2补=x2补+ -y2补=11101100+00100001=00001101 1-7 (1) 85+60 解:-85补=10101011 60补=00111100 -85补+60补=10101011+00111100=11100111(11100111)补10011001 真值 25 CS0,CP=0, CSCP0 无溢出 (4)-85-60 -85补=10101011 -60补=11000100-85补+-60补=10101011+11000100=101101111CS=1, CP=0 CSCP=1 有溢出 1-8 (1) x补+ y补=01001010+01100001=10101011CS=0, CP=1 CSCP=1 有溢出 (2) x补- y补=x补+ -y补 =01001010- 01100001=01001010+10101010 =100010110CS=1, CP=1 CSCP=0 无溢出 1-9 (1) (127)10=(000100100111)BCD(2) (74)H=(116)10=(000100010110)BCD 1-10 (1) 41H 代表 A (2) 72H 代表 r (3) 65H 代表 e (4) 20H 代表 SP1-14 (1) 69.57 (69.57)10=(1000101.100)B=0.1000101100 X 27=0.1000101100 X 2+111 浮点规格数为 011101000101 (2)-38.405 (-38.405)10=(-100110.011)B -100110.011= -0.100110011 x 26 = - 0.100110011 x 2110 浮点规格数为 011011001100 (3) - 0.3125(-0.3125)10=(-0.0101)2=(-0.101)2 x 2-001浮点规格数为 1111110100001. +0.00834 2. (+0.00834)10=(0.000000100010001)2=(0.100010001)2 x 2-110 3. 浮点规格数为 101001000100 4. 1-15 5. (1) (69.57)10=(1000101.10010001111010111)2 6. =(1.00010110010001111010111)2 x 2110 7. p=6+127=133=(10000101)2 8. 单精度浮点数为01000010100010110010001111010111 9. (2)(-38.405)10=(-100110.011001111010111000)2 10. = - (1.00110011001111010111000)2 x 2101 11. p=5+127=132=(10000100)2 12. 单精度浮点数为11000010000110011001111010111000 13. (3) (-0.3125)10=(-0.0101)2=(-1.01)2 x 2-10 14. p=-2+127=125=(1111101)2 15. 单精度浮点数为10111110101000000000000000000000 第二章 80X86/Pentium 微处理器 2-3 IO/M DT/R DEN RD WR 读存储器 0 0 0 0 1 写存储器 0 1 0 1 0 2-17PA=CS x 16+IP IP的范围为0000HFFFFH 而CS为A000H 因此PA的范围即现行代码段可寻址的存储空间范围为A0000HAFFFFH 2-20 1234ABCDH=00010010001101001010101111001101 B PA=SS x 16SP=A0000H+0100H=A0100H 栈顶SP0100H-4=00FCH 11001101 A00FCH 10101011 00110100 00010010 A0100F 2-21 (1) 1278H+3469H=0001 0010 0111 1000+0011 0100 0110 1001=0100 0110 1110 0001 SF=0 ZF=0 AF=1 PF=1 CF=0 OF=0 (2) 54E3H-27A0H=0101 0100 1110 0011+1101 1000 0110 0000 =1 0010 1101 0100 0011 SF=0 ZF=0 AF=1 PF=0 CF=0 OF=0 当进行16位或8位加或减运算时,若最高位产生进位或借位时,将CF置1,否则为0,当进行带符号数补码运算时,运算结果超出了机器所能表示的数值范围,就产生溢出,将OF置1,否则OF置0,即OF用来表示有符号数运算的溢出,而CF则用来表示无符号数运算的溢出。 2-29 答:存储慢速设备(存储器或I/O设备)的数据时,必须插入等待周期TW来延长总线周期,插入TW多少取决于CPU完成独立操作所需时间。 第三章 80X86/Pentium指令系统 3-5 (1) 源操作数为立即寻址方式;目标操作数为寄存器寻址方式 (2) 源操作数为基址寻址方式;目标操作数为寄存器寻址方式 EA=BX+DISP PA=DS×16+BX+DISP (3) 源操作数为寄存器寻址方式;目标操作数为寄存器间接寻址方式 EA=SI PA=DS×16+SI (4) 源操作数为基址加变址寻址方式;目标操作数为寄存器寻址方式 EA=BX+SI PA=DS×16+BX+SI (5) 源操作数、目标操作数都为寄存器寻址方式 (6) 源操作数为基址寻址方式;目标操作数为寄存器寻址方式 EA=BX+10H PA=DS×16+BX+10H (7) 源操作数为寄存器间接寻址方式;目标操作数为寄存器寻址方式 EA=BX PA=ES×16+BX (8) 源操作数为带位移量基址加变址寻址方式;目标操作数为寄存器寻址方式 EA=BX+SI+20H PA=DS×16+BX+SI+20H (9) 源操作数为寄存器寻址方式;目标操作数为寄存器间接寻址方法 A=BP PA=SS×16+BP (10) 源操作数为寄存器寻址方式 3-6 (1) 源操作数为寄存器间接寻址方式 (2) 源操作数为基址加变址寻址方式 (3) 源操作数为基址加比例变址寻址方式 (4) 源操作数为比例变址寻址方式 3-7 (1) 有错。没有两个基址寄存器相加的寻址方式 (2) 有错。两个操作数不能同时为存储器 (3) 有错。立即数不能直接送到段寄存器 (4) 有错。段寄存器CS不能作为目标操作数 (5) 有错。目标操作数不能为立即数 (6) 正确。 (7) 有错。两段寄存器间不能传送数据 (8) 有错。不能直接用“3”表示移3位 (9) 有错。NOT指令中只有一个目标操作数 (10) 正确。 (11) 有错。源操作数不能为立即数 (12) 有错。格式为IN AL, I/O端口地址,且100H>255,应放在DX中,DX在指令中出现 (13) 有错。源操作数应为存储器操作数 (14) 有错。对16位寻址时,存储器操作数应为SI、DI、BP、BX,不能为CX 3-8 (1) AX=3355H SP=1FFEH (2) AX=3355H DX=4466H SP=1FFEH 3-9 PA=SS×16+BP+SI=2F000H+0200H+0046H=2F246H 执行XCHG BX, BP+SI后 BX=4154H 2F246H=6F30H 3-12 (1) PA=DS×16+BX+SI+20H=09226HCL=F6H (2) PA=SS×16+BP+DI=1E4F6H 1E4F6H=5678H (3) BX=BX+SI+20H=0056H PA=DS×16+BX+2=09228H AX=1E40H (4) PA=DS×16+BX+DI=09226H SI=00F6H SI=0024H (5) PA=DS×16+BX+32H=09226H CX=00F6H 09226=5678H(执行XCHG CX,32HBX后) E再执行XCHG 20BXSI AX后 PA=DS×16BX+SI+20H=09226 AX=5678H 09226H=1234H 3-14 (2) MOV CL, 4 ROL BL, CL (4) AND BX, 0F7AFH (6) TEST DX, 0201H 3-16 (2)端口,(580H)=60H (581H)=80H (4)寄存器,AL=4FH AH=(41H) (5)端口,(45H)=60H 3-17 参考程序如下: (1) MOV AX, NUM2 ADD NUM1, AX (2) MOV AL, NUM1 ADD AL, NUM1+1 ADD AL, NUM1+2 ADD AL, NUM1+3 MOV RES, AL (3) MOV AL, NUM1 MOV AH, 0MOV CX, 7 LEA DI, NUM1 MOV DX, 0 NEXT: INC DI MOV DL, DI ADD AX, DXDEC CX JNZ NEXT MOV RES, AX (4) MOV AX, NUM1 ADD AX, NUM2 MOV NUM2, AX MOV AX, NUM1+2 ADC AX, NUM2+2 MOV NUM2+2, AX 3-18 参考程序如下: (1) MOV AL, NUM1 MOV AH, 0 MOV CX, 7 LEA DI, NUM1NEXT: INC DI MOV DL, DI ADD AL, DL DAA MOV DH, AL ;DAA只能对AL中数加以调整,DH为暂存用 MOV AL, AH ADC AL, 0 DAA ;题目中只有8个数相加,所以这里也可以不作调整 MOV AH, AL MOV AL, DH DEC CXJNZ NEXT MOV RES, AX 3-21 (1)009AH (2)0061H (3)8071H (4)10F7H (5)FF1CH 3-22 (1) DX=0006H BX=0004H (2) SP=1FFEH SP=FEH(3) CX=0004H BX=0004H (4) AX=8094H CF=0 (5) AL=87H (6) AL=CCH CF=0 AL=32H (7) SI=0009H (8) DI=0009H (9) DI=94H (10)AX=17C6H DX=8094H (11)AH=84H BL=04H (12)IP=17C6H 3-23 (1)将FIRST为首地址的内存单元中的10个字节传送到SECOND为首地址的内存单元。 (2)将0404H到0503H的内存单元清0。 3-25 OF SF ZF PF CF(1) 0 0 0 0 1 (2) 0 0 0 0 无影响 (3) 0 0 0 0 1 (4) 0 1 0 0 1 (5) 0 0 0 0 1 (6) 1 不定 不定 不定 1 (7) 0 0 0 1 0 (8) 0 不定 不定 不定 0 (9) 0 1 0 1 0 (10) 0 0 0 1 0 (11) 0 0 1 1 0 (12) 0 1 0 1 1 (13) 1 0 0 0 1 3-27 (1) IP=1256H (2) IP =3208H (3) IP =2450H 3-28 IP=009AH, CS=2000H, SP=0F178H, SP=8FH, SP+1=3DH SP+2=50H, SP+3=40H 3-29CMP AL, 01H JZ LAB1 CMP AL, 02H JZ LAB2 CMP AL, 04H JZ LAB3 TEST AL, 07H JNZ LAB4 LAB1: LAB2: LAB3: LAB4:1. 汇编语言程序设计 4-2 12 VAR1-12H 0 FFH 0 FFH 0 FFH 0 VAR2 1 2 1 2 0 3 . 重复上面"0"到"3"部分内容99次 W VAR3 E L C O M E T O VAR36的 VAR4 偏移地址 VAR3的偏移 地址 VAR3的段基 地址 4-3 (1) DATA1 DB 86H, 27H, 23H, 00H, 24H, 1AH (2) DATA2 DW 0B430H, 1062H 或者 (1)DATA1 LABEL BYTE ARRAY DW 2786H,23H,1A24H (2) DATA2 LABEL WORD ARRAY DB 30H,0B4H,62H,10H 4-5 (1) VAR1的偏移量是30H,VAR2的偏移量是3AH (2) CNT=10H (3) VAR2+2单元的内容为02H 4-6 AAA MACRO PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX ENDM 4-7 TRAN MACRO X, Y, Z X, Y为源、目标数据块的首地址,Z为数据块的长度 MOV CX, Z MOV SI, OFFSET X MOV DI, OFFSET Y CLD 设置方向标志为0 REP MOVSB ENDM 4-8 (1) 错 源操作数和目标操作数长度不匹配 (2) 对 (3) 错 两个存储器操作数之间不可直接传送 (4) 错 CS不可作为MOV指令的目标操作数 (5) 对 (6) 错 没有SIDI的寻址方式 (7) 错 BX-SI不是正确的寻址方式 (8) 错 操作数没指明类型 (9) 错 立即数不可作为MOV指令的目标操作数 (10) 错 8-BX不是正确的寻址方式 4-9 MOV BX, OFFSET ARRAY ;将ARRAY的偏移地址传给BX MOV CX, LENGTH ARRAY ;将ARRAY用DUP重复定义的数据项总数传给CX MOV SI, 0 ;将0传给SI ADD SI, TYPE ARRAY ;将SI的内容与ARRAY的类型值相加,返回给SI指令执行后 BX:数组ARRAY的首地址 CX=100 SI=2 4-10MOV AX, WORD PTR X ADD AX, WORD PTR Y MOV WORD PTR Z, AX MOV AX, WORD PTR X+2 ADC AX, WORD PTR Y+2 MOV WORD PTR Z+2, AX 4-12 (1) DATA SEGMENT DATA ENDS CODE SEGMENT MOV AH, 01H 从键盘输入一个字符,其ASC码值在AL中 INT 21H CMP AL, 41H JZ P0 CMP AL, 42H JZ P1 CMP AL, 4AH JZ P9 JMP EXIT P1: RET P2: RET P9: RET EXIT: MOV AH, 4CH INT 21H . (2) DATA SEGMENT BASE DW P0, P1, ,P9 DATA ENDS CODE SEGMENT MOV AH, 01H 从键盘输入一个字符,其ASC码值在AL中 INT 21H CMP AL, 'A' 判别字符是否位于A到J之间 JB EXITCMP AL, 'J' JA EXIT SUB AL, 'A' ;在正确范围之内,根据表内地址分支 MOV BL, AL MOV BH, 0SHL BX, 1 JMP BASEBX P1: RET P2: RET P9: RET EXIT: MOV AH, 4CH INT 21H . 4-14 LEA BX, x LEA SI, y LEA DI, sum ADD BX, 7ADD SI, 7 ADD DI, 8 ;和可能要9个字节 MOV CX, 8 LOP: MOV AL, BX ADC AL, SI DAA MOV DI, AL DEC BX DEC SI DEC DI DEC CX JNZ LOP MOV AL, 0 ADC AL, 0 MOV DI, AL 4-15 MOV SI, OFFSET FIRST MOV CX, 0 ;CX中存放A的个数 LOOP: MOV AL, SI CMP AL, $ JZ NEXTCMP AL, A JNE LP INC CX LP: INC SI JMP LOOP NEXT: 4-16 MOV BX, 0 MOV CX, 16 NEXT: RCL AX, 1 JC P1 INC BH JMP OK P1: INC BL OK: LOOP NEXT MOV CX, BX 4-17 DATA SEGMENT DATA_W DW ;若干个数 COUT EQU ($-DATA_W)/2 COUT1 DB 0 COUT2 DB 0 COUT3 DB 0 DATA ENDS STACK SEGMENT PARA STACK STACK DB 100 DUP(0) STACK ENDS CODE SEGMENT ASSAUM CS:CODE,DS:DATA START PROC FAR PUSH DS MOV AX, 0 PUSH AX MOV AX, DATA MOV DS, AX MOV DX, 0 ;正数、负数、0暂时分别存在BL、BH、DL中 MOV BX, 0LEA SI, DATA_W MOV CX, COUT NEXT: MOV AX, SI CMP AX, 0 JG LP1 JL LP2 INC DL JMP OK LP1: INC BL JMP OK LP2: INC BH OK: ADD SI, 2LOOP NEXT RET START ENDP CODE ENDS END START 4-18 DATA SEGMENT ARRAY DW ;若干个数 COUT EQU $-ARRAY MAX DB MIN DB DATA ENDSSTACK SEGMENT PARA STACK STACK DB 100 DUP(0) STACK ENDS CODE SEGMENT ASSAUM CS:CODE,DS:DATA START PROC FAR PUSH DS MOV AX, 0 PUSH AX MOV AX, DATA MOV DS, AX LEA BX, ARRAY MOV CX, COUT MOV AH, BX MOV AL, BX DEC CX INC BX LOP: CMP AH, BX JA NEXT1 MOV AH, BX JMP NEXT2 NEXT1: CMP AL, BX JB NEXT2 MOV AL, BX NEXT2: INC BX LOOP LOP MOV MAX AH MOV MIN AL RET START ENDP CODE ENDS END START 4-22 LEA BX, STRING MOV CX, 80 NEXT: CMP BX, 20H JZ OK INC BX LOOP NEXT MOV CL, -1 JMP FIN OK: NEG CX ADD CX, 80 FIN: 4-24 (1) LEA SI,STRING1 LEA DI,STRING2MOV CX,20 CLD REP MOVSB (2) LEA SI,STRING1 LEA DI,STRING2 ADD SI,19 ADD DI,19 MOV CX,20 STD REP MOVSB (3) MOV AL,20H LEA DI, STRING1 MOV CX,20 CLD REPNZ SCASB JZ FOUND MOV DL,0 ;未找到 JMP EXIT FOUND:DEC DI MOV BX,DI MOV DL,01H ;找到 EXIT: (4) LEA SI,STRING1 LEA DI,STRING2 MOV CX,20 CLD REP CMPSB JNZ NEQ MOV BL,0 ;相同 JMP EXIT NEQ: MOV BL,01H ;不相同 EXIT: 4-25 ; MODULE_1 EXTRN VAR3: DWORD PUBLIC VAR1, LABEL_1 ; MODULE_2 EXTRN VAR1: WORD, LABEL_1: FAR, LABEL_3: FAR PUBLIC VAR3, LABEL_2; MODULE_3 EXTRN VAR1: WORD, LABEL_1: FAR, LABEL_2: FAR PUBLIC LABEL_3 4-26 ;模块1,文件名MAIN.ASM EXTRN DISPLAY: FAR ;引用外部符号 PUBLIC MESG ;定义外部符号 DATA1 SEGMENT MESG DB 'ASSEMBLER$' DATA1 ENDS CODE1 SEGMENT ASSUME CS: CODE1, DS: DATA1 MAIN: MOV AX, DATA1 MOV DS, AX ;装入段基址 PUSH DS CALL DISPLAY MV AH, 4CH INT 21H CODE1 ENDS END MAIN ;模块2,文件名 DISPLAY.ASM EXTRN MESG PUBLIC DISPLAY ;定义外部符号 DATA2 SEGMENT DB 100UP( ) DATA2 ENDS CODE2 SEGMENT ASSUME CS: CODE2, DS: DATA2 DISPLAY PROC FAR MOV AX, DATA2 MOV DS, AX ;装入段基址 MOV DX, OFFSET MESG MOV AH, 9 ;屏幕显示 INT 21H RET DISPLAY ENDP CODE2 ENDS 4-27 STACK SEGMENT PARA STACK STACK DB 100 DUP (0) STACK ENDS CODE SEGMENT ASSAUM CS: CODE START PROC FAR PUSH DS MOV AX, 0 PUSH AX MOV AX, DATA MOV DS, AX MOV CX, 4 MOV DX, 0. MOV BL, 2 LOP1: MOV AH, 1 INT 21H CMP AL, 46H JA EXIT ;字符ASCII码不在09,AF之间 CMP AL, 40H JA LOP2 CMP AL, 39H JA EXIT ;字符ASCII码不在09,AF之间 CMP AL, 30H JB EXIT ;字符ASCII码不在09,AF之间 SUB AL, 30H JMP NEXT LOP2: SUB AL, 37H NEXT: OR DL, AL MOV AL, CL MOV CL, 4 ROL DX, CL MOV CL, AL LOOP LOP1 EXIT: RET START ENDP CODE ENDS END START 1. 半导体存储器 5-4 1K X 8 : 末地址=1000H+3FFH=13FFH 2K X 8 : 末地址=1000H+7FFH=17FFH 4K X 8 : 末地址=1000H+FFFH=1FFFH 8K X 8 : 末地址=1000H+1FFFH=2FFFH 5-5 所占地址空间为:20000H27FFFH 5-6 1# 8000H87FFH 2# 8800H8FFFH 3# 9000H97FFH 4# A000HA3FFH 5# A400HA7FFH 6# A800HABFFH 7# AC00HAFFFH 5-7 111. 输入/输出和中断技术 6-4IN AL, PORT_T CMP AL, 0FEH k0单独被按下,即最低位为0,其余位为高 JZ NEXT1 CMP AL, 0FDH JZ NEXT2 MOV AL, 00H ;其他的情况,将灯全部不点亮 OUT PORT_T, ALJMP EXITNEXT1: MOV AL, 01H ;K0被按下,LED0LED7顺次点亮,送1则对应的灯亮 MOV CX, 8 LOOP1: OUT PORT_T, AL CALL DELAY ROL AL, 1 LOOP LOOP1 JMP EXIT NEXT2: MOV AL, 80H ;K1被按下,LED0LED7反序点亮,送1则对应的灯亮 MOV CX, 8 LOOP2: OUT PORT_T, AL CALL DELAY ROR AL, 1 LOOP LOOP2 EXIT: . 1. 解: MOV BX, OFFSET STRING WAIT:IN AL, STATUS AND AL, 80H JNZ WAIT MOV AL, BX OUT DATAS,AL CMP AL,0DH JZ END INC BX JMP WAIT END: 1. 解: MOV CX, 100 MOV BX, OFFSET DATABUF IN-TEST: IN AL, STATUS TEST AL, 80H JZ , IN-TEST IN AL,DATAS MOV BX,AL INC BX LOOP IN-TEST 6-13 执行INT 8后CPU将PSW, IP, CS压入堆栈,堆栈的情况如下图: A2H 00H 00H 09H 40H 02H SP 00FAH 00FBH 00FCH 00FDH 00FEH 00FFH SP=00FAH, SS=0300H, IP=0040H, CS=0100H 因为IF,.TF进入中断后自动为零,所以PSW=0040H. 6-15 IRR中断请求寄存器用来寄存所有要求服务的中断请求 IMR中断屏蔽寄存器用来存放须屏蔽的中断请求 ISR中断服务寄存器用来寄存所有正在被服务的中断请求 6-16 IRQ3申请中断, IRQ3正在被服务, 20H, 05H 6-18 CLI MOV DX, FFDCH MOV AL, 00010011B ;ICW1 OUT DX, AL MOV DX, FFDDH MOV AL, 90H ICW2 OUT DX, AL MOV AL, 00000001B ICW4 OUT DX, AL STI 6-21 RRREG DB SRREG DB IMREG DB MOV AL, 00001010B 读IRR OUT 20H, AL IN AL, 20H MOV RRREG, AL MOV AL, 00001011B 读ISR OUT 20H, AL IN AL, 20H MOV SRREG, AL IN AL, 21H ;读IMR MOV IMREG, AL第七章 习题解答 7-1 MOV AL, 00110111B OUT 83H, AL MOV AL, 0DH OUT 80H, AL MOV AL, 07H OUT 80H, AL 7-2见习题课内容(电子教案) 7-5 见习题课内容(电子教案) 7-6见习题课内容(电子教案) 7-7、79见习题课内容(电子教案)