;CALLDELAY;MOVAL,2;拉低EN;OUTDX,AL;POPCX;POPAX;RET;WRITE_DATAENDP3.2.2中断子程序中断子程序的设计流程图如右示,进入中断后先保护现场(将寄存器CX,AX,DX及标志寄存器中的内容压入堆栈中),然后恢复中断现场(分别将秒时分计数寄存器BX,SI,DI的数值进行恢复继续计数)然后进行时钟的操作,最后要保护中断现场,即将时分计数中断开始保护现场恢复中断现场秒加1并输出秒=60秒清0分加1并输出分=60分清0时加1并输出时=24时清0恢复现场并开中断中断返回保护中断现场NNNYYY基于8086的电子钟设计第10页10寄存器BX,SI,DI的当前数值进行压栈操作进行保护方便下一次的计数,接着要进行现场的恢复(对寄存器CX,AX,DX及标志寄存器进行弹栈操作,并进行开启中断方便下一次中断的到来)。具体子程序设计如下:TIMERPROCFARPUSHCX;保护现场PUSHAX;PUSHDX;PUSHF;POPBX;恢复秒计数寄存器POPSI;恢复分计数寄存器POPDI;恢复时计数寄存器INCBX;秒加一操作MOVAL,80H+40H+0AH;MOVAX,BX;AAD;BCD码调整指令MOVCX,10;DIVCX;AX除以10得当前秒的十位和个位CALLWRITE_DATA;写入秒十位MOVAL,AH;CALLWRITE_DATA;写入秒个位CMPBX,60;比较是否到了60JNZEXIT;不是60跳到EXIT的位置MOVBX,0;秒清0INCSI;分加1MOVAL,80H+40H+08H;MOVAX,SI;AAD;BCD码调整指令MOVCX,10;DIVCX;AX除以10得当前分的十位和个位CALLWRITE_DATA;写入分的十位MOVAL,AH;CALLWRITE_DATA;写入分的个位CMPSI,60;检测分是否到60