1、还有就是如何通过时钟中断调用来确定表的时针、分针和秒针的位置。设计中遇到的问题和解决的步骤、方法:遇到问题: 在课程设计中遇到的最大的困难是如何产生中断,对中断向量表的装载还比较模糊,对中断的初始化、具体设置、中断的返回还不是很清楚,最主要如何是通过时钟中断调用来确定表的时针、分针、和秒针的位置,并通过条用相关子程序画在屏幕上开始是不是很明白。解决步骤、方法: 在此过程中我认真翻阅了课本,重点对课本中断这一章做了详细的研究和学习,同时还借阅了王爽的汇编语言一书,特别是对其中的一些常用的中断进行了全面的学习和深入的研究,基本上弄懂了各个中断的作用和应用,通过对这些中断的学习,使我对中断有了更深一
2、步的认识,因而在相关程序的设计方面就容易了很多。设计结果:程序设计完成后,通过编译器编译成可执行文件.exe后,双击即可运行此指针显示的程序,同时屏幕上会出现一个时钟表盘,表盘上会显示相应的系统时间,同时在程序运行过程中,按C键可改变钟表界面各个部分的颜色;按B键可扩大表盘;按S键可听简单的音乐;按Q建退出程序。 附录1:程序运行截图(2张)附录2:源程序列表extrn music:far,gensound:far;* 堆栈段 .286;STACK_SEG SEGMENT STACK STACK_BUF DW 120 DUP(?) TOP EQU $-STACK_BUFSTACK_SEG EN
3、DS* 数据段 DATA_SEG SEGMENT PARA- TODO: 数据的定义及存储器的分配ts1 DB 0quitbuf DB welcome you to run this programme. quitbuf2 DB C: change color; B:extend the colck; S:reduce the clock quitbuf3 DB presse to sound; Press q to quit ! sigle DB 80h absx DW 0 absy DW 0 sut DW 0erroybz DB 0 r0 DW 90x0 DW 320y0 DW 245 c
4、ount0 db 0 count_hour DB 11 count_minute DB 11yuanxinx DW 0yuanxiny DW 0 s DB 0s2 DB 0 s3 DB 0hour DW 0hour2 DW 0 minute DW 0minute2 DW 0 second DB 0 second2 DB 0 sin_x DW 0sin_xx DW 0 x DW 0y DW 0x1 DW 0xminy DW 0yminx DW 0 xmax DW 0 ymax DW 0 ymin DW 0xmin DW 0 sjx_xminy DW 0sjx_yminx DW 0 sjx_xma
5、x DW 0 sjx_ymax DW 0 sjx_ymin DW 0sjx_xmin DW 0 yuanx DW 0yuany DW 0 y1 DW 0x2 DW 0y2 DW 0x3 DW 0y3 DW 0 DIancolor DB 0 color DB 2color_hour DB 2color_min DB 6color_second DB 9 color4 DB 10color5 DB 11color6 DB 12 backgroundcolor DB 1 page1 DB 0y2y1 DW 0 x2x1 DW 0 sjx_y2y1 DW 0 sjx_x2x1 DW 0 -DATA_S
6、EG ENDS* 代码段 CODE_SEG SEGMENT PARAMAIN PROC FAR ASSUME CS:CODE_SEG,DS:DATA_SEG ASSUME SS:STACK_SEGSTART: MOV AX,STACK_SEG MOV SS,AX MOV SP,TOP MOV AX,DATA_SEG MOV DS,AX 从这里开始您的代码 beg: MOV AX,0012h INT 10h MOV DX,0010h CALL b1002 LEA BP,quitbuf CALL msg MOV DX,010ah LEA BP,quitbuf2 MOV DX,020ah LEA B
7、P,quitbuf3 beg2: CALL skin CALL skin2 CALL skin3 CALL CLk MOV second,DH MOV second2,DH MOV count_minute,11 CALL minute_lin XOR DX,DX MOV AX,minute2 MOV CX,12 DIV CX MOV CX,AX ;minurte2/12 POP AX ADD AX,CX MOV hour2,AX MOV count_hour,11 CALL hour_lin MOV DL,DH CALL bcd2 XOR AH,AH MOV CL,12 DIV CL MOV
8、 count_minute,AH ;second%12初始值 DEC count_minute XOR DX,DX DIV CX ;minurte2%12 MOV count_hour,DL DEC count_hour INC second2kk3: CLI CALL second_lin STI JMP ksks: MOV AH,1 INT 16h JZ kk3 MOV AH,8 INT 21h CMP AL,q JE quitb JE CHange_rbs JE CHange_rsc JE CHange_color cmp al,e je a0 JMP kk3CHange_rs: CMP
9、 r0,190 JA ks ADD r0,5 JMP tobeg2 CHange_rb: CMP r0,60 JB ks SUB r0,5CHange_color: LEA SI,color_hour MOV CX,6CHange_kk1: MOV AL, SI INC AL CMP AL,15 JC CHange_color_kk2 MOV AL,1CHange_color_kk2: MOV SI,AL INC SI LOOP CHange_kk1 JMP tobeg2a0: call musictobeg2: CALL CLear JMP beg2 quit: MOV AX,4C00H I
10、NT 21H * hour_lin PROC NEAR PUSHa CMP count_hour,11 JB tohour_yl JMP hour_lin_nexttohour_yl: MOV SIgle,3 JMP hour_ylhour_lin_next: MOV count_hour,0 MOV SIgle,5 MOV DL,CH CMP AL,12 JB hour_kk1 SUB AL,12hour_kk1: MOV CL,30 MUL CL PUSH AX MOV CX,AX MOV hour2,AX ;擦掉 MOV Color,0 MOV AX,hour MOV BX,r0 ADD
11、 BX,20 CALL renovate MOV DX,yuanx MOV x3,DX MOV DX,yuany MOV y3,DX ADD AX,270 ADD BX,400 ;90 CALL renovate MOV DX,yuanx ;擦掉 MOV x2,DX MOV y2,DX MOV DX,x0 MOV x1,DX MOV DX,y0 MOV y1,DX CALL sjx ADD AX,180 SUB BX,100 MOV y3,DX ; CALL sjx MOV SIgle,4*;重写 hour_yl: MOV AL,color_hour MOV color,AL MOV AX,h
12、our2 ADD BX,70 ADD AX,90 ADD BX,600 ; MOV y2,DX ; CALL sjxx CALL sjxy MOV x3,DX 重写 MOV CX,hour2 MOV hour,CXhour_quit: POPa REThour_lin ENDP * minute_lin PROC NEAR CMP count_minute,11 JB tominute_yl 仍是原来的一个 JMP minute_lin_nexttominute_yl: MOV SIgle,0 JMP minute_ylminute_lin_next: INC count_hour MOV D
13、L,CL CALL bcd2 ;bcd-16 MOV CL,6 MUL CL ;al*cl MOV DL,second2 CALL bcd2 MOV CL,ALsecond2/12 MOV CH,0 MOV minute2,AX AAAa1: MOV SIgle,2 MOV AX,minute ADD BX,10 ADD AX,268 ADD BX,800 MOV DX,y0 SUB BX,200 inc count0 cmp count0,5 jnz minute_yl mov count0,0 call music *重写 minute_yl: MOV sigle,1 MOV AL,col
14、or_min ADD BX,30 ADD BX,900 MOV CX,minute2 MOV minute,CX CALL hour_linminute_kk1:minute_quit:minute_lin ENDP *in dh秒数* second_lin PROC NEAR CMP second2,DH JE to_second_quit JMP second_lin_nextto_second_quit:JMP second_quitsecond_lin_next: MOV SIgle,80h MOV second2,DH MOV Color,0 MOV DL,second ;erase
15、 MOV AH,0 ADD BX,300 CALL linex CALL liney MOV AL,color_second ADD BX, 300 CALL liney CALL yuanxin MOV second,DL MOV CL,second2 MOV second,CL JE second_kk1 INC count_minute JMP second_quitsecond_kk1: MOV count_minute,0 second_quit:second_lin ENDP *bxbbx*in ax度数*bx长度,*OUT x2-ax,y2-dx ;*renovate PROC
16、NEAR CALL SIn MOV DX,0 MOV CX,BX CMP SI,1 JE hjian ADD AX,y0 JMP renovate_kk1hjian: MOV CX,y0 SUB CX,AX MOV AX,CXrenovate_kk1: MOV yuany,AX POP AX CALL cos JE hjian2 ADD AX,x0 JMP renovate_kk2hjian2: MOV CX,x0renovate_kk2: MOV yuanx,AX POPa renovate ENDP * Clk PROC MOV AH,2 INT 1ahCLk ENDP *cosx in ax out ax ,si符号* cos PROC NEAR ADD AX,90 cos_kk1: CALL SIn cos ENDP
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1