惠州学院微机报告
- 格式:doc
- 大小:401.65 KB
- 文档页数:16
这是串行通讯实验,首先根据原理图(面向地址总线的有两个引脚,一个是CS一个C/D,这两个引脚决定了具体的端口地址,CS是经过译码输出的引脚,连到译码器的输出端,决定了芯片选中芯片也就是决定了端口地址的起始地址。
C/D是地址引脚,只有一个地址引脚所以只有两个端口,一个数据端口一个控制端口,C/D连到地址总线上的A0,当C/D为0时访问的是数据端口数据类寄存器,当为1时访问控制端口控制类寄存器)连接好线路,将该实验程序通过集成开发环境编译链接生成目标代码,点击运行。
其运行结果为从键盘输入一个字符,将其ASCII码加1后发送出去,再接收回来在屏幕上显示,实现自发自收。
为什么会有这样的结果?因为点击运行后,CPU执行第一条数据传送指令,(按字节对这个变量提供了若干个单元存放的字符串信息,标准的字符串一定有换行回车符,以及24h对应的$符号)将立即数也就是数据段段地址传送给ax寄存器。
Cpu顺序执行数据传送指令,将ax寄存器的数据也就是数据段的段地址传送到ds 寄存器。
Cpu顺序执行数据传送指令,将立即数0283h传送给dx寄存器。
Cpu顺序执行数据传送指令,将立即数16h传送给al寄存器。
CPU顺序执行IO写指令,将立即数16h写到8253控制端口的控制寄存器(相当于模式寄存器)(根据cs提供的端口的起始地址为0280h,该芯片的地址引脚A0A100加上起始地址就是0280h决定了访问计数器0,A0A101加上起始地址就是0281h访问计数器1,A0A110加上起始地址就是0282访问计数器2,A0A111加上起始地址就是0283h访问8253的控制端口),设定控制字,D7D6为00说明对计数器0进行设置,D3D2D1为011对应工作模式为模式3,模式3会产生连续的方波信号。
Cpu顺序执行数据传送指令,将立即数0280h传送给dx寄存器。
Cpu顺序执行数据传送指令,将立即数52传送给al寄存器。
Cpu顺序执行IO写指令,将al寄存器的数据写到端口地址0280h所对应的8253的计数器0的初值寄存器.即把定时计数器0的计数初值设置为52,为什么是52?根据公式~~~。
惠州学院电子信息与电气工程学院程序设计报告课程名称:微机原理与接口技术班级:15电气2班姓名:肖子浩1507080601232钟智威1507080601238指导老师:谢珩2017.11.04一、实验目的熟练掌握汇编指令的使用,学会用汇编语言写程序实现简单的功能。
二、实验内容编一程序,分别统计从内存单元TEMP处开始的连续100个字节单元中大、小写字母、数字和其他字符的个数,最后在屏幕上显示结果(假设结果不超过两位数)。
扩展:键盘输入一段字符串,统计各字符个数并分类在屏幕上显示。
三、程序DATA segmentMESS DB 0DH,0AH,'Input String: $'UP DB 0 ;大写个数初值置0DOW DB 0 ;小写个数初值置0NUM DB 0 ;数字个数初值置0ELS DB 0 ;其他字符个数初值置0ZS DB 0 ;输入字符总数初值置0UP_C DB 100 DUP ('$')DOW_C DB 100 DUP ('$')NUM_C DB 100 DUP ('$')ELS_C DB 100 DUP ('$')CRLF DB 0DH,0AH,'$'DATA ENDScode segmentassume cs:code, ds:dataMAIN PROC FARSTART:PUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV AH,09 ;选择09函数,显示字符串MOV DX,OFFSET MESS ;DX = 数据的偏移地址INT 21H ;调用21H中断NEXT:MOV AH,01INT 21HCMP AL,0DHJNZ GOONJMP DISP_1 ;显示结果GOON:INC ZSCMP AL,'A';比较AL和A的ASCii码JL NO_UP ;若刚才比较结果小于A的ASCii码,跳到NEXTCMP AL,'Z';比较AL和Z的ASCii码JG NO_UP ;若刚才比较结果大于Z的ASCii码,跳到NO_UPINC UP ;大写字母个数+1MOV BX,OFFSET UP_C ;BX指向空间NUM_MOV CX,0MOV CL,UPADD BX,CX ;BX指向地址后移位DEC BX ;前移1位MOV[BX],AL ;把AL内容存在BX指向地址下JMP NEXTNO_UP:CMP AL,'a';比较AL和a的ASCii码JL NO_DOW ;若刚才比较结果小于a的ASCii码,跳到NEXTCMP AL,'z';比较AL和z的ASCii码JG NO_DOW ;若刚才比较结果大于z的ASCii码,跳到NO_DOWINC DOW ;小写字母个数+1MOV BX,OFFSET DOW_CMOV CX,0MOV CL,DOWADD BX,CX ;BX指向地址后移位DEC BX ;前移1位MOV[BX],AL ;把AL内容存在BX指向地址下JMP NEXTNO_DOW:CMP AL,'0';比较AL和0的ASCii码JL NO_NUM ;若刚才比较结果小于0的ASCii码,跳到NEXTCMP AL,'9';比较AL和9的ASCii码JG NO_NUM ;若刚才比较结果大于9的ASCii码,跳到NO_NUMINC NUM ;数字个数+1MOV BX,OFFSET NUM_C ;BX指向空间NUM_CMOV CX,0MOV CL,NUMADD BX,CX ;BX指向地址后移位DEC BX ;前移1位MOV[BX],AL ;把AL内容存在BX指向地址下JMP NEXTNO_NUM:INC ELSMOV BX,OFFSET ELS_CMOV CX,0MOV CL,ELSADD BX,CXDEC BXMOV[BX],ALJMP NEXTDISP_1:CALL CRLF_PMOV AL,UPCALL DISP_CZRMOV AH,09LEA DX,UP_CINT 21HCALL CRLF_PMOV AL,DOWCALL DISP_CZRMOV AH,09LEA DX,DOW_CINT 21HCALL CRLF_PMOV AL,NUMCALL DISP_CZRMOV AH,09LEA DX,NUM_CINT 21HCALL CRLF_PMOV AL,ELSCALL DISP_CZRMOV AH,09LEA DX,ELS_CINT 21HCALL CRLF_PMOV AL,ZSCALL DISP_CZRCALL CRLF_PMOV AX,4C00HINT 21HENDD:RETMAIN ENDPDISP_CZR PROC NEAR ;显示10进制数字子程序XOR AH,AHMOV AL,ALMOV BL,100DDIV BLPUSH AXADD AL,30HMOV DL,ALMOV AH,02H ;显示输出INT 21HPOP AXMOV AL,AHXOR AH,AHMOV BL,10DDIV BLADD AX,3030HPUSH AXPOP DXMOV AH,02H ;显示输出INT 21HMOV DL,DHINT 21HMOV DL,':'INT 21HMOV DL,' 'INT 21HRETDISP_CZR ENDPCRLF_P PROC NEAR ;回车换行子程序MOV AH,09LEA DX,CRLFINT 21HRETCRLF_P ENDPCODE ENDSEND四、程序流程图五、运行结果图图2 程序运行图图3 输入100个字符运行结果图。
东南大学微机实验报告10页10页
1. 简介:介绍实验目的、实验背景、研究问题和实验方法等。
2. 材料和方法:介绍实验材料和方法,例如使用的硬件、软件和技术等。
3. 结果:给出实验结果,例如测试数据和图表等。
4. 讨论:对结果进行讨论,对实验中遇到的问题进行解释和分析,并提出结论和建议。
5. 结论:总结实验过程、重要结果和研究结论,以及对未来工作的展望。
以下是一份典型的东南大学微机实验报告的框架,可以参考使用。
实验题目:xxx
实验时间:xxxx.xx.xx
实验地点:东南大学计算机实验室
学生姓名:xxx
实验报告结构
1. 简介
1.1 实验目的
1.3 研究问题
2. 材料和方法
2.1 硬件
2.3 技术
3. 结果
3.1 测试数据
4. 讨论
4.2 问题解释
4.3 建议
5. 结论
5.3 未来展望
参考文献: 1. xxxx。
实验四 A/D转换实验一、实验目的与要求目的:掌握A/D芯片与单片机的接口方法及ADC性能;了解单片机实现数据采集的方法。
二、实验参考步骤1、启动KEIL软件,选择菜单“工程\新建工程”以建立工程(扩展名为.uv2,如T4a.uv2)。
2、选择菜单“文件\新文件”以建立一个新的文本编辑窗口,在窗口中输入参考源程序1并保存(扩展名为.asm),如test4a.asm,然后将其加入到源程序组1中。
3、在工程菜单的选项“目标1属性”中设置相应的选项,包括“输出\产生hex文件”选项以便汇编生成HEX代码供编程器使用,在“调试\使用KeilMonitor-51 Driver”的设置中选择相应的串口号。
4、使用“工程”中的“编译全部文件”完成相应的文件编译,如果程序格式正确将生成相应HEX代码文件,如T4a.hex。
如果提示有编译错误请自行修改源程序然后再重新编译。
5、将ad0804 的wr引脚连接P3.6 ,rd引脚接p3.7 ad0804数据接P1口,八路发光管接P0口,完成仿真器与计算机之间的连线并通电。
6、在KEIL软件中启动“调试\开启仿真模式”,然后用“运行”命令实现全速运行的仿真,调节电位器控制电压输入,观察指示灯状态。
7、根据指示灯状态记录对应的AD结果,利用万用表测量对应的输入电压值进行比较,验证AD结果是否正确。
8、通过多次改变输入值的方式重复步骤7并记录调试结果,然后在KEIL软件中启动启动“中断运行-调试(debug)\关闭仿真模式”退出仿真,选择“工程\关闭工程”可关闭当前工程。
9、根据参考源程序1进行思考、修改和拓展,自行设计程序目标并编程验证,比如利用数码管显示AD值,或者利用AD值控制PWM波的占空比等。
10、完成参考程序二的仿真演示并自行分析其程序设计思想。
三、实验内容1、程序一:0804的基本应用。
程序演示目的:实验者转动电位器以改变输入电压,利用ad0804读取AD结果并利用P0口显示AD结果;硬件连接:将ad0804的 wr引脚接P3.6,rd引脚接P3.7,ad0804数据口接P1口, P0口接八路发光管。
深圳大学实验报告课程名称:微机原理与接口技术
实验项目名称:模块化程序设计
学院:电子与信息工程学院
专业:通信工程
指导教师:
报告人:学号:班级:
实验时间:
实验报告提交时间:
教务处制
设计思想(需绘制实验原理图或流程图):程序清单(程序中需有必要注释):
分析实验结果(显示程序运行结果并分析解释):
1.当用户在界面输入u时,程序进行小写字母转大写字母的操作:
2.然后用户在界面输入一串不超过31位的英文字符串:
如输入abcDEF
此时程序的输出结果为:
可以看到小写字母abc已经转换成了大写字母ABC,而大写字母DEF则保持不变。
3.若用户输入的字符超过31个,程序将报错
如输入35个h,程序运行结果为:
4.若用户输入了非英文字符,则程序也会报错
5.当用户开始时输入l,则程序进入到大写字母转小写字母的模式:
假如用户输入字符串ABCdef
可以看到,大写字母ABC最后被转换成了小写字母abc,而小写字母def则保持不变。
用户每次执行完字母大小写转换转换,程序会自动回到最开始的输入界面,等待用户的下一次输入。
注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。
2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。
实验一进程的创建与并发执行一、实验目的:(1) 熟悉Linux工作环境、文本编辑器工具和GCC工具(2) 加深对进程概念的理解,明确进程和程序的区别(3) 进一步认识并发进程的实质和特征二、实验仪器及材料:微型计算机、Linux系统三、实验内容:1、任务1:进程创建编写一段程序,让父进程产生两个子进程,父进程显示字符“a”、两个子进程,分别显示字符“b”、“c”。
任务2:将上述的输出字符改为输出较长的字符串,观察进程并发执行,分析执行结果。
2、源代码:任务1:#include <stdio.h>main(){int p1, p2;while ((p1=fork())==-1); /*父进程创建第一个进程,直到成功*/if (p1==0) /*0返回给子进程1*/printf(“b\n”); /*P1的处理过程*/else /*正数返回给父进程(子进程号)*/{while ((p2=fork())==-1); /*父进程创建第二个进程,直到成功*/if (p2==0) /* 0返回给子进程2*/printf(“c\n”); /*P2的处理过程*/else printf(“a\n”); /*P2创建完成后,父进程的处理过程*/}}任务2:#include <stdio.h>main(){int p1, p2;while ((p1=fork())==-1); /*父进程创建第一个进程,直到成功*/if(p1==0)while (1)printf(“A ”)else {while ((p2=fork())==-1); /*父进程创建第二个进程,直到成功*/if (p2==0)while (1)printf(“B ”)else /*P2创建完成后,父进程的处理过程*/while (1)printf(“P ”);}}四、实验结果记录:任务1:任务2:五、思考题及解答:1、当新创建进程开始执行时,指令指针的起始位置在创建此进程对应地址的下一个地址。
这是DMA写实验,首先根据原理图连接好线路,将该实验程序在集成开发环境上编译链接生成目标代码,点击运行,其运行结果是每按下一个单脉冲,发送一个DMA请求,一个字节一个字节地读取8缓冲器的数据也就是开关状态值,写到内存6000h:00开始的一个8字节数据缓冲区,不断读取显示缓冲区的数据在屏幕上显示。
为什么会有这样的结果呢?因为点击运行后,Cpu开始执行第一条数据传送指令,将数据段段地址传送给ax寄存器。
Cpu顺序执行数据传送指令,将ax寄存器的数据传送给ds寄存器。
Cpu顺序执行数据传送指令,将附加段段地址(附加段段地址为6000h)传送给ax寄存器。
CPU顺序执行数据传送指令,将ax寄存器的数据传送给es寄存器。
Cpu顺序执行下一条指令(地址传送指令),将数据段变量in_data1首地址的偏移量传送给si原变址寄存器。
Cpu顺序执行下一条指令(地址传送指令),将附加段变量in_data2首地址的偏移量传送给di目的变址寄存器。
Cpu顺序执行清方向标志指令,使DF为0,使SI,DI指针递增(在字符串操作中使变址寄存器SI或DI 的地址指针自动增加,字符串处理由前往后),如果DF为1则递减。
Cpu顺序执行数据传送指令,将立即数11传送给cx寄存器。
Cpu顺序执行数据串传送指令(字符串传送指令,movsb 表示一个字节的传送,movsw表示一个字的传送),将ds:si指向的内存单元中的字节送入es:di,然后根据df为0,si和di递增,执行11次,每传送完一个字节的数据之后,si,di指针指向下一个单元,执行完该指令后连续传送了11个字节的数据,将数据段的数据传送给附加段(rep是字符串操作指令的前缀,在cx不等于0的情况下,重复执行字符串操作指令)。
Cpu顺序执行数据传送指令,将ax寄存器的数据传送给ds寄存器。
Cpu顺序执行IO写指令,将al寄存器的数据写到端口地址0Ch指定的PC机内部8237的字节指针(8237内部的一个特殊标志位),清除字节指针,根据写入的数据为0(ax寄存器存放的是附加段的段地址6000h,低8位全为0),决定了访问16位寄存器的低八位,如果为1访问16位寄存器的高8位。
惠州学院大学物理实验7 示波器及其使用示波器是一种常用的电子仪器,主要用于观察和测量各种电信号。
是展示和观测电信号的电子仪器,可以直接测量信号电压的大小和周期.配合各种传感器把非电量转换成电量,示波器也可以用来观察各种非电量的变化过程。
特别适用于观测瞬时变化的过程.本实验是利用示波器观察周期性改变信号和测量其主要参数。
交流电的电压(或电流)随时间作周期性变化。
交流电包括各种各样的波形,如正弦波、方波、锯齿波等。
[实验目的]1.了解示波器的基本结构和工作原理,掌握示波器的基本调节和使用方法;2.学会使用常用信号发生器;掌握用示波器观察、描绘电信号波形的方法。
3.学会用示波器测量、计算电信号电压、周期和频率等电参量;4.学会用示波器观察、描绘利萨如图形。
[实验仪器]1、双踪示波器(20MHz CS—4215A) 1台2、低频信号发生器(10Hz—1MHz) 1-2台3、屏蔽连接线(同轴电缆)2根[实验原理]一、示波器的结构及简单工作原理图1、示波器的原理图示波器一般由5个部分组成,如图1所示:(1)示波管;(2)扫描发生器;(3)同步电路;(4)水平轴和垂直轴放大器;(5)电源。
下面分别加以简单说明。
示波器的原理方框图1、示波管有各种电极,其结构如图1所示。
阴极K受灯丝F加热而发射电子,这些电子受带正高压的加速阳极A1的加速,并经由A1、A2组成的聚焦系统,形成一束很细的高速电子束射到荧光屏,荧光屏上涂有荧光粉,它在这些高速电子的激发下发光。
光点的大小取决于A1、A2组成的电子透镜的聚焦。
改变A2相对A1的电位,可以改变电子透镜的焦距,使其正好聚焦在荧光屏上,成为个很小的亮点。
因此,调节A2的电位,称为“聚焦”调节。
示波管内装有两对互相垂直的平行板(X1、X2和y1、y 2),如果在垂直方向的平行板y1、y 2上加周期变化的电压,电子束通过时受到电场力的作用而上下偏转,在荧光屏上就可以看到一根垂直的亮线;同理,在水平方向的平行板x 1、x 2上加周期变化的电压,也可以看到一根水平亮线。
惠州学院计算机科学系课程设计(综合实验)报告( 2015--2016年度第一学期)课程名称:微型计算机技术题目:多功能实时时钟班级:最牛逼班学号:111111222222学生姓名:杰克指导教师:老师设计周数:1周同组人:路飞,鸣人日期:2015年12 月31 日一、课程设计的目的与要求。
1.1设计的目的。
通过本次课程设计要掌握芯片使用的方法,灵活运用课本知识,加深所学的知识,对所学的相关芯片的原理、内部结构、使用方法等有更加深刻的了解,学会利用课本知识联系实际应用及编程。
1.2设计的要求。
(1) 实时时钟由时钟信号产生部分和时间显示部分组成时钟计时器,计算中断时间准确计时、分、秒;(2) 小键盘控制多功能选择采用小键盘输入,通过小键盘LED数码管显示,不同键输入对应不同功能(如时间暂停开始,设置时间等)。
1.3 设计的意义。
通过了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后搞设计时逻辑更加清晰。
二、设计正文。
2.1设计的基本原理。
2.1.1设计所用芯片结构8253的功能用途是:(1)延时中断(2)可编程频率发生器(3)事件计数器(4)二进倍频器(5)实时时钟(6)数字单稳(7)复杂的电机控制器8253有六种工作方式:(1)方式0:计数结束中断(2)方式1:可编程频率发生器(3)方式2:频率发生器(4)方式3:方波频率发生器(5)方式4:软件触发的选通信号(6)方式5:硬件触发的选通信号8253各引脚功能如下。
D7~D0——八条双向数据线;WR(低电平有效)——写输入信号;RD(低电平有效)——读输入信号;CS(低电平有效)——片选输入信号;A0、A1——片内寄存器地址输入信号;CLK——计数输入,用于输入定时基准脉冲或计数脉冲;OUT——输出信号,以相应的电平指示计数的完成,或输出脉冲波形;GATE——选通输入(门控输入),用于启动或禁止计数器的操作,以使计数器和计测对象同步。
2.2 设计方案。
2.2.1 总体方案。
(见附录)2.2.2 硬件原理图。
2.3 具体模块设计。
2.3.1主程序模块:;*******************************;;* 键盘显示控制实验*;;*******************************;inta00 equ 20h ;8259a port,口地址inta01 equ 21h ;8259a port,口地址port0 equ 2b0h ;8279 data port,8279数据口port1 equ 2b1h ;8279 ctrl port,8279控制口time0 equ 280h ;8253 time0 port,8253定时器0口地址time1 equ 281h ;8253 time1 port,8253定时器1口地址timec equ 283h ;8253 ctrl port,8253控制口地址stacks segment stacksta dw 512 dup(?)top equ length stastacks endsdata segmentcsreg dw ?ipreg dw ?irq_times dw 00hbuf db 0 ;count,计数单元sign db 0 ;flage,计数标志sec1 db 0 ;hour hight,秒高位sec2 db 0 ;houp low,秒低位min1 db 0 ;min hight,分高位min2 db 0 ;min low,分低位hour1 db 0 ;sec hight,时高位hour2 db 0 ;sec low,时低位err1 db 0 ;error flage,出错标志hms db 0 ;00 is hour,11 is min,22 is sec,预置时、分、秒标志led db 3fh,06,5bh,4fh,66h,6dh,7dh,07,7fh,6fh,79h,40hmes db 'pleas first create the irq pulse!',0ah,0dh,0ah,0dhdb 'in small keybord:',0ah,0dhdb 'c--clear to zero; g--go ahead',0ah,0dhdb 'd--stop the disply;e--exit',0ah,0dhdb 'p--position the beginning time',0ah,0dh,'$'data endscode segmentmain proc farassume cs:code,ds:data,ss:stacks,es:datastart: climov ax,datamov ds,axmov buf,0mov sign,01mov sec1,0mov sec2,0mov min1,0mov min2,0mov hour1,0mov hour2,0mov err1,0mov dx,timec ;8253初始化mov al,36hout dx,almov dx,time0mov ax,1000out dx,almov al,ahout dx,almov dx,timecmov al, 74hout dx,almov ax,100mov dx,time1 ;定时器1每0.1秒中断一次out dx,almov al,ahout dx,almov ax,stacksmov ss,axmov sp,topmov ax,datamov ds,axmov es,axmov dx,offset mesmov ah,09int 21hmov ax,csmov ds,axmov dx,offset int_procmov ax,250bhint 21hin al,21hand al,0f7hout 21h,almov dx,port1mov al,0d3hout dx,al ;8279 clear,清零mov al,2ahout dx,al ;8279 clock,置时钟命令mov al,40hout dx,al ;read fifo ram command,fifo ram命令mov al,00hout dx,al ;keybord disply mode,置键盘显示模式mov al,80hout dx,al ;write ram command,写ram命令stikey1:call key2 ;call keybord and disply,调键盘显示子命令cmp hour2,0ah ;err flagejz next2next1: cmp al,0ch ;'c' command,'c'命令否jnz lp0next2: mov sign,00hmov hour2,00hmov hour1,00hmov min2,00hmov min1,00hmov sec2,00hmov sec1,00hlp0: cmp al,0eh ;'e' command,'e'命令退出程序jnz lp1mov sign,00hjmp exitlp1: cmp al,10h ;'g' command,'g'命令否jnz lp2mov sign,01hjmp key1lp2: cmp al,0dh ;'d' command,'d'命令否jnz setimov sign,00hkey3: jmp key1seti: cmp al,12h ;'p' command,'p'命令否jnz key1mov sign,00h ;add 1 flage,'00'为预置时标志mov hms,00h ;hour flagecall high0cmp err1,01hjz key3call low0cmp err1,01hjz key3mov hms,11h ;min flage,'11'为预置分标志call high0cmp err1,01hjz key3call low0cmp err1,01hjz key3mov hms,22h ;sec flage,'22'为预置秒标志call high0cmp err1,01hjz key3call low0jmp key1exit:in al,21h ;关中断IRQ3or al,08hout 21h,alstimov ax,4c00hint 21hmain endpint_proc proc farclipush axpush bxpush cxpush dxpush sipush dipush dscmp sign,00 ;sign is add 1 flage,是否允许计数jz endt1inc buf ;buf is count,计数单元加1cmp buf,10jl endtmov buf,0inc sec1cmp sec1,10jl endtmov sec1,0inc sec2cmp sec2,6jl endtmov sec2,0inc min1cmp min1,10jl endtmov min1,0inc min2cmp min2,6jl endtmov min2,0inc hour1cmp hour2,2jl hhcmp hour1,4jl endtmov hour1,0mov hour2,0endt1: jmp endthh: cmp hour1,10inc hour2endt:mov al,20h ;send EOImov dx,inta00out dx,almov cx,0ffffhloopx:noploop loopx ;延时pop dspop dipop sipop dxpop cxpop bxpop axmov al,20hout 20h,aliretint_proc endpkey2 proc nearmov dx,port1mov al,0d1hout dx,al ;clear display,清显示wrep: call disp ;调显示子程序mov dx,port1in al,dxand al,07hjz wrepkeyn: mov dx,port0 ;读状态in al,dxmov bl,aland al,07hand bl,38hmov cl,03shr bl,clcmp bl,00h ;是否第一行键jnz line1line1: cmp bl,01hjnz line2 ;是否第二行键jmp quit1line2: add al,10hquit1: retkey2 endpdisp proc nearpush cxmov ax,datamov ds,axmov dx,port1mov al,90hout dx,almov si,offset sec1mov cx,0006mov bx,offset leddisp1: cldlodsbxlatmov dx,port0out dx,alloop disp1pop cxretdisp endperrs proc nearmov hour2,0ahmov hour1,0bh ;errormov min2,0bh ;disply 'E-----'显示出错标志mov min1,0bhmov sec2,0bhmov sec1,0bhmov err1,01h ;err flage,标记出错reterrs endphigh0 proc nearcall key2mov err1,00cmp hms,00h ;hms is hour min sc flage,预置时、分、秒jnz min0cmp al,02h ;00 is hour,预置时jg error ;11 is min,预置分mov hour2,al ;22 is sec,预置秒jmp hqut1min0: cmp hms,11hjnz sec0cmp al,05hjg errormov min2,aljmp hqut1sec0:cmp al,05hjg errormov sec2,alhqut1: reterror: call errsrethigh0 endplow0 proc nearcall key2 ;get hour min sec low,预置时、分、秒低位mov err1,00cmp hms,00hjnz min3mov dl,hour2cmp dl,01jg hour3cmp al,09hjg errormov hour1,aljmp lqut1hour3:cmp al,03hjg errormov hour1,aljmp lqut1min3: cmp hms,11hjnz sec3cmp al,09hjg errormov min1,aljmp lqut1sec3:cmp al,09hjg errormov sec1,allqut1: retlow0 endpcode endsend start三、课程设计的结论。