微型计算机技术答案第三版孙德文编.ppt
微型计算机技术答案第三版孙德文编 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望第3章3.1(1)MOV CL,BX+20HSI指令的功能是将内存单元指令的功能是将内存单元DS:BX+20H+SI=DS:0056H=09226H的字节数据传送到的字节数据传送到CL寄存器。寄存器。已知已知(09226H)=00F6H,按高高低低的存放按高高低低的存放原则,原则,09226H单元的数据应为其低字节,单元的数据应为其低字节,故故(09226H)=F6H故运行后,故运行后,CL=(09226H)=F6H3.1(2)MOV BPDI,CX指令的功能是将寄存器指令的功能是将寄存器CX中的数据传送中的数据传送到内存单元到内存单元SS:BP+DI=SS:0056H=09226H已知已知(09226H)=00F6H,该指令运行后,该指令运行后,(09226H)=CX=5678H注意:若用寄存器注意:若用寄存器BP间接寻址,则数据间接寻址,则数据默认在堆栈段内。默认在堆栈段内。3.1(3)LEA BX,BX+20HSIMOV AX,BX+2第第1条指令的功能是内存单元的有效地址条指令的功能是内存单元的有效地址传送到传送到BX中。指令运行后,中。指令运行后,BX=BX+20H+SI=0056H第第2条指令的功能是将内存单元条指令的功能是将内存单元DS:BX+2=09228H中的数据传送到中的数据传送到AX,指令运行后,指令运行后,AX=(09228H)=1E40H3.1(5)XCHG CX,BX+32HXCHG BX+20HSI,AX第第1条指令的功能是内存单元条指令的功能是内存单元DS:BX+32H=09226H中的数据和中的数据和CX相交换。指令运行后,相交换。指令运行后,CX=(原原09226H)=00F6H(09226H)=(原原CX)=5678H第第2条指令的功能是将条指令的功能是将AX和内存单元和内存单元DS:BX+20H+SI=09226H相交换,指令运行后,相交换,指令运行后,AX=(09226H)=5678H(注意,在上一条指令中,注意,在上一条指令中,09226H单元的数据已变为单元的数据已变为5678H.)(09226H)=(原原AX)=1234H3.2(2)MOV AX,1352H指令的功能是将内存指令的功能是将内存DS:1352H=11352H中的数据传送到中的数据传送到AX.已知:已知:(11352H)=0FFH,但由于但由于AX为字,为字,故需从内存中取故需从内存中取2个字节组合形成一个字,个字节组合形成一个字,因此因此11352H和其后的地址为和其后的地址为11353H的两的两个内存单元形成的字数据为个内存单元形成的字数据为26FFH.指令运行后,指令运行后,AX=26FFH3.2(3)MOV 0150HBX,CH指令的功能是将指令的功能是将CH中的字节数据传送到中的字节数据传送到DS:0150H+BX=11350H内存单元中。内存单元中。已知:已知:CX=339AH,故故CH=33H指令运行后,指令运行后,(11350H)=33H,(11351H)=3CH注意:指令对注意:指令对11351H内存单元的数据没内存单元的数据没有影响,它仍是原来的值。有影响,它仍是原来的值。3.2(4)MOV AX,0150HBP指令的功能是将内存单元指令的功能是将内存单元SS:0150H+BP=21350H中的字数据传送到中的字数据传送到AX中。中。已知:已知:(21350H)=88H,(21351H)=51H,指令运行后,指令运行后,AX=5188H3.2(5)POP AX指令的功能是将堆栈栈顶指令的功能是将堆栈栈顶SS:SP=21350H的字数据弹出到的字数据弹出到AX中,再将中,再将SP+2SP。已知:已知:(21350H)=88H,(21351H)=51H,SP=1350H.指令运行后指令运行后:AX=5188H,SP=1352H3.2(6)ADD SI,CX指令的功能是将内存单元指令的功能是将内存单元DS:SI=11354H的字数据与的字数据与CX中的字数据相加,再将相中的字数据相加,再将相加后的结果存在加后的结果存在11354H内存单元中。内存单元中。已知:已知:(11354H)=52H,(11355H)=0E7H,形成的字为形成的字为:E752H指令运行后:指令运行后:(11354H)=0ECH,(11355H)=1AH,SF=0,ZF=0,PF=0,CF=1,OF=03.2(7)SUB BH,0150HBXSI指令的功能是将指令的功能是将BH中的字节数据与中的字节数据与DS:0150H+BX+SI=126A4H中的字节数据相减,再将相减后的结果中的字节数据相减,再将相减后的结果存在存在BH中。中。已知:已知:BH=12H,(126A4H)=9DH,指令运指令运行后:行后:BH=75H,SF=0,ZF=0,PF=0,CF=1,OF=03.2(8)INC BYTE PTR 0152HBX指令的功能是将内存单元指令的功能是将内存单元DS:0152H+BX=11352H中的字节数据加中的字节数据加1,再将加,再将加1后的结果存后的结果存在在11352H内存单元中。内存单元中。已知:已知:(11352H)=0FFH,指令运行后:指令运行后:(11352H)=00H,(11353H)=26H,CF=0(或不或不变变)3.2(9)INC WORD PTR 0152HBX指令的功能是将内存单元指令的功能是将内存单元DS:0152H+BX=11352H中的字数据加中的字数据加1,再将加,再将加1后的结果存在后的结果存在11352H内存单元中。内存单元中。已知:已知:(11352H)=0FFH,(11353H)=26H指令运行指令运行后:后:(11352H)=00H,(11353H)=27H,CF=0(或不变或不变)3.2(10)SAR BYTE PTR 0150HBX,1指令的功能是将内存单元指令的功能是将内存单元DS:0150H+BX=11350H中的字节数据算术右移中的字节数据算术右移1次,再将移位后的结次,再将移位后的结果存到果存到11350H内存单元中。内存单元中。已知:已知:(11350H)=0A5H指令运行后,指令运行后,(11350H)=0D2H,CF=1,OF=03.2(11)SAL BYTE PTR 0150HBX,1指令的功能是将内存单元指令的功能是将内存单元DS:0150H+BX=11350H中的字节数据算术左移中的字节数据算术左移1次,再将移位后的结次,再将移位后的结果存到果存到11350H内存单元中。内存单元中。已知:已知:(11350H)=0A5H指令运行后,指令运行后,(11350H)=4AH,CF=1,OF=13.4(1)MOV BL,85H;BL=85HMOV AL,17H;AL=17HADD AL,BL;AL=9CH DAA;调整,9CH+06H=A2H,A2H+60H=02H,CF=1故AL=02H,BL=85H,CF=13.4(2)MOV AX,BX;AX=BXNOT AX;AX取反后,原来数据中的0变为1,1变为0ADD AX,BX;AX=FFFFH,CF=0INC AX;AX=0,CF不变,仍为0故AX=0,CF=03.4(3)MOV AX,0FF60H;AX=FF60HSTC;CF=1MOV DX,96;DX=0060H,因此DH=00H,DL=60HXOR DH,0FFH;DH=FFH,CF=0SBB AX,DX;AX-DX-CF=FF60H-FF60H-0=0,由于相减过程并未产生借位,故CF=0上述指令段运行后,AX=0,CF=03.4(4)MOV BX,0FFFEHMOV CL,2SAR BX,CLSAR为算术右移,低位移出到CF中,高位用符号位填充。故运行结果为:BX=0FFFFH,CF=13.6(1)0(2)1(3)-13.10BX=0F00H,CF=03.11(1)AX(2)带符号数第4章4.16363H41H42H43H44H?1313ARRAYB34H12H05H00H42H41H44H43H?01H00H03H00H01H00H03H00HARRAYW4.2 38(或26H)4.6002CH4.7164.9(1)DA1 DB 20H DUP(2,3,10 DUP(4),7)(2)DA2 DW TS,DU,NE,ST(3)COUNTEQU DA2-DA14.10 MOV CX,10AAA4.11MOV CX,CUNTADD AL,30H4.12字符串中$的个数 4.13XCHG SI,DIXCHG SI,DI4.14(1)测试AL,BL中的数据的正负,若符号不相同,则交换两寄存器;若符号相同,则不改变两寄存器中的数据。(2)AL=77H,BL=9AH4.15D7D6D5D4D3D2D1D0AL寄存器:寄存器:程序执行后的程序执行后的AL寄存器变为:寄存器变为:D0D1D2D3D4D5D6D7编程思路:编程思路:将将AL逻辑左移逻辑左移1位,最高位位,最高位D7位被移位被移出,移到出,移到CF。再将寄存器。再将寄存器AH带进位带进位的循环右移的循环右移1次,将最低位移到次,将最低位移到CF,原原CF被移到最高位。继续这一过程,被移到最高位。继续这一过程,共需移位共需移位8次即可实现。次即可实现。MOV AL,23HMOV AH,00HMOV CX,8NEXT:SHL AL,1RCR AH,1LOOP NEXTMOV AL,AH4.16MOV CX,26LEA BX,CHARMOV AL,ANEXT:MOV BX,ALINC BXINC ALLOOP NEXTHLT4.17MOV AL,XCMP AL,0JGE Y1NEG ALY1:MOV Y,ALHLT4.18 MOV CX,20MOV AX,0LEA BX,SUMNEXT:ADD AX,BXINC BXINC BXLOOP NEXTMOV SUM,AXHLT4.19DATASEGMENTBUF DB 12HASCDB?,?DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AL,BUFMOV CL,4SHR AL,CLADD AL,30HMOV ASC,ALMOV AL,BUFAND AL,0FHADD AL,30HMOV ASC+1,ALMOV AH,4CHINT 21HCODEENDSEND START4.20DATASEGMENTA1DB NEQU$-A1A2DB N DUP(?)SLDB?DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DL,0LEA SI,A1LEA DI,A2MOV CX,NMOV AL,SICMP AL,aJB AGAINCMP AL,zJA AGAININC DLMOV DI,ALINC DIAGAIN:INC BXLOOP NEXTMOV AH,4CHINT 21HCODEENDSEND START4.22MOV AL,STATUSMOV BL,0AND AL,00101010BAGAIN:AND AL,ALJZ ROUT4SHR AL,1JNC AGAININC BLJMP AGAINCMP BL,1JE ROUT1CMP BL,2JE ROUT2JMP ROUT3ROUT1:ROUT2:ROUT3:ROUT4:4.23CODESEGMENTSTART:MOV AX,DATAMOV DS,AXLEA BX,STRINGNEXT:MOV AL,BXCMP AL,20HJE SAVEINC SICMP AL,$JE EXITJMP NEXTSAVE:MOV POST,BLJMP OVEREXIT:MOV POST,-1OVER:MOV AH,4CHINT 21HCODEENDSEND STARTDATASEGMENTSTRING DB STUDENT HELLO$POSTDB?DATAENDS第5章5.1(1)64片,11位地址作为片外译码(2)1024片,10位地址作为片外译码(3)64片,9位地址作为片外译码(4)32片,4位地址作为片外译码5.2 512=29,故每块芯片需要故每块芯片需要9条寻址线。条寻址线。4K=22*210=212,故故4KB系统需要系统需要12条寻址线。条寻址线。5.3 地址范围:FF000H-FFFFFH存储容量:4KB5.4RAM存储容量为:2KB地址范围为:F9000H-F97FFH(或F98000H-F9FFFH)EPROM存储容量为:4KB地址范围为:FD000H-FDDFFH5.81#的地址范围为:04000H-05FFFH2#的地址范围为:02000H-03FFFH存储器的总容量为:213*8b*2=8KB*2=16KB第6章6.8AGAIN:MOV AL,01111111BNEXT:OUT 20H,ALCALL DELAYROR AL,1JC NEXTJMP AGAINHLT第7章7.2 内部中断和外部中断,其中,内部中断有除法出错,溢出,断点,指令,单步中断。外部中断有INTR和NMI。7.5,7.6(略,请参考书上)7.7(1)1单步中断;2溢出中断;3、4、5为指令中断,除法出错,断点中断。(2)引脚6为NMI,7为INTR,8为INTA(3)8259,功能略,请参看书上第8章8.6,8.8略,请参看书上。8.21 用N表示计数初值,则N=1MHZ/40kHz=25输出方波的0占(N-1)/2=12个脉冲周期,故时间为12*1/1MHZ=12us输出方波的1占(N-1)/2+1=13个脉冲周期,故时间为13*1/1MHZ=13us8.35;写方式控制字到控制字寄存器;写方式控制字到控制字寄存器,A口作输入口,口作输入口,C口作输出口口作输出口MOV AL,90HOUT 63H,AL;控制程序控制程序AGAIN:IN AL,60H;读读A口中的数据到口中的数据到ALAND AL,03H;取出最低取出最低2位位CMP AL,0JZ YELLOWCMP AL,1JZ GREENCMP AL,2JZ REDYELLOW:MOV AL,4JMP CONTGREEN:MOV AL,2JMP CONTRED:MOV AL,1CONT:OUT 62H,ALCALL DELAYJMP AGAIN习题习题:8.24 8253A-5的计数通道的计数通道0连接如图习连接如图习8-4所示所示,试回试回答答:(1)计数通道)计数通道0工作于何种方式,并写出工作方工作于何种方式,并写出工作方式名称;式名称;(2)写出计数通道)写出计数通道0的计数初值(列出计算式)的计数初值(列出计算式)(3)写出初始化程序)写出初始化程序D7-D0RDWRA0A1CS 8253GATE0CLK0 OUT0+5V400ns1ms图习图习8-4解:解:(1)由于出现一个)由于出现一个CLK周期宽度的负脉冲的方式有方式周期宽度的负脉冲的方式有方式25两种两种,但是但是GATE0是一直保持高电平是一直保持高电平,因此方式因此方式5是是无法触发的无法触发的,因此可以判断计数通道因此可以判断计数通道0工作于方式工作于方式2(2)因为)因为CLK周期宽度为周期宽度为400ns,CLK正脉冲宽度为正脉冲宽度为200ns,因此,因此 计数通道计数通道0的计数初值的计数初值=1ms/400ns=2500(3)初始化程序段)初始化程序段(设设8253的口地址为的口地址为:80H-83H)MOV AL,0001 0101BMOV 83H,ALMOV AL,00HOUT 80H,ALMOV AL,25HOUT 80H,AL 习题:习题:8.25(P376)若若8253计数器对设备的转轴的旋转速度进行测试,接计数器对设备的转轴的旋转速度进行测试,接口电路如图习口电路如图习8-5所示。从图可知,若与转轴相连的转盘所示。从图可知,若与转轴相连的转盘上均匀地钻有上均匀地钻有50个圆孔,当旋转时,通过光电转换,每个圆孔,当旋转时,通过光电转换,每通过一个小孔,产生一个正脉冲,当转轴转一圈,就会通过一个小孔,产生一个正脉冲,当转轴转一圈,就会产生产生50个脉冲通过个脉冲通过CLK输入输入8253计数器进行减法计数,计数器进行减法计数,若假设此转轴的速度范围在若假设此转轴的速度范围在50-1000转转/秒,并设秒,并设8253的的端口地址为端口地址为84H87H。(1)若采用定时测试已转换过的脉冲个数而转换为测试)若采用定时测试已转换过的脉冲个数而转换为测试转轴的速度,单位为转转轴的速度,单位为转/秒。说明它的计算过程。秒。说明它的计算过程。(2)若用计数器)若用计数器0对脉冲计数,用计数器对脉冲计数,用计数器1作为定时,设作为定时,设它的它的CLK1频率为频率为200KHz,用定时,用定时100ms来计数。写出来计数。写出计数器计数器0、1的工作方式控制字和计数初值,并注释,并的工作方式控制字和计数初值,并注释,并且写出且写出8253的初始化程序。的初始化程序。D7-D0RDWRA0A1CS 8253GATE0CLK0 OUT0+5V转换电路图习图习8-5解:解:因为最高转速为因为最高转速为1000转转/秒,因此,转一圈的脉冲数最高为秒,因此,转一圈的脉冲数最高为100050=50000个个=C350H,因此计数器必须用,因此计数器必须用16位计数,位计数,并且用二进制计数。并且用二进制计数。(1)采用定时测试已转速,计算方法为:)采用定时测试已转速,计算方法为:是定时时间为:是定时时间为:TIME=100ms=0.1s 则则 转速转速=(定时到的计数值定时到的计数值/50)/0.1s 转转/秒秒(2)初始化程序段)初始化程序段:计数器计数器0初始化程序段初始化程序段:计数初值计数初值=0000HMOV AL,0011 0000B ;通道通道0,方式方式0,16位计数位计数,二进制计数二进制计数OUT 87H,ALMOV AL,00OUT 84H,ALOUT 84H,AL计数器计数器1初始化程序段:初始化程序段:计数初值计数初值=100ms/(1/200kHz)=100/0.5=20000=4E20HMOV AL,0111 0000B;通道通道1,方式方式0,16计数计数,二二进制计数进制计数OUT 87H,ALMOV AL,20HOUT 85H,ALMOV AL,4EHOUT 85H,AL