8086实验指导书免费.doc
实验一 系统认识实验一、 实验目的掌握TDN86/51教学系统的根本操作二、 实验设备TDN86/51教学实验系统一台三、 实验内容与步骤1 系统认识实验1(1) 程序的输入与修改从3500H内存单元开始建立0-15共16个数据。实验步骤a. 使用串行通讯电缆将实验系统与PC微机相连。b. 将位于线路板右下角的系统状态选择开关拨至86档,开启实验系统。c. 在系统软件所在目录下键入MD86,选择对应串口号,进入集成操作软件环境,出现系统提示符“>。按下F1功能键,进入全屏幕编辑界面,按ALT+F建立新文件NEW,即可开始输入源程序。实验程序与流程如下:STACK SEGMENT STACK;8088宏汇编程序DW 64 DUP(?);定义堆栈段STACK ENDSCODE SEGMENT;定义代码段ASSUME CS:CODESTART:MOV DI,3500H;程序开始设数据区首址MOV CX,0010H;字节数送入CX中MOV AX,0000HSAHFA1:MOV DI,AL;写入一字节INC DI;修改地址指针INC AX;修改数据DAA;十进制调整LOOP A1;未填完转移A2:JMP A2CODE ENDS;代码段结束 END START;程序段结束d. 输入程序后,按F2保存程序规定扩展名为*.asm,使用ALT+X返回集成软件环境。e. 按F2,输入源程序名省略扩展名,系统默认为.asm,对源程序进行汇编,生成目标文件*.obj与错误信息文件*.m。假设给出LST文件名那么生成相应*.lst文件。f. 汇编无误后,按F3输入文件名对汇编生成的*.obj文件进行连接,连接信息显示于屏幕上,生成相应*.exe可执行文件。g. 按F5,输入*.exe可执行文件名,填入程序段地址CS:0000与偏移地址IP:2000,PC开始将程序从磁盘装入到教学系统内存,提示装载完毕后使用U0000:2000命令进行反汇编,检查程序是否正确装入。显示信息键入信息>U20002000 BF0035 MOV DI,3500U2003 B91000 MOV CX,0010Uh. 当发现源程序输入错误或需要调整时,在调试界面下可用A命令来修改,如修改2000句为MOV DI,3500的操作如下:显示信息键入信息>A20000000:2000 MOV DI,35000000:2003(2) 运行程序系统提供了单步运行、设断点运行、连续运行等方式,具体操作如下:a. 单步运行:其操作如下表,每运行一条指令后会显示下一条待执行指令并以蓝底白字显示变化存放器的内容,重复T或按F4键就可一步一步地运行,直至程序结束。b. 连续运行:在“>提示符下键入G=0000:2000在系统默认段地址CS=0000情况下也可直接键入G=2000可连续运行程序,在运行过程中,可通过CTRL+C终止程序运行,返回监控状态;也可通过CTRL+S暂停程序运行,按任意键继续。c. 断点运行:在程序中可用B命令定义断点,系统规定至多定义10个断点,例如:显示信息键入信息>B0: 20211:>上例中定义了2021地址为断点,每次键入GB=0000:2000程序连续运行至断点时,程序中断并显示当前各存放器内容。GB是G命令的扩充,表示含断点连续运行程序,断点仅当系统复位时去除。(3) 内存单元内容的显示:使用D=0000:3500可查看3500H-350FH单元中的内容是否为0-15共16个数。(4) 内存单元内容的修改:假设要修改某一单元内容,可进行如下操作,其中,“空格键用于向待编辑单元的高地址方向移动地址,而“键那么向反方向移动地址;用来响应,就退出E命令。显示信息键入信息>E35000000:35000 00_01space0000:35001 01_Space0000:35002 02_0000:35003 03_>2 系统操作练习2将内存3500H单元开始的0-15共16个数据传递到3600H单元开始的数据区中。实验程序与流程如下:STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODESTART:MOV SI,3500H;建立源地址指针 MOV DI,3600H;建立目标地址指针MOV CX,0008H;字数送入CX存放器中A1:MOV AX,SI;取源数据一字送入AX中MOV DI,AX;将源数据送入目标地址单元中INC SI;修正指针INC SIINC DIINC DIDEC CX;修改循环次数JNZ A1;判断是否传送完毕A2:JMP A2CODE ENDS;代码段结束 END START;程序段结束开始设数据源地址、目的地址、字节数取源数据一字到AX中AX送目标地址单元修改指针传完否?停机NYU实验步骤(1) 输入程序并检查无误,经汇编、连接后装入系统。(2) E3500,在3500-350F单元中分别送入00、01、02。(3) G=0000:2000,运行以上程序,按CTRL+C中断,返回监控。(4) D3600,显示结果:360000 01 02 。实验二 数码转换编程与程序调试一、实验目的1. 掌握不同进制数与编码相互转换的程序设计方法,加深对数码转换的理解。2. 熟悉键盘使用方法。3. 熟悉调试程序的方法二、实验设备TDN86/51教学实验系统一台三、 实验内容与步骤计算机输入设备输入的信息一般是由ASCII码或BCD码表示的数据或字符,CPU一般均用二进制进行计算或其他信息处理,处理结果的输出又必须依照外设的要求变为ASCII码、BCD码或七段显示码等。因此,在应用软件中,各类数制的转换和代码的转换是必不可少的。计算机与外设间的数码转换关系如图2-1所示,数码对应关系如表2-1所示。图2-1 数码转换关系键盘光电机拨码开关数据开关CRT显示打印机多段显示位显示主机二进制ASCII码ASCII码ASCII码ASCII码段码BCD码二进制二进制表2-1 数码对应关系十六进制数BCD码二进制机器码ASCII码七段码共阳共阴00000000030H40H3FH10001000131H79H06H20010001032H24H5BH30011001133H30H4FH40100010034H19H66H50101010135H12H6DH60110011036H02H7DH70111011137H78H07H81000100038H00H7FH91001100139H18H67HA101041H08H77HB101142H03H7CHC110043H46H39HD110144H21H5EHE111045H06H79HF111146H0EH71H1. 将ASCII码表示的十进制数转换为二进制数十进制表示为:1Di代表十进制数1,2,3,9,0;上式转换为:2由式2可归纳十进制数转换为二进制数的方法:从十进制数的最高位Dn开始作乘10加次位的操作,依次类推,那么可求出二进制数的结果。程序流程与参考程序如下:规定:被转换的ASCII码十进制数存放在3500H-3504H单元中,转换结果存在于3510H-3511H单元中。STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODESTART:MOV SI,3500HMOV DI,3510HMOV BX,000AHMOV CX,0004HMOV AH,00HMOV AL,SISUB AL,30HA1:IMUL BXADD AL,SI+01SUB AL,30HINC SILOOP A1MOV DI,AXA2:JMP A2CODE ENDS END START开始定义源、目标地址定义转换位数n加一位ASCII码减30H传完否?N-1CXNYU取第一位ASCII码减去30H乘10存结果并停机实验步骤(1) 输入程序并检查无误,经汇编、连接后装入系统。(2) 在3500-3504H单元存入十进制数12的ASCII码,即E3500,并输入30 30 30 31 32。(3) G=0000:2000,运行以上程序,并用CTRL+C来中断程序,返回监控状态。(4) 用D3510查看结果,应为:3510 0C 00。(5) 反复试几组数,考察程序的正确性。2. 将十进制数的ASCII码转换为BCD码设从键盘输入的五位十进制数的ASCII码已存放在3500H起始的内存单元内,把它转换为BCD码后,再按位分别存入350AH起始的内存单元内。假设输入的不是十进制数的ASCII码,那么对应存放结果的单元内容为“FF。由表2-1可知,一字节ASCII码取其低四位即变为BCD码。实验程序与流程如下:STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODESTART:MOV CX,0005H;循环计数器赋初值MOV DI,3500H;ASCII码首地址A1:MOV BL,0FFH;将错误标志送入BLMOV AL,DI;送ASCII码至ALCMP AL,3AH;比拟AL与3AH JNB A2;不低于3AH那么转A2SUB AL,30H;低于3AH那么取ASCII码低4位 A2;低于30H那么转A2MOV BL,AL;否那么AL内容送入BL,取代FFHA2:MOV AL,BL;结果或错误标志送入ALMOV DI+0AH,ALINC DILOOP A1A3:JMP A3CODE ENDS END START实验步骤(1) 输入程序并检查无误,经汇编,连接后装入系统。(2) 在3500-3504H单元中存放五位十进制数的ASCII码,即:E3500,并输入31 32 33 34 35。(3) G=0000:2000,运行以上程序。(4) 用D3510查看结果,显示结果应为:0000:350A 00 01 02 03 04 05 CC (5) 反复试几组数,考察程序的正确性。四思考题程序2将一个五位十进制数转换为二进制数十六位时,这个十进制数最小可为多少,最大可为多少?为什么?实验三 运算类编程实验一、实验目的1掌握使用运算类指令编程与调试方法。2掌握运算类指令对各状态标志位的影响与其测试方法。二、实验设备TDN86/51教学实验系统一台三、实验内容与步骤8086/8088指令系统提供了实现加、减、乘、除运算的根本指令,可对表3-1所示的数据类型进行算术运算。表3-1 数据类型算术运算表数 制二进制BCD码带符号无符号组合非组合运算符+ - ×+ -+ - ×操作数字节、字、多精度字节二位数字字节一位数字开始被减数与减数首址SI结果首址DI数据位数CXNYU标志存放器清0SI ALAL-SI+2AL高4位置0DAS调整标志存放器内容入栈标志存放器内容出栈存结果修改SI、DI结束CX=0?1十进制数的BCD码减法运算计算下X-Y=Z,其中,X、Y、Z均为BCD码。实验程序与流程如下:STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSDATA SEGMENTXDW ?;请在此处给X赋值YDW ?;请在此处给X赋值ZDW ?DATAENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AH,00HSAHFMOV CX,0002HMOV SI,OFFSET XMOV DI,OFFSET ZA1: MOV AL,SI SBB AL,SI+02HDASPUSHF00040201X350035013502350335103511地址存储器ZYAND AL,0FHPOPFMOV DI,ALINC DIINC SILOOP A1A2:JMP A2CODE ENDSEND START实验步骤(1) 输入实验程序并检查无误,经汇编,连接后装入系统。设CS:0000H,IP:2000H(2) 用U0000:2000查看MOV AX,XXXX(DATA)语句,即得到数据段段地址DS:XXXX。用E命令EXXXX:0000给X,Y赋值存入40和12的BCD码:00 04 02 01。(3) G=0000:2000,运行以上程序。(4) DXXXX:0004,显示计算结果:08 02 CC 。(5) 反复试几组数,考察程序的正确性。四、 思考题 编写两个数值长度不等的BCD码相加的程序。实验四 分支程序设计实验一、实验目的1掌握分支程序的结构。2掌握分支程序的设计、调试方法。二、实验设备TDN86/51教学实验系统一台三、实验内容与步骤设计一数据块间的搬移程序。设计思想:程序要求把内存中一数据区称为源数据块传送到另一存储区成为目的数据块。源数据块和目的数据块在存储中可能有三种情况,如图4-1所示。源数据块目的数据块FFFFFH00000Ha00000HbFFFFFH源数据块目的数据块00000HcFFFFFH目的数据块源数据块图4-1对于两个数据块别离的情况,如图4-1(a),数据的传送从数据块的首址开始,或者从数据块的末址开始均可。但对于有局部重迭的情况,那么要加以分析,否那么重叠局部会因“搬移而遭破坏,可以得到以下结论:当源数据块首址>目的块首址时,从数据块首地址开始传送数据。当源数据块首址<目的块首址时,从数据块末地址开始传送数据。实验程序与流程如下:STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE开始DI SISI源数据块首址DI目的数据块首址CX搬家字节数SISI+CX-1DIDI+CX-1DI SISISI-1DIDI-1结束SI>DI?<>SISISI+1DIDI+1YUCXCX-1CX=0?NUYUCXCX-1CX=0?NUSTART:MOV CX,0010H;取搬家字节数16个字节MOV SI,3100H;取源块首址MOV DI,3200H;取目的块首址 CMP SI,DI;从首址开始?JA A2;是,转移ADD SI,CX;否,以末地址开始搬家ADD DI,CXDEC SIDEC DIA1:MOV AL,SI;从首址开始搬家MOV DI,ALDEC SIDEC DIDEC CXJNE A1JMP A3A2:MOV AL,SIMOV DI,ALINC SIINC DIDEC CXJNE A2A3:JMP A3CODE ENDS END START实验步骤(1) 按实验流程图设计编写实验程序。(2) 输入实验程序并检查无误,经汇编,连接后装入系统。设CS:0000H,IP:2000H(3) 用E命令在以SI为起址的单元中填入16个数。(4) G=0000:2000,运行以上程序。(5) 用D命令查看DI为起址的单元中的数据是否与SI单元中数据相同。(6) 试改变SI、DI的取值,观察在三种不同的数据块情况下程序的运行。四、思考题为什么当源数据块首址>目的块首址时,应从数据块首址开始传送数据;而当源数据块首址<目的块首址时,应从数据块末地址开始传送数据?实验五 循环程序设计一、实验目的1加深对循环结构的理解。2掌握循环结构程序设计的方法。3熟练掌握调试循环程序的方法。二、实验设备TDN86/51教学实验系统一台三、实验内容与步骤1编制程序使S=1+2×3+3×4+4×5+N(N+1),直到N(N+1)项大于200为止。实验程序与流程如下:STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODESTART:MOV DX,0001HMOV BL,02HA1:MOV AL,BLINC BLMUL BLADD DX,AXCMP AX,00C8HJNA A1A2:INT 03HCODE ENDS END START开始1DX2BLNBLALBL+1BLAL*BLAXDX+AXDXAX>200?结束YU实验步骤(1) 按流程图编制实验程序。(2) 输入实验程序并检查无误,经汇编,连接后装入系统。设CS:0000H,IP:2000H(3) G=0000:2000,运行以上程序。(4) RAX,显示结果。2求某数据区内复数的个数设数据区的第一单元存放区内单元数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有数据中但凡符号位为1的数据的个数累加起来,即得区内所包含负数的个数。实验程序与流程如下:STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODESTART:MOV DI,3000H;设数据区首址MOV CL,DI;送数据个数XOR CH,CH;CH清0MOV BL,CH;BL清0INC DI;指针指向第一个数据A1:MOV AL,DITEST AL,80H;数据首位是否为1JE A2INC BL;负数个数累加A2:INC DILOOP A1MOV DI,BL;存结果INT 03HCODE ENDS END START数据首位=1?NU开始CH、BL置0数据个数CXYU数据区首址送DIDI增1BL+1BL存结果结束CX=0?DI增1YUNU实验步骤(1) 按流程图编制实验程序。(2) 输入实验程序并检查无误,经汇编,连接后装入系统。设CS:0000H,IP:2000H(3) E3000输入数据如下:300006数据个数300112、88、82、90、22、33。G=0000:2000,运行以上程序。4D3007,显示结果03。(5) 反复试几组数,考察程序的正确性。四思考题修改程序2,使其能分别求出数据区中正数、零和负数的个数。实验六 子程序设计实验开始数据首址SI序列的字节个数CX调用求最大最小值子程序结束一、实验目的1学习子程序的定义和调用方法。2掌握子程序、子程序的嵌套、递归子程序的结构。3掌握子程序的程序设计、编制与调用。二、实验设备TDN86/51教学实验系统一台三、实验内容与步骤1求无符号字节序列中的最大值和最小值设有一字节序列,其存储首址为3000H,字节数为08H。利用子程序的方法编程求出该序列中的最大值和最小值。实验程序与流程如下:STACKSEGMENT DW 64 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODESTART:MOV SI,3000HMOV CX,0008HCALL branchINT 03Hbranch:JCXZ A4PUSH SIPUSH CXPUSH BXMOV BH,SIMOV BL,BHA1:LODSBCMP AL,BHE A2MOV BH,ALJMP A3A2:CMP AL,BLJAE A3MOV BL,ALA3:LOOP A1MOV AX,BXPOP BXPOP CXPOP SIA4:RETCODE ENDS END START主程序子程序子程序入口CX=0?YUSI、CX、BX入栈SI ALSI+1SIALBHALBHALBLALBLCX-1CXCX=0?返回YUNUNUNUYUNU实验步骤(1) 根据流程图编写出相应的程序。(2) 输入实验程序并检查无误,经汇编,连接后装入系统。设CS:0000H,IP:2000H(3) E30000,输入8个字节的数据:D9、07、8B、C5、EB、04、9D、F9。(4) G=0000:2000,运行以上程序。(5) RAX,显示结果,AX=F9 04,AH中为最大值,AL中为最小值。程序说明:该程序使用BH和BL暂存现行的最大值和最小值,开始时初始化成首字节的内容,然后进入循环操作,从字节序列中逐个取出一个字节的内容与BH和BL比拟,假设取出的字节内容比BH的内容大或比BL的内容小,那么修改之。当循环操作结束时,将BH送AH,将BL送AL,作为返回值,并恢复BX原先内容。四、思考题1假设求有符号字节型序列中的最大值和最小值,如何修改程序?2子程序执行完毕后要返回程序调用,它返回调用程序的什么地方,是靠什么指令、什么方法返回的?实验七 存储器扩展实验一、实验目的1学习掌握存储器扩展方法和存储器读/写。2了解6264RAM特性。二、实验设备TDN86/51教学实验系统一台三、实验内容与步骤一系统中的存储器扩展单元16264RAM介绍静态RAM是由MOS管组成的触发器电路,每个触发器可以存放1位信息。只要不掉电,所存储的信息就不会丧失。因此,静态RAM工作稳定,不需要外加刷新电路,使用方便。但一般SRAM的每一个触发器是由6个晶体管组成,SRAM芯片的集成度不会太高,目前较常用的有62162K*8位,62648K*8位,6225632K*8位。6264RAM有8192个存储单元,每个单元为8位字长。6264的引脚如图7-1所示,WE、OE、CE1、CE2的共同作用决定了芯片的运行方式,如表7-1所示。A0A12地址线D0D7双向数据线CE1片选线1CE2片选线2WE写允许线OE读允许线表7-1 6264运行方式WECE1CE2OE方式D0D7×H××未选中掉电高阻××L×未选中掉电高阻HLHH输出禁止高阻HLHL读OUTLLHH写INLLHL写IN2系统实验单元中的6264线路如图7-1所示图7-1 6264引脚与实验单元中的6264二存储器扩展实验按图7-2所示实验线路编写程序,将6264直接挂至总线进行存储器扩展。图7-2 实验线路实验程序如下:STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSDATA SEGMENTTABLE DB 0AH DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA;程序装入后用U命令查看此语句可MOV DS,AX;知数据段地址,以便于用E命令修MOV CX,000AH;改变量参数MOV BX,OFFSET TABLEMOV SI,0000HA1:MOV AL,BXPUSH DSPUSH AXMOV AX,2000HMOV DS,AXPOP AXMOV SI,ALPOP DSINC SIINC BXLOOP A1A2:JMP A2CODE ENDS END START实验步骤(1) 按图7-2所示实验线路连接。(2) 输入实验程序并检查无误,经汇编,连接后装入系统。(3) 用U命令查看程序第一、二句找出原数据区段地址XXXX,用E命令在XXXX:0000XXXX:0009中分别放入10个数。(4) 运行以上程序。(5) 用D命令检查2000:00002000:0009单元内容是否与原数据区放入的10个数一致。实验八 中断特性与8259应用编程实验一、实验目的1认识TDN86/51系统的中断特性。2掌握8259中断控制器的工作原理。3掌握8259可编程中断控制器的应用编程。4学习在接口实验单元上构造连接实验电路的方法。二、实验设备TDN86/51教学实验系统一台 排线、导线假设干三、实验内容与步骤一系统中的8259A芯片1系统中的8259A芯片系统中的8259A芯片工作于单片方式,但可由用户扩展成级连方式。其线路如图8-1所示。图中的圈点表示此为排针形式引出脚。注:以下线路图中的圈点均为排针形式引出脚以后不再另作说明。图8-1 系统中的8259A芯片系统启动时,8259A被初始化,其初始化是通过系统中的初始化程序设置初始化命令字ICW来实现的。系统初始化时,规定IRQ0和IRQ4中断源分别提供应实时时钟和与PC微机联机的串口通讯,用户可以使用其余的中断源。在进入监控后,只有IRQ4中断源处于开启状态,其他中断源被屏蔽了。中断矢量地址与中断号之间的关系如下表。中断序号01234567功能调用08H09H0AH0BH0CH0DH0EH0FH矢量地址20H|23H24H|27H28H|2BH2CH|2FH30H|33H34H|37H38H|3BH3CH|3FH说明实时时钟可用可用可用串口1可用可用可用2接口实验单元中的级联实验用8259A芯片除系统中的8259A芯片外,在接口实验单元中专门提供了另一片8259A芯片,以便进行8259连接实验。其线路如图82所示。3 接口实验单元中的R-S触发器电路,如图8-3所示。二实验内容18259应用实验1按图8-4所示实验线路编写程序,使每次响应外部中断IRQ7时,显示字符“7”,中断10次后,程序退出。实验程序与流程如下: 图8-2 接口实验单元中的级联用8259A芯片线路图8-3 R-S触发器电路图8-4 实验1线路STACKSEGMENT DW 64 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODESTART:PUSH DSMOV AX,0000HMOV DS,AXMOV AX,OFFSET IRQ7ADD AX,2000HMOV SI,003CHMOV SI,AXMOV AX,0000HMOV SI,003EHMOV SI,AXCLIPOP DS;保存数据段;数据段清零;取中断程序入口地址相对地址;加装载时IP=2000H地址绝对地址;填8259中断7中断矢量;填偏移量矢量;段地址CS=0000H;填段地址矢量;关中断;弹栈中断入口显示“7CX=CX-1关中断返回IRQ7中断效劳处理IN AL,21HAND AL,7FHOUT 21H,ALMOV CX,000AHA1:CMP CX,0000HJNZ A2IN AL,21HOR AL,80HOUT 21H,ALSTIHLTA2:STIJMP A1IRQ7:MOV AX,0137HINT 10HMOV AX,0120HINT 10HDEC CXMOV AL,20HOUT 20H,ALCLIIRET CODE ENDS END START;读8259中断屏蔽字;开8259中断7; 读8259中断屏蔽字;开8259中断7;中断程序入口开始修改IRQ7中断矢量修正IMR,使IRQ7中断允许CX=000AHCX=0?开中断屏蔽IRQ7开中断停机YN主程序实验步骤(1) 按图8-4连接实验线路。(2) 输入实验程序并检查无误,经汇编,连接后装入系统。设CS:0000H,IP:2000H(3) G=0000:2000,运行以上程序。注意:程序中8259中断矢量地址为绝对地址,已定义为段地址CS=0000H,偏移量地址IP=2000H,故装载时一定按此填入CS和IP地址,后面实验不再重述。(4) 重复按KK2微动开关,显示屏上应用“7来响应,直到按10次后,系统处于停机状态,用CTRL+C返回监控。28259应用实验2图8-5 实验2线路按图8-5所示实验线路,编写程序,完成下面的要求:当无中断请求时,执行主程序,延时显示“main,假设有中断请求,那么执行其中断效劳程序,显示该中断号“6或“7;假设正在执行较低级的中断效劳程序,那么允许比它优先级高的中断被响应IRQ6>IRQ7。主程序在执行过程中,每显示一个“main,空一格。实验程序如下:STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSDATA SEGMENTTABLE DB 4DH,41H,49H,4EH,20H,00HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXPUSH DSMOV AX,0000HMOV DS,AXMOV AX,OFFSET IRQ6ADD AX,2000HMOV SI,0038HMOV SI,AXMOV AX,0000HMOV SI,003AHMOV SI,AXMOV AX,OFFSET IRQ7ADD AX,2000HMOV SI,003CHMOV SI,AXMOV AX,0000HMOV SI,003EHMOV SI,AXPOP DS MOV AL,13HOUT 20H,ALMOV AL,08HOUT 21H,ALMOV AL,09HOUT 21H,ALMOV AL,3DHOUT 21H,ALSTIA1:MOV CX,0007HMOV AX,010DHINT 10HA2:MOV AH,06HMOV BX,OFFSET TABLEINT 10HCALL DALLYLOOPA2JMP A1IRQ6:STICALL DALLYMOV AX,0136HINT 10HMOV AL,20HOUT 20H,ALIRETIRQ7: STICALL DALLYMOV AX,0137HINT 10HMOV AL,20HOUT 20H,ALIRETDALLY:PUSH CXPUSH AXMOV CX,0040HA3:MOV AX,056CHA4:DEC AXJNE A4LOOPA3POP AXPOP CX RETCODEENDS