电子表实验报告
中南大学
微机原理课程设计报告 题 目 电子表设计
专业班级 通信
姓 名
学 号
指导老师
目 录
一、 概述
二、系统分析与设计
2.1设计内容
2.2实验器材
2.3电路原理与主要芯片功能
2.3.1 电路原理
2.3.2 8253脉冲发生模块
2.3.3 8259计时运算模块
2.3.4 8279显示模块
三、程序流程图
四、运行结果与实验改进
五、心得体会
六、参考文献
七、实验源程序及注解
一、概述
通过一个学期对《微机原理及接口技术》学习,掌握的知识还停留在理论的上。但是这是一门实践性较强的课程,让学生在学完该课程之后,进行一次课程设计,使学生将课堂所学的知识和实践有机结合起来,初步掌握计算机应用系统设计的步骤和接口设计的方法,提高分析和解决实际问题的能力。
通过设计实践, 培养学生查阅专业资料,工具书或参考书, 了解有关工业标准,掌握现代设计手段和软件工具,并能以图纸和说明书表达设计思想和结果的能力。
通过设计,不但要培养和提高学生解决工程具体问题, 动脑动手的技术工作能力,而且还要逐步建立科学正确的设计和科研思想,培养良好的设计习惯,牢固树立实事求是和严肃认真的工作态度。具体要求如下:
● 1、掌握中断工作原理,定时计数原理,并行通信原理,A/D和D/A工作原理。
● 2、 掌握8259芯片,8253芯片,8279芯片功能,结构。 ● 3、掌握8259芯片,8253芯片,8279芯片的编程。
● 4、能运用所提到的芯片,设计系统并进行程序开发,满足用户需求。
● 5、掌握实验系统的操作方法,对实验软件熟练操作。
二、系统分析与设计
1、设计内容
本次课程设计的内容为电子时钟的设计与实现,主要由脉冲发生模块、计时运算模块和显示模块三大部分组成。用8259芯片的IRQ3和IRQ7中断,其中IRQ3中断接8259芯片的计数器2输出端,中断请求循环20次为1秒,中断服务程序调用数码管显示子程序,显示转换子程序以及时间更新子程序。
2、实验器材
(1)PC 微机一台
用于对程序的编译测试等,同时还需要对实验设备进行控制,提供整个程序的运行平台,并且收集和释放硬件信号,实现程序功能。
(2)微机原理实验箱一台
本次微机原理与接口技术实验采用的设备是武汉恒科电子教学仪器有限公司的超想—3000TB 综合实验/仿真系统,提供8259、8253、8279等必要的芯片,配合PC 机构成实验环境。
(3)导线若干条
用于电路和芯片之间的连接
3、电路原理与主要芯片功能
(一)电路原理
首先利用程序规定时、分、秒的起始时间为零。然后通过8253计时器分频,并将分得的频率接通8259中断控制器,进而通过CPU 响应可屏蔽中断达到按秒计时的效果。
具体做法是将8个七段管显示器接到8279键盘/数码管显示芯片上,以此来控制七段管显示器的位操作以及段操作。并为之在代码段开辟一处空间,专门存放将要显示的数位代码。8253计时器将由PC 机给定的频率加以分频,得到的新频率加到8259中断控制器的中断请求输入端。主程序为此可屏蔽中断设置专门的中断向量码。CPU 获取此中断向量码后转向待解决的程序进行操作。而这个程序便是整个主程序的心脏。通过它将使电子钟的显示时间以秒为进位,达到秒、分、时的增加。
电路模型图如下:
(二)8253脉冲发生模块
8253 是Intel 公司生产的可编程定时计数器。8253具有以下基本功能:
●有3 个独立的16 位计数器;
●每个计数器可按二进制或十进制(BCD )计数; 每个计数器可编程工作于6 种不同工作方式;每个计数器允许的最高计数频率为10MHz ;
●8253有读回命令,除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容。
●计数脉冲可以是有规律的时钟信号,也可以是随机信号。计数初值公式为n=fCLKi ÷fOUTi ,其中fCLKi 是输入时钟脉冲的频率,fOUTi 是输出波形的频率。
本次实验选择8253在工作方式3下:方波发生器
当装入初值后,在GATE 上升沿启动计数,OUT 输出高电平; 当计数完成一半时,OUT 输出低电平。
设计中8253芯片接1MHz 的时钟脉冲,经计数器2分频后产生20Hz 的输出频率,接8259芯片的可屏蔽中断IRQ3,经过20次循环后产生秒脉冲。
8253初始化
MOV DX,004BH ;写入方式控制端口4BH
MOV AL,0B6H ;方式控制字,10110110B ,选择计数器2,工作方
式3
OUT DX,AL
MOV DX,004AH
MOV AL,50H
OUT DX,AL ;写入低8位字节计数初值,写入计数器2
MOV AL,0C3H
OUT DX,AL ;写入高8位字节计数初值
8253连接1M Hz时钟脉冲,故工作方式3方波发生器波周期为0C350H*1/1000000=1/20s
(三)8259计时运算模块
中断控制器8259是Intel 公司专为控制优先级中断而设计开发的芯片。它将中断源优先级 排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A 进行编程,就可以管理8 级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编 程来设定。同时,在不需增加其他电路的情况下,通过多片8259A 的级连,能构成多达64 级的矢量中断系统。它的管理功能包括:
1)记录各级中断源请求;
2)判别优先级,确定是否响应 和响应哪一级中断;
3)响应中断时,向CPU 传送中断类型号。
8259的命令共有7 个,一类是初始化命令字,另一类是操作命令。8259A 的编程就是根据 应用需要将初始化命令字
ICW1-ICW4 和操作命令字OCW1- OCW3 分别写入初始化命令寄存器 组和操作命令寄存器组。
本次设计中用到了8259芯片的IRQ3和IRQ7中断,其中IRQ3中断接8253芯片的计数器2输出端,中断请求循环20次为一秒,中断服务程序调用数码管显示子程序、显示转换子程序以及时间更新子程序。
8259初始化
MOV AX,0H
MOV DS,AX
CALL WRINTVER ;调用中断向量表
MOV AL,13H ;00010011, 边沿触发,写ICW1, 单片,需要写ICW4 MOV DX,INTPORT1
OUT DX,AL
MOV AL,08H ;写ICW2,中断向量号
MOV DX,INTPORT2
OUT DX,AL
MOV AL,0BH ;写ICW4,设置工作方式,00001011,普通EOI 方式 OUT DX,AL
MOV AL,0F7H ;写OCW1
OUT DX,AL
设置中断向量表
WRINTVER: MOV AX,0H
MOV ES,AX ;获取中断入口地址
MOV DI,002CH ; 中断地址,00001000(08H )+3=00001011*4即
00101100(2CH )
LEA AX,INTQ0
STOSW
MOV AX,CS
STOSW
MOV DI,003CH
LEA AX,INTQ7
STOSW
MOV AX,CS
(四)8279键盘/数码管模块
8279A 是一种通用的可编程键盘/显示器接口器件,可对64个开关矩阵组成的键盘进行自动扫描,接收键盘上的输入信息,存入内部的FIFO 寄存器,并在有键输入时,CPU 请求中断。8279A 内部还有一个16×8的显示缓冲器,能对8位或16位LED 自动扫描, 使显示缓冲器的内容在LED 上显示出来。
8279初始化
MOV DX,CONTPORT ;8279初始化
MOV AL,00H
OUT DX,AL ; 键盘显示模式
MOV AL,2AH
OUT DX,AL ;8279 时钟设置
MOV AL,0d0h
OUT DX,AL ;8279 清零设置
MOV AL,90h
OUT DX,AL ;写FIFO 命令字
三、程序流程图
主程序的流程图是对整个程序的逻辑的图象表示。首先是设置8253、8279、8259的各个端口地址。接着初始化各个芯片,开始计时,并通过8259中断控制时间的正确显示。在整个过程中都在检测是否有铵键响应。有则停止,没有则返回继续执行。
四、运行结果与实验改进
(一)运行结果
8253的CLK2接1MHz ,OUT2接8259的IRQ3,8279的a-h 和BT0-BT7分别接数码管的a-h 和BT0-BT7。 连线及运行结果如下图所示:
(二)实验改进
1、在实验中,我发现中断显示的并不是精确的1秒,于是尝试修改计数初值和中断循环次数,但都没有明显效果,最后发现采用8086主板上的8253定时计数器可以获得精确的秒脉冲。 2、当计数器接入一个高电平,没有了边沿触发,可以暂停电子表计时。
3、实验中,我尝试加入键盘设初值功能,先是采用8259中断控制的方法,将设初值作为一个中断服务程序,但在调试时发现始终不能成功,最后发现是实验箱中的8259芯片只能使用IRQ3和IRQ7两个中断。于是之后我试图采用8255查询中断的方法实现,程序如下:
8255端口设置:
IOB_8255 EQU 0021H ;8255B 口地址
IOC_8255 EQU 0022H ;8255C 口地址
IOC0NT_8255 EQU 0023H ;8255控制端口地址 8255初始化:
MOV DX,IOCONT_8255 ;8255初始化
;A 口工作在方式1,输入,C 口低4位输出
键盘输入子程序:
KEBORD: CLI ;利用键盘和8279设数码管显示初值
MOV CX,6 MOV DI,0
WREP: CALL DISP MOV DX,CONTPORT IN AL,DX AND AL,07H JZ WREP MOV DX,DATAPORT
IN AL,DX MOV BL,AL MOV BH,0H
MOV SI,OFFSET DATA12 KEY0: MOV AL,[SI] CMP AL,BL JNE KEY5 JMP KEY4 KEY5: ADD SI,01H ADD BH,01H CMP BH,9H JNBE KEY0 JMP KEY4
MOV BYTE PTR BUFER[DI],BH INC DI LOOP WREP
KEY4: MOV BUFER,BH MOV DI,0 MOV CL,4
MOV AL,BYTE PTR BUFER[DI] SHL AL,CL
AND AL,F0H
OR BYTE PTR DS:[DATA7],AL INC DI
MOV AL, BYTE PTR BUFER[DI] AND AL,0FH
OR BYTE PTR DS:[DATA7],AL INC DI MOV BUFER,BH MOV DI,0 MOV CL,4
MOV AL, BYTE PTR BUFER[DI] SHL AL,CL
AND AL,F0H
OR BYTE PTR DS:[DATA8],AL INC DI
MOV AL, BYTE PTR BUFER[DI] AND AL,0FH
OR BYTE PTR DS:[DATA8],AL INC DI MOV BUFER,BH MOV DI,0 MOV CL,4
MOV AL, BYTE PTR BUFER[DI]
SHL AL,CL AND AL,F0H
OR BYTE PTR DS:[DATA9],AL INC DI
MOV AL, BYTE PTR BUFER[DI] AND AL,0FH
OR BYTE PTR DS:[DATA9],AL INC DI 数码管显示子程序:
DISP PROC NEAR DISP0: MOV DX,CONTPORT IN AL,DX AND AL,80H JNZ DISP0
MOV SI,OFFSET BUFER MOV CX,6H
DISP1: MOV BX,OFFSET DATA2 CLD LODSB XLAT
MOV DX,DATAPORT
OUT DX,AL LOOP DISP1 RET
DISP ENDP OK: RET
五、心得体会
经过几周努力,在指导老师和同学的帮助下,终于如期完成了该电子时钟的课程设计。当然在课程设计的过程中遇到了许多问题,但是经过查阅有关资料和向老师、同学请教后,还是一一解决了。
首先,通过这次课程设计使使我在课堂中学到的东西充分的融入到实践当中。我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
其次,通过本次设计,我系统的了解了时钟的设计流程,尤其是硬、软件的设计方法,掌握了显示电路的基本功能及编程方法,掌握了显示电路的一般原理。开拓了思路,锻炼了实践动手能力,提高了分工协作能力和分析问题,解决问题的能力,达到了本次课程设计的目的。
最后,通过该课程设计,我进一步的熟悉了计数器/定时器8253及中断控制器8259处理器程序的编程方法的编程原理和7
段LED 数码管显示器的工作原理,为以后独立的设计系统提供了丰富的实践经验。以前对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性上都有了很大程度的提高。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
本次课程设计完成了实时时钟的设计到实现的全部过程,结果满足设计要求,设计主要用到了8253,8259和8257三个芯片,程序也比较长比较麻烦,同时也遇到了不少困难。系统设计的开始几天的时间,没有什么大的进展,仅仅是初始界面就调试了很长时间才成功,当8253定时/计数器来做其中的秒定时模块时,因为8253所能提供的信号的周期是毫秒级的,因此必须通过软件的方法在运算模块中设置一个统计中断次数的变量,并且这一变量必须事先在内存里开辟存储单元,所以就要求在写程序时就要有明确的思路。关于显示模块和对时模块,在了解LED 、8259、8253的功能和用法后,问题很容易解决。以后的几天的时间开始调中断程序,程序中一旦有了中断,调试就困难了,调中断调了好几天,难度挺大的,任何一个初始化的失误都可能使你的程序不正常,在多次调试之后,终于完成了该部分的调试工作。
通过4次的课程设计时间,课程设计的基本目的达到了。另外还有很多其它有益的地方。本系统完成了电子时钟的基本功能。利用8253定时器从0开始进行计时,将计时的结果显示在数码管上。每隔1秒,秒钟个位计时一次;到10秒,秒钟十位计时一次;到60秒,分钟个位计时一次;到10分,分钟十位计时一次;到60分,时钟个位计时一次;到10时,时钟十位计时一次。数字变动信息通过8279送数码管显示。期间通过8259中断控制器实现秒到分的转变和分到时的转变,准确实现了计时。
总之,这次课程设计,首先,让我学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。通过实践,进一步加深了对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。
六、参考文献
[1] IBM-PC汇编语言程序设计 沈美明、温冬禅,清华大学出版社
[2]梁建武 《微机原理与接口技术》 中国水利水电出版社
[3]余锡存、曹国华 《汇编语言、微机原理及接口技术》[M] 陕西:西安电子科技大学出版社,2000.7
七、实验源程序及注解
CODE SEGMENT ASSUME CS:CODE
INTPORT1 EQU 0020H 器)
INTPORT2 EQU 0021H 器)
INTQ3 EQU INTERUPT3 INTQ7 EQU INTERUPT7 CONTPORT EQU 00DFH DATAPORT EQU 00DEH IOA_8255 EQU 0020H DATA1 EQU 0500H 地址
DATA2 EQU 0508H DATA3 EQU 0518H DATA4 EQU 0520H DATA5 EQU 0528H 数
DATA6 EQU 0529H ;8259地址1(命令寄存;8259地址 2(状态寄存;中断程序3入口地址 ;中断程序7入口地址 ;8279命令状态口地址 ;8279键盘显示数据地址;8255A 口地址 1/20s定时中断次数
;错误信息显示缓冲区起始;显示译码表起始地址;初始状态显示缓冲区;时间显示缓冲区起始地址;存放已重新刷新数码管个;存放
DATA7 EQU 052AH ;时 DATA8 EQU 052BH ;分 DATA9 EQU 052CH ;秒
DATA10 EQU 052EH ;等待更新的显示区内的地址
DATA12
BUFER DB 0,0,0,0,0,0 ORG 1800H START: TINT1: CALL FORMAT CLD
MOV DX,CONTPORT MOV AL,00H
OUT DX,AL ;
MOV AL,2AH
OUT DX,AL ;8279 MOV AL,0d0h
OUT DX,AL ;8279 MOV AL,90h
OUT DX,AL ; EQU 0532H JMP TINT1
;8279初始化 键盘显示模式 时钟设置 清零设置 写FIFO 命令字
MOV DX,004BH ;设置8253工作在计数器2,工作
方式3
MOV AL,0B6H OUT DX,AL MOV DX,004AH
MOV AL,50H OUT DX,AL MOV AL,0C3H OUT DX,AL MOV SI,DATA3 CALL LEDDISP
MOV AX,0H MOV DS,AX CALL WRINTVER MOV AL,13H MOV DX,INTPORT1 OUT DX,AL MOV AL,08H MOV DX,INTPORT2 OUT DX,AL
0C350H ;8259初始化 ;设置初值为
MOV AL,0BH OUT DX,AL MOV AL,0F7H OUT DX,AL WAITING: STI MOV DX,IOA_8255 IN AL,DX TEST AL,01H JNZ KEYBORD
JMP WAITING
WRINTVER: MOV AX,0H MOV ES,AX MOV DI,0020H LEA AX,INTQ0 STOSW
MOV AX,CS STOSW
MOV DI,002CH LEA AX,INTQ3 STOSW
MOV AX,CS
;获取中断入口地址
STOSW
MOV DI,003CH LEA AX,INTQ7 STOSW
MOV AX,CS STOSW RET
KEBORD: CLI ; 利用键盘和8279设数码管显示初值 MOV CX,6 MOV DI,0
WREP: CALL DISP MOV DX,CONTPORT IN AL,DX AND AL,07H JZ WREP MOV DX,DATAPORT IN AL,DX MOV BL,AL MOV BH,0H
MOV SI,OFFSET DATA12
KEY0: MOV AL,[SI] CMP AL,BL JNE KEY5 JMP KEY4
KEY5: ADD SI,01H ADD BH,01H CMP BH,9H JNBE KEY0 JMP KEY4
MOV BYTE PTR BUFER[DI],BH INC DI LOOP WREP
KEY4: MOV BUFER,BH MOV DI,0 MOV CL,4
MOV AL,BYTE PTR BUFER[DI] SHL AL,CL
AND AL,F0H
OR BYTE PTR DS:[DATA7],AL
INC DI
MOV AL, BYTE PTR BUFER[DI] AND AL,0FH
OR BYTE PTR DS:[DATA7],AL INC DI MOV BUFER,BH MOV DI,0 MOV CL,4
MOV AL, BYTE PTR BUFER[DI] SHL AL,CL
AND AL,F0H
OR BYTE PTR DS:[DATA8],AL INC DI
MOV AL, BYTE PTR BUFER[DI] AND AL,0FH
OR BYTE PTR DS:[DATA8],AL INC DI
MOV BUFER,BH MOV DI,0 MOV CL,4
MOV AL, BYTE PTR BUFER[DI]
SHL AL,CL AND AL,F0H
OR BYTE PTR DS:[DATA9],AL INC DI
MOV AL, BYTE PTR BUFER[DI] AND AL,0FH
OR BYTE PTR DS:[DATA9],AL INC DI
INTERUPT3: CLI MOV AL,DS:[DATA6] INC AL
MOV DS:[DATA6],AL CMP AL,14H JC PLAY
MOV BYTE PTR DS:[DATA6],00H MOV SI,DATA4 CALL LEDDISP CALL NEWTIME CALL CONVERSALL PLAY: MOV AL,20H MOV DX,INTPORT1
;记录1/20s定时中断的次数
OUT DX,AL STI IRET
INTERUPT7: C LI ;处理异常中断 MOV SI,DATA1 CALL LEDDISP MOV AL,20H MOV DX,INTPORT1 OUT DX,AL IRET
LEDDISP: MOV AL,90H MOV DX,CONTPORT OUT DX,AL MOV CX,08H
MOV BYTE PTR DS:[DATA5],07H LED1: ; CMP BYTE PTR DS:[DATA5],00H ; JNA LED2
MOV BL,DS:[DATA5] MOV BH,0H MOV AL,CS:[BX+SI]
MOV DX,DATAPORT OUT DX,AL
SUB BYTE PTR DS:[DATA5],01H ; JNZ LED1 LOOP LED1 LED2:
FORMAT: MOV BX,0 MOV WORD PTR DS:[BX+DATA1],5050H ADD BX,2
MOV WORD PTR DS:[BX+DATA1],0079H ADD BX,2
MOV WORD PTR DS:[BX+DATA1],0000H ADD BX,2
MOV WORD PTR DS:[BX+DATA1],0000H ADD BX,2
MOV WORD PTR DS:[BX+DATA1],063FH ADD BX,2
MOV WORD PTR DS:[BX+DATA1],4F5BH ADD BX,2
MOV WORD PTR DS:[BX+DATA1],6D66H
RET ;初始化数码管的显示
ADD BX,2
MOV WORD PTR DS:[BX+DATA1],077DH ADD BX,2
MOV WORD PTR DS:[BX+DATA1],6F7FH ADD BX,2
MOV WORD PTR DS:[BX+DATA1],7C77H ADD BX,2
MOV WORD PTR DS:[BX+DATA1],5E39H ADD BX,2
MOV WORD PTR DS:[BX+DATA1],7179H ADD BX,2
MOV WORD PTR DS:[BX+DATA1],3F3FH ADD BX,2
MOV WORD PTR DS:[BX+DATA1],3F40H ADD BX,2
MOV WORD PTR DS:[BX+DATA1],403FH ADD BX,2
MOV WORD PTR DS:[BX+DATA1],3F3FH ADD BX,2
MOV WORD PTR DS:[BX+DATA1],3F3FH
MOV WORD PTR DS:[BX+DATA1],3F40H ADD BX,2
MOV WORD PTR DS:[BX+DATA1],403FH ADD BX,2
MOV WORD PTR DS:[BX+DATA1],3F3FH
MOV BYTE PTR DS:[DATA6],00D MOV BYTE PTR DS:[DATA7],00D MOV BYTE PTR DS:[DATA8],00D MOV BYTE PTR DS:[DATA9],00D MOV WORD PTR DS:[DATA10],DATA4 MOV BX,0
MOV WORD PTR DS:[BX+DATA12],2B23H ADD BX,2
MOV WORD PTR DS:[BX+DATA12],3B33H ADD BX,2
MOV WORD PTR DS:[BX+DATA12],2A22H ADD BX,2
MOV WORD PTR DS:[BX+DATA12],3A32H ADD BX,2
MOV WORD PTR DS:[BX+DATA12],2921H
31
MOV WORD PTR DS:[BX+DATA12],3931H ADD BX,2
MOV WORD PTR DS:[BX+DATA12],2820H ADD BX,2
MOV WORD PTR DS:[BX+DATA12],3830H RET
CONVERS1: MOV BH,0H
AND AL,0FH
MOV BL,AL
MOV AL,CS:[BX+DATA2]
RET
CONVERS2: PUSH AX
CALL CONVERS1
MOV BX,WORD PTR DS:[DATA10] MOV DS:[BX],AL
ADD WORD PTR DS:[DATA10],01H POP AX
PUSH CX
MOV CL,4H
32
POP CX
CALL CONVERS1
MOV BX,WORD PTR DS:[DATA10] MOV DS:[BX],AL
RET
CONVERSALL: MOV AL,BYTE PTR DS:[DATA9] CALL CONVERS2
ADD WORD PTR DS:[DATA10],02H MOV AL,BYTE PTR DS:[DATA8] CALL CONVERS2
ADD WORD PTR DS:[DATA10],02H MOV AL,BYTE PTR DS:[DATA7] CALL CONVERS2
MOV WORD PTR DS:[DATA10],DATA4 RET
NEWTIME: CMP BYTE PTR DS:[DATA9],59H ;数码管上显示的秒数和59比较
JC ADD1
MOV BYTE PTR DS:[DATA9],0D
33
CMP BYTE PTR DS:[DATA8],59H JC ADD2
MOV BYTE PTR DS:[DATA8],0D CMP BYTE PTR DS:[DATA7],23H JC ADD3
MOV BYTE PTR DS:[DATA7],0D JMP OK
ADD1: MOV AL,BYTE PTR DS:[DATA9] ADD AL,1D
DAA
MOV BYTE PTR DS:[DATA9],AL JMP OK
ADD2: MOV AL,BYTE PTR DS:[DATA8] ADD AL,1D
DAA
MOV BYTE PTR DS:[DATA8],AL JMP OK
ADD3: MOV AL,BYTE PTR DS:[DATA7] ADD AL,1D
DAA
MOV BYTE PTR DS:[DATA7],AL CODE
ENDS 34
END START
35