《2022年2022年汇编语言 2.pdf》由会员分享,可在线阅读,更多相关《2022年2022年汇编语言 2.pdf(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、课题名称:钟点显示学生姓名:杨* * 学号: * 专业:计科指导教师:裘* * 时间: 2007 年 8 月目录1.题目编号及要求11.1 题目11.2 要求11.3 课题背景11.31 汇编语言的优点11.32 课题意义11.33 主要研究内容和功能12.运行环境(软、硬件环境)13、功能设计(功能模块及模块图)13.1 各模块的主要功能14.详细设计24.1 程序功能24.2 各功能模块程序的流程图34.3 本设计的重点、难点及解决方法74.31 重点难点 74.32 调试过程75.总结(体会)75.1 参考文献76.附:源程序8课程设计文档1、题目编号及要求1.1 题目:钟点显示1.2
2、要求:1)在屏幕的左上角或右下角显示小时:分:秒2)整点报点,定点闹铃。(即整点时以响铃次数报钟点,可在指定时间响音乐)*3)程序需驻留。1.3 课题背景:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 15 页 - - - - - - - - - 1.3.1 汇编语言的优点汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活
3、性。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。用汇编语言等非机器语言书写好的符号程序称为源程序,运行时汇编程序要将源程序翻译成目标程序。目标程序是机器语言程序,它一经被安置在内存的预定位置上,就能被计算机的CPU 处理和执行。汇编语言像机器指令一样,是硬件操作的控制信息, 因而仍然是面向机器的语言,使用起来还是比较繁琐费时,通用性也差。 但是, 汇编语言用来编制系统软件和过程控制软件,其目标程序占用内存空间少,运行速度快,有着高级语言不可替代的用途。1.3.2 课题意义有人这样说过:时间多么重要,错过了就永远错过。时间多么坚定,因为时间从不回头。时间多么关键,就在那一刻
4、把握。时间就是一切,作为学生的我们更应该有很强的时间意识,刚刚学完汇编语言,借此机会用汇编语言编制了一个时钟的程序。进一步巩固所学的知识,熟练应用汇编语言进行一些程序的制作,进一步培养对编程的兴趣。为以后的工作打下基础。 检验自己的学习成果。我自己学到的知识应用到实际当中,做一些对自己生活和学习有用的程序,达到学以至用的目的。1.3.3 主要研究内容和功能利用汇编程序编写一个小型闹钟程序,实现系统时间的获取。通过界面显示程序显示时间界面,并设定一个闹铃程序实现dos 环境下的发出音乐,到了整点通过铃声的次数报时。主要功能是通过主程序调用其他的子程序实现时间的读取,显示,设置,报时,响铃等。2、
5、运行环境(软、硬件环境) :硬件: 8086 以上 CPU ,内存 256M 以上。软件: WINDOWS操作系统, MASM,LINK汇编编译链接软件。3、功能设计(功能模块及模块图)3.1 各模块的主要功能3.1.1 初始化界面程序clear:设置显示界面,格式为(24 79 黑白文本, 16 级灰度 )。用来显示时间 ,后面用来开窗口。3.1.2 移动光标程序:guang 作用:移动光标到指定的位置。第 1 页3.1.3 显示小时程序:shuchu 作用:显示当前时间的小时值。3.1.4 显示分钟程序:shuchu 作用:显示当前时间的分钟值。3.1.5 显示秒程序:shuchu 作用:
6、显示当前时间的秒值。3.1.6 获取系统时间程序:调用DOS中断程序获取系统当前的时间。3.1.7 设置闹铃时间程序:当按键为R 时,设置闹钟响铃的时间。3.1.8 ASCII码程序: chang 作用:把读取的系统时间转换成ASCII码以便输出。3.1.9 闹铃发声程序: GENSOUND 作用:当当前时间到达设置的闹铃时间时,调用发声程序,音乐响起,在DOS环境下发声。3.1.10 输出字符程序:shuchu 作用:输出各种信息。3.1.11 整点报时程序:baoshi 作用:整点报时,几点响几声。几个字符常量:Msg db welcome to Simple clock! ,0dh,0a
7、h db Please Input esc to quit ,0dh,0ah db Input r to set ringTime,0dh,0ah,$ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 15 页 - - - - - - - - - mess db Please Input ringTime like(HH:MM:SS),0dh,0ah,$ esckey equ 1bh 4、详细设计4.1 程序功能图比较分钟和秒钟是否为0 把取到的时间转换成ASCII码以便于
8、输出光标定位,确定时间输出位置输出时间检查键盘输入输入是否为r 利用中断取系统时间输入闹铃时间比较现在时间与闹铃时间是否相等调用音乐整点报时,几点报几次Y N N Y N Y 首先在数据段开辟一显示缓冲区,用来存储系统时间。调用DOS 中断,返回系统时间,并将来返回的二进制时间转换成ASCII码,方便时间显示时的调用。分别将来小时数、分钟数、秒数存入显示缓冲区,并最终存入一结束字符号$。调用 DOS字符串显示功能将时间显示名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 1
9、5 页 - - - - - - - - - 4.2 各功能模块程序的流程图:4.2.1 清屏宏( Clear)4.2.2 光标定位( Guang)Clear 宏是用来清屏和开窗口用的,其中AH 是中断号指定,AL 等于 0 来指定是清屏,CH,CL ,DH,DL是用来制定清屏或者所开窗口的范围,BH 是指定窗口的背景和前景色。在程序中我用此宏在程序开始和结束时把全屏清成规定的颜色,在程序中需要开窗口菜单,不同颜色的窗口,不同颜色的字,美化输出界面。Guang 宏,是一个光标定位的宏,程序中需要指定位置输出时,用此宏来实现,其中02H是中断号, BH 为 0 表示第零页执行,DH 光标行号 DL
10、 光标列号。在程序中,利用光标定位可以把我想要输出的图形或者文字送到指定的位置。光标定位AX,BX,DX压栈AH=02H BH=0H DH 光标行号DL 光标列号INT 10H 结束DX,BX,AX出栈AX,BX,CX, DX 压栈AH=6 中断号AL=0 清屏号CH,CL 左上角行列号DH,DL 右下角行列号INT 10H DX,CX,BX,AX 出栈名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 15 页 - - - - - - - - - 结束清屏宏4.2.3 回车
11、换行宏( Crlf)4.2.4 转换函数( Chang)Crlf 宏是用来回车换行用的,在程序中可以调用此宏来回车换行,以美化程序显示。把回车换行写成宏是为了后面用到很多,减少程序的重复代码,简化源程序,是程序更加清晰。Chang 宏是把系统取出的时间按位取出,转换成ASCII码,存放在指定的位置,以便调用输出。系统取出的时间是HH:MM:SS,为方便输出,要进行转换,例如HH 先要除以10,商放在输出序列的第一个H,余数放在第二个H 的位置。Chang 宏Crlf 宏转换函数回车换行宏AH=02H DL=0AH,0DH 回车换行INT 21H 结束除以 10 求余AL,AH 各加 30H D
12、isptimec2 ALDisptimec3 AH结束 CL AL 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 15 页 - - - - - - - - - 扩展为字4.2.5 发音程序( music)4.2.6 时间延迟程序(waitf )这是一个子程序,功能是当闹铃程序调用次音乐程序时,系统会通过BIOS的小喇叭奏出事先准备好的音乐,这就是定点闹铃。程序中freq 用来存放音乐的频率,time 来存放音乐的节拍长短,用 -1 表示音乐的结束。然后调用SOUND程序
13、来发音。这是一个硬件产生时间延迟的程序,以前都是利用GENSOUD程序产生声音,他不仅与输入的频率有关,还和CPU相关,因此利用硬件产生时间延迟,与CPU的快慢无关,提高了程序的可移植性,通过监控端口61H 的 PB4,使 PB4每 15.8us 触发一次,以产生一个固定不变的时间基准。MUSIC子函数发音程序WAITF子函数AH AL 时间延迟程序AX 入栈In al ,61h and al ,10h AL=AH ? AX 出 栈返回 lea si ,freq lea bp ,time 【SI】DI N 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - -
14、 - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 15 页 - - - - - - - - - Y BX ds:bp DI= -1? 跳到光标定位CALL SOUND SI + 2 BP + 2 SOUND子函数硬件发声程序4.2.7 硬件发声程序(sound)N Y AX,BX,CX,DX,DI 入栈定时器初始化指定喇叭响应频率设置数据输出端口号保存端口信息CX 3000 call waitf BX 自减BX = 0 ? 恢复端口信息DI,DX,CX,BX,AX 出栈返回名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - -
15、 - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 15 页 - - - - - - - - - 这是一个发声程序,利用BIOS 中的 beep 发声程序和其他程序结合编制简单的音乐,beep子程序能够根据 (BX)中的计数控制8253/54 定时器, 产生 896Hz 的声音。 为了产生其他频率的声音,给计数器装入计数值533H 就能产生896Hz 的声音,同样产生其他频率的声音的计数值也可以计算出来,把发声频率存放在DI 寄存器中, 然后使用命令使AX中得到送往定时器的计数值,在使用延迟程序来间断两个发音。4.3 本设计的重点、难点及解决方法: 4.3.1
16、开始拿到课题感觉很简单,但是实际下笔写的时候,遇到的最大的困难是如何产生中断,对中断向量表的装载还比较模糊,对部分中断的初始化、具体设置、 中断返回还不是很清楚,程序设计一度陷入停滞状态,不知如何是好。我们又重新翻阅了我们的课本IBM-PC 汇编语言程序设计及邱老师主编的汇编语言程序设计实验指导书 ,重点研究了 中断,通过对这一章的学习,我们终于对中断有了详细的认识,在设计程序时也容易了很多。开始写好了程序的主干,实现了主要功能,后面实现优化界面时,添加进去,老是出现JMP跳转溢出, 翻过书后, 知道这些地方要连跳,这就要找一个中间跳板,不知道什么地方合适,后来向同学请教后才知道设在非顺序执行
17、的地方进行跳转中间站不会出问题。4.3.2 调试过程: 1)编译源文件,命名为clock.ASM ; 2)采用命令格式。MASM clock.ASM将生成一个OBJ文件,检查源程序中的错误,并改正。3)键入连接命令:LINK clock.OBJ,再次键入clock 回车,即可显示结果。4)时间在运行中出现了不准确性,对程序的循环次调整后,时间能正常运行。5、总结(体会)通过对这一闹钟程序的制作,使我对汇编语言的基本知识的使用更加熟练,同时也增加了我对汇编语言的一些认识,在作业完成过程中通过和同学的交流,也增加了合作的技巧。通过查阅以下资料也学到了一些课本上没有的东西,拓宽了自己的知识面,增加了
18、学好汇编语言的信心。这不是第一次用汇编语言来设计一个小程序,平时做了很多实验,写了很多小程序。但这次是一个综合的程序,平时的很多程序都用到了。历时一周终于完成,其间有不少感触。不少子程序,比如音乐响铃程序,就是我们最后一次实验做的,稍加改正,就可以用了。还有一些宏, 例如清屏宏、 回车换行宏、 延时程序、 光标定位等。 这些子程序的设计是固定的,因此可以直接从指导资料中调用,大多只需要修改几个参数就可以,这大大方便了我们的设计,为我们节省了很多的时间。在这次课程设计中,我真正体会到了合作的重要性,遇到很多问题时,当我看书查资料不能解决时, 这是去找同学讨论一下,收获很大, 可以使很多问题迎刃而
19、解,直到问题最终解决。这次课程设计的大部分程序,都可以在王老师让我们平时做的程序中找到,这对我们的程序设计很有帮助, 从这些资料中, 我们可以看出这个时钟程序的基本流程,修改一些程序就可以实现这个时钟的基本功能,添加一些程序就可以实现这个时钟的附加功能,可以说, 如果没有邱老师平时的认真辅导,我们将面临很大的困难。不可否认,本程序存在不少缺点和不足,但通过这次作业的却找出了自己在学习上的不足,对以后的工作也有指导作用。我相信在以后的学习中会克服这些不足,达到熟练掌握汇编语言的目的!向在这次课程设计中给与指导和帮助的邱老师表示衷心的感谢!5.1 参考文献:沈美明和温冬婵主编的IBM-PC 汇编语
20、言程序设计第二版名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 15 页 - - - - - - - - - 裘祖旗主编的汇编语言程序设计实验指导书第 7 页 6、附:源程序。msg db WELCOME TO MY SIMPLE CLOCK! ,0dh,0ah db 0dh,0ah,0dh,0ah, 1. Input r to set ringtime,0dh,0ah db 0dh,0ah, 2. Zhengdian is auto ringing!,0dh,0ah d
21、b 0dh,0ah, 3. Please Input ESC to quit ,0dh,0ah,$ settime db 9 dup(?) esckey equ 1bh sign db 0 data ends code segment shuchu macro string mov ah,09h lea dx,string int 21h endm clear macro ah1,al1,bh1,ch1,cl1,dh1,dl1 push ax push bx push cx push dx mov ah,ah1 mov al,al1 mov bh,bh1 mov ch,ch1 mov cl,c
22、l1 mov dh,dh1 mov dl,dl1 int 10h ;清屏pop dx pop cx pop bx pop ax endm guang macro dh2,dl2 push ax push bx push dx 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 15 页 - - - - - - - - - mov ah,02h mov bh,0h mov dh,dh2 mov dl,dl2 int 10h; 光标定位pop dx pop bx pop ax e
23、ndm change macro c1,c2,c3 mov al,c1 cbw div bh add al,0 mov Disptimec2,al add ah,0 mov Disptimec3,ah endm;把时间转换成ASCII码以便输出crlf macro mov ah,02h mov dl,0ah int 21h mov ah,02h mov dl,0dh int 21h endm;回车换行宏assume cs:code,ds:data main proc start:mov ax,data mov ds,ax mov es,ax ; 段初始化call jiemian MOV AH,
24、01H data segment zhengd db 0ah,0dh db 0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh db ,0ah,0dh db ,0ah,0dh db ,0ah,0dh db ,0ah,0dh db ,0ah,0dh db ,0ah,0dh db ,0ah,0dh 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 15 页 - - - - - - - - - db ,0ah,0dh db ,$ ringtime db 0ah,0d
25、h, The Bell is Ringing!,0ah,0dh db 0ah,0dh,0ah,0dh db ,0ah,0dh db ,0ah,0dh db ,0ah,0dh db ,0ah,0dh db ,0ah,0dh db ,0ah,0dh db ,0ah,0dh db ,0ah,0dh db ,0ah,0dh db ,0ah,0dh db ,0ah,0dh db ,0ah,0dh db ,$ freq DW 371,371,441,495,556,556,556,495 DW 371,371,441,495,556,556,556 DW 371,371,441,495,556,589,5
26、56,495 DW 556,441,495,441,416,371 DW 742,556,556,742,556,556,742,556,661,742 DW 661,556,495,441,661,556,-1 time Dw 40,20,20,40,20,20,80,80 Dw 40,20,20,40,20,20,160 Dw 40,20,20,40,20,20,80,80 Dw 40,20,20,40,40,160 Dw 40,20,20,40,20,20,80,40,20,20 Dw 40,20,20,40,40,160 fre1 dw 659,-1 tim1 dw 100 ;整点报时
27、频率Disptime DB 00,00,:,00,00,:,00,00,$ mess db input ringtime like (HH:MM:SS),$ change cl,3,4 change dh,6,7 lea si,Disptime lea di,settime mov cx,8;把时间转换成ASCII码以便输出next_2: mov ah,si mov al,di cmp ah,al 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 15 页 - - - -
28、 - - - - - jne next_1 inc si inc di loop next_2;比较闹铃与当前时间mov al,1 mov sign,al jmp cmp_sign next_1:mov al,0 mov sign,al ;sign 为闹铃开关,cmp_sign:mov al,sign cmp al,0 je next2 ;为 0 时闹铃不响clear 6,0,39,0,0,24,79 shuchu ringtime call music ;为 1 时闹铃响f2:call jiemian jmp next ;闹铃结束跳到开始next2:guang 00h,00h ; 光标定位s
29、huchu Disptime ;输出时间jmp next exit2:jmp exit3 ret main endp jiemian proc near guang 8,14 clear 6,0,29,0,0,24,79 clear 6,0,4bh,6,12,20,52 clear 6,0,3ah,7,14,19,50 shuchu msg guang 0,0 ret jiemian endp baoshi proc push cx 第 9 页MOV CH,0FFH INT 10H; 置光标类型,隐藏光标cld; 串读取顺序设置next:mov dl,0ffh mov ah,06h int 2
30、1h; 读键盘字符cmp al,r 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 15 页 - - - - - - - - - je A12;比较刚才的输入是否为设置闹铃cmp al,1bh je exit1_1;退出设置next1:mov ah,2ch int 21h; 取系统时间mov bh,10 cmp cl,0 ;比较分钟jne f1 cmp dh,0;比较秒钟jne f1 mov cl,ch;取小时数,以便整点报时mov ch,0 clear 6,0,79,
31、0,0,24,79 shuchu zhengd A: call baoshi call delay12 loop A;调用整点报时call jiemian jmp next ;整点报时结束跳到开始exit1_1:jmp exit1 f1:jmp A11 A12:crlf ;回车换行shuchu mess;输出提示mov bx,0 input_1:mov ah,01h int 21h mov settime+bx,al inc bx cmp bx,9 ;时间为 8 位jne input_1; 输入闹铃时间clear 6,0,29,0,0,24,79; 输入完成后清屏jmp next exit1:
32、jmp exit2 A11:change ch,0,1 wait1:mov cx,3000; 控制音乐快慢节奏,加大则变慢call waitf dec bx jnz wait1 mov al,ah; 存回原来端口信息out 61h,al pop di pop dx pop cx 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 15 页 - - - - - - - - - pop bx pop ax ret sound endp;调用 BIOS发声exit3:jmp ex
33、it4 waitf proc near; 延迟时间push ax waitf1:in al,61h and al,10h cmp al,ah je waitf1 mov ah,al loop waitf1 pop ax ret waitf endp; 音乐延迟程序delay12 proc push bx push cx mov bx,50000; 在机房的电脑上改小些,不然报时间隔太大wat:mov cx,2800 delay2:loop delay2 dec bx jnz wat pop cx pop bx ret delay12 endp;整点报时延迟程序exit4:clear 6,0,0
34、7,0,0,24,79 mov ah,4ch int 21h;ESC退出到 DOS code ends end start 第 11 页第 10 页lea si,fre1 lea bp,tim1 freq0:mov di,si cmp di,-1 je endmus1 mov bx,ds:bp 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 15 页 - - - - - - - - - call sound add si,2 add bp,2 jmp freq0 end
35、mus1:pop cx ret baoshi endp ;整点报时子程序music proc lea si,freq lea bp,time freq1:mov di,si cmp di,-1 je endmus mov bx,ds:bp call sound add si,2 add bp,2 jmp freq1 endmus:jmp f2 ret music endp;闹铃程序音乐sound proc push ax push bx push cx push dx push di mov al,0b6h; 初使化定时器2 out 43h,al mov dx,12h mov ax,348ch; 响的频率div di out 42h,al mov al,ah out 42h,al; 送出数据in al,61h mov ah,al or al,03h out 61h,al; 端口信息保留名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 15 页 - - - - - - - - -
限制150内