目 录
1总体方案论证 1
1.1
目功能
1
1.2算法说明 2
2流程图
及说明 3
2.1主程序流程图设计 3
2.2分布具体功能实现流程图设计 4
2.2.1字符串右移 4
2.2.2字符串下移 5
2.2.3字符串闪烁 6
3软件设计关键问题或程序段落说明 6
3.1提示输入字符串显示功能实现 6
3.2向右、向下移动功能实现 7
3.3字符串大小写变化实现 9
3.4颜色变化功能实现 9
3.5退出功能实现 9
4调试说明、结果
及分析 10
4.1调试说明 10
4.2结果记录与分析 10
4.2.1 提示输入字符串 10
4.2.2输入后显示字符串 11
4.2.3在特定位置从无到有显示 11
4.2.4在特定位置向右移动 12
4.2.5在特定位置向下移动 12
4.2.6小写变成大写加闪烁 13
5课程设计收获及心得 14
6参考文献 14
字符串动画显示汇编语言程序设计
1总体方案论证
1.1题目功能分析
(1)屏幕提示输入字符串;
(2)输入完成后,字符动画显示,显示方式可为:从无到有,从左到右,从上到下,大小写变化、颜色变化等;
(3)可连续显示或定时显示,直至单击“Q”或“q”键退出程序。
1.2算法说明
(1)屏幕提示输入字符串主要运用中断INT 21H的0A H功能;
(2)在确定光标位置后,通过循环改变其行列数值来达到左右上下移动功能;
大小写变化则通过将输入字符与‘a’和‘z’比较,若为小写字母,则减去20H,否 则不变;
颜色变化则通过INT 10H的09H功能循环调用实现;
(3)退出功能通过将输入‘Q’和‘q’与其ASC
比较,跳转到退出程序;而退出程序主 要通过INT 21H的4C H功能实现。
2流程图设计及说明
2.1主程序流程图设计
图2-1 字符串动画总流程图
2.2分布具体功能实现流程图设计
2.2.1字符串右移
2.2.2字符串下移
2.2.3字符串闪烁
3软件设计关键问题或程序段落说明
3.1提示输入字符串显示功能实现
屏幕提示输入字符串主要运用中断INT 21H的0A H功能,输入后回车则完成字符串在特定位置的显示。另外,在此段程序中,还通过用空字符串的逐个显示来完成字符从无到有的功能实现。
lea dx,buf
mov ah,0ah
int 21h
mov bx,2 ;多字符输入,回车结束,有效内容自第三个始。
mov di,0
B1:
mov al,buf[bx]
cmp al,13 ;是否是回车?
je AG1
mov buff1[di],al
inc bx
inc di
jmp B1
AG1:
mov ah,0
mov al,2
int 10h;黑白文本
OTHER:
mov cx,0ffffh;
AG:
mov dh,7 ;hang
mov dl,35 ;lie
mov ah,2
mov bh,0 ;页号为0
int 10h ;置光标位置
lea dx,buff1
mov ah,9
int 21h ;显示字符串
mov dh,7
mov dl,35
mov ah,2
mov bh,0
int 10h ;置光标位置
lea dx,buff2
mov ah,9
int 21h;
sub cx,1 ;
jnz AG ;不等于转移
3.2向右、向下移动功能实现
如流程图可知,向下和向右移动,程序基本相同,只不过一个改变的是行,另一个改变的是列,以下以向右移动为例。主要通过INT 10H 调用,且循环操作一定次数实现。其中,在下一次输出时,为了清除前一个位置的输出,用空字符串替代。另外,通过延时控制移动速度。程序如下:
mov al,3
mov ah,0
int 10h ;16色文本
mov dl,0 ;字符串向右移动, 给出起始列
bbb2:
MOV SI,OFFSET buff1
mov di,0
bbb1:
mov dh,7 ;dh hang dl lie
inc dl
mov ah,2
int 10h ;置光标位置 2号置光标位置 9号指定输出,每次显示一个
mov ah,09 ;9号功能
inc di
mov al,[si]
inc si
mov bh,0 ;显示页
mov bl,0eh ;color
mov cx,01 ;显示字符的次数
int 10h
cmp di,0fh ; 立即数大小取决于字符串大小
jb bbb1
call delay1
sub dl,0fh ; 设置列
mov SI,OFFSET buff2
mov di,0
ccc1:
mov dh,7 ;dh hang dl lie
inc dl
mov ah,2
int 10h ;置光标位置
mov ah,09 ;9号功能
inc di
mov al,[si]
inc si
mov bh,0 ;显示页
mov bl,0eh ;color
mov cx,01 ;字符重复一次
int 10h
cmp di,0fh
jb ccc1
call delay2
; mov ah,07
; int 21h 首先在一个位置输出 然后输出空白覆盖掉在输出下一个位置
cmp dl,25
jnb xiangxia ; 在这里跳出右移, 转到向下
sub dl,0dh
jmp bbb2
3.3字符串大小写变化实现
因为在ASC
表中大小写相差20H,所以通过将输入字符与‘a’和‘z’比较,若为小写字母,则减去20H,否则不变。程序如下:
daxiaoxie:
mov dl,7
mov dh,35
MOV SI,OFFSET buff1
mov di,0
a1:
mov al,[SI]
cmp al,'$'
je shansuo
cmp al,'a'
jb next
cmp al,'z'
ja next
sub al,20h
mov [SI],al
next:inc SI
jmp a1
3.4颜色变化功能实现
颜色变化功能实现相当于对字符串属性定义,表现出颜色差别,然后循环调用并插入延时。以下程序效果是三种颜色闪烁,其中aaa1表示黄色,aaa2表示绿色,aaa3表示红色。具体程序如下:
shansuo: ;三种颜色闪烁
call aaa1
call delay1
call aaa2
call delay1 ;内部转换后 还是用BIOS 10h 9号功能调用
call aaa3
call delay1
jmp shansuo
3.5退出功能实现
退出功能通过将输入‘Q’和‘q’与其ASC
比较,跳转到退出程序;而退出程序主要通过INT 21H的4C H功能实现。
mov ah,08h;q键退出
int 21H
cmp AL,'Q'
je exit
cmp AL,'q'
je exit
exit: mov ah,4ch
int 21h
4调试说明、结果记录及分析
4.1调试说明
所谓程序调试,是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。这是保证计算机信息系统正确性的必不可少的步骤。编完计算机程序,必须送入计算机中测试。
调试过程中出现很多问题。很多次,程序更改后得不到目标文件,主要原因是编程过程中不够细心,而且没有整体把握。例如,有段名重复的错误,还有对调用不熟悉造成编程过程很痛苦。
4.2结果记录与分析
4.2.1 提示输入字符串
以下是在运行程序后窗口出现的界面,提示输入字符串以及按‘Q’或‘q’退出。如图3.1:
图3.1 提示输入字符串
4.2.2输入后显示字符串
以下是输入字符串后按回车前显示的界面。如图3.2:
图3.2 输入字符串
4.2.3在特定位置从无到有显示
以下是按完回车键后依照程序设定位置,光标先跳到第七行、第三十五列,然后逐个字符循环显示字符串的界面对比。如图3.3:
图3.3 字符串从无到有
4.2.4在特定位置向右移动
以下是字符串从第七行、第零列开始右移的对比界面。如图3.4:
图3.4 字符串右移
4.2.5在特定位置向下移动
以下是字符串从第七行、第零列开始下移的对比界面。如图3.5:
图3.5 字符串下移
4.2.6小写变成大写加闪烁
以下是字符串中所有小写字母变成大写后进行黄、绿、红依次变化现象对比界面。如图3.6:
图3.6 字符串颜色变化
5课程设计收获及心得
学完《微机原理与接口技术》,本以为自己学到的东西挺多,直到课程设计开始,才深刻了解到自己似乎只了解个皮毛。作为微原中的核心,汇编语言的程序设计在课程学习中只有一章,而且书本上的例题与这次课程设计任务相比,难度不大。
几乎整整一周的微原课程设计结束,对于我,感受颇深,收获颇多。除了一些以前学过的指令,最深的感触是对中断INT 21H和INT 10H中一些常用功能的运用。
经过此次课程设计,我通过自己查资料、自己设计编程到最后完成功能实现,最终的成就感比平时更大,因为我感受到了学以致用,将理论用于实际的效果。
在以后的学习中,我会继续保持这样良好的态度对待任何学习,不论是课程设计还是实习,抑或只是平时课程学习,我将为了提高自身实践能力而有目的的学习与收获,而不仅仅是为了应付考试或者拿到学位证。
6参考文献
[1] 彭虎等编著.微机原理与接口技术(第二版).北京:电子工业出版社,2008
[2] 沈美明,温东禅.IBM-PC汇编语句程序设计(第2版).北京:清华大学出版社,2001
[3] 任向明,卢惠林.汇编语言程序设计实用教程.北京:清华大学出版社,2009
[4] 马力妮.80x86汇编语言程序设计.北京:机械工业出版社,2004
[5] 艾德才.Pentium系列微型计算机原理与接口技术.北京:高等教育出版社,2000
附录:程序清单
data segment
buff1 db ' $'
buff2 db ' $'
buf db 100 dup('$')
buff3 db 'please input a string !',13,10,'$'
buff4 db 'Press Q or q to exit!',13,10,'$'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
lea dx,buff3;显示提示信息
mov ah,09h
int 21h
lea dx,buff4;显示提示信息
mov ah,09h
int 21h
lea dx,buf
mov ah,0ah
int 21h
mov bx,2 ;多字符输入,回车结束,有效内容自第三个始。
mov di,0
B1:
mov al,buf[bx]
cmp al,13 ;是否是回车?
je AG1
mov buff1[di],al
inc bx
inc di
jmp B1
AG1:
mov ah,0
mov al,2
int 10h;黑白文本
OTHER:
mov cx,0ffffh;
AG:
mov dh,7 ;hang
mov dl,35 ;lie
mov ah,2
mov bh,0 ;页号为0
int 10h ;置光标位置
lea dx,buff1
mov ah,9
int 21h ;显示字符串
mov dh,7
mov dl,35
mov ah,2
mov bh,0
int 10h ;置光标位置
lea dx,buff2
mov ah,9
int 21h;
sub cx,1 ;
jnz AG ;不等于转移
;*********************************************************
mov al,3
mov ah,0
int 10h ;16色文本
mov dl,0 ;字符串向右移动, 给出起始列
bbb2:
MOV SI,OFFSET buff1
mov di,0
bbb1:
mov dh,7 ;dh hang dl lie
inc dl
mov ah,2
int 10h ;置光标位置 2号置光标位置 9号指定输出,每次显示一个
mov ah,09 ;9号功能
inc di
mov al,[si]
inc si
mov bh,0 ;显示页
mov bl,0eh ;color
mov cx,01 ;显示字符的次数
int 10h
cmp di,0fh ; 立即数大小取决于字符串大小
jb bbb1
call delay1
;*********************************************************
sub dl,0fh ; 设置列
MOV SI,OFFSET buff2
mov di,0
ccc1:
mov dh,7 ;dh hang dl lie
inc dl
mov ah,2
int 10h ;置光标位置
mov ah,09 ;9号功能
inc di
mov al,[si]
inc si
mov bh,0 ;显示页
mov bl,0eh ;color
mov cx,01 ;字符重复一次
int 10h
cmp di,0fh
jb ccc1
call delay2
; mov ah,07
; int 21h 首先在一个位置输出 然后输出空白覆盖掉在输出下一个位置
cmp dl,25
jnb xiangxia ; 在这里跳出右移, 转到向下
sub dl,0dh
jmp bbb2
xiangxia: ;字符串向下移动
mov dl,0
mov dh,7 ;dh hang dl lie
ddd2:
MOV SI,OFFSET buff1
mov di,0
eee1:
inc dl
mov ah,2
int 10h ;置光标位置
mov ah,09 ;9号功能
inc di
mov al,[si]
inc si
mov bh,0 ;显示页
mov bl,0ah ;color
mov cx,01 ;字符重复一次
int 10h
cmp di,0fh
jb eee1
call delay1
sub dl,0fh ; 列回到原处,输出空白覆盖
MOV SI,OFFSET buff2
mov di,0
fff1:
inc dl
mov ah,2
int 10h ;置光标位置
mov ah,09 ;9号功能
inc di
mov al,[si]
inc si
mov bh,0 ;显示页
mov bl,0eh ;color
mov cx,01 ;字符重复一次
int 10h
cmp di,0fh
jb fff1
call delay2
cmp dh,13 ;从第7行 下移到13行 退出到大小写转换
jnb daxiaoxie
inc dh
sub dl,0fh
jmp ddd2 ;字符串向下移动 结束
daxiaoxie:
mov dl,7
mov dh,35
MOV SI,OFFSET buff1
mov di,0
a1:
mov al,[SI]
cmp al,'$'
je shansuo
cmp al,'a'
jb next
cmp al,'z'
ja next
sub al,20h
mov [SI],al
next:inc SI
jmp a1
shansuo: ;三种颜色闪烁
call aaa1
call delay1
call aaa2
call delay1 ;内部转换后 还是用BIOS 10h 9号功能调用
call aaa3
call delay1
MOV AH,08h;q键退出
INT 21H
cmp AL,'Q'
je exit
cmp AL,'q'
je exit
jmp shansuo
exit: mov ah,4ch
int 21h
;*********************************************************
aaa1 proc near ;黄色
MOV SI,OFFSET buff1
mov di,0
mov dl,20
aa1:
mov dh,20 ;dh hang dl lie
inc dl
mov ah,2
int 10h ;置光标位置
mov ah,09 ;9号功能
inc di
mov al,[si]
inc si
mov bh,0 ;显示页
mov bl,0eh ;color
mov cx,01 ;字符重复一次
int 10h
cmp di,0ch
jb aa1
ret
aaa1 endp
;******************************************************
aaa2 proc near ;绿色
MOV SI,OFFSET buff1
mov di,0
mov dl,20
aa2:
mov dh,20 ;dh hang dl lie
inc dl
mov ah,2
int 10h ;置光标位置
mov ah,09 ;9号功能
inc di
mov al,[si]
inc si
mov bh,0 ;显示页
mov bl,0ah ;color
mov cx,01 ;字符重复一次
int 10h
cmp di,0ch
jb aa2
ret
aaa2 endp
;********************************************************
aaa3 proc near ;红色
MOV SI,OFFSET buff1
mov di,0
mov dl,20
aa3:
mov dh,20 ;dh hang dl lie
inc dl
mov ah,2
int 10h ;置光标位置
mov ah,09 ;9号功能
inc di
mov al,[si]
inc si
mov bh,0 ;显示页
mov bl,05h ;color
mov cx,01 ;字符重复一次
int 10h
cmp di,0ch
jb aa3
ret
aaa3 endp ;三种颜色闪烁
;**********************************************************
delay1 proc near
push cx
push bx
mov bx,1fffh
wait4: mov cx,0ffffh
wait5: loop wait5
dec bx
jnz wait4
pop bx
pop cx
ret
delay1 endp
; 延迟1 比延迟二长
;*********************************************************
delay2 proc near
push cx
push bx
mov bx,0ffh
wait2: mov cx,0ffffh
wait3: loop wait3
dec bx
jnz wait2
pop bx
pop cx
ret
delay2 endp ;字符串向右移动结束
code ends
end start
本科生课程设计成绩评定表
姓 名
张丹
性 别
女
专业、班级
自动化专业、自动化0805班
课程设计题目:字符串动画显示汇编语言程序设计
课程设计答辩或质疑记录:
成绩评定依据:
详见成绩评分表
最终评定成绩(以优、良、中、及格、不及格评定)
指导教师签字:
年 月 日
成绩评分表
项目
评分标准
得分
课
程
设
计
说
明
书
撰
写
60分
方案
论证
10分
能正确分析设计内容,算法选择合理,并有详细的说明、论证。
10≥X≥8
能分析设计内容,算法选择满足设计要求,有简单说明
7≥X≥4
设计方案不太满足设计内容及要求,无说明
3≥X≥0
流程图
设计
10分
流程设计正确,并有详细的说明,流程图绘制规范
10≥X≥8
流程设计符合设计内容及要求,并有一定说明,流程图绘制正确
7≥X≥4
流程设计不太满足设计内容及要求,且无说明,流程图绘制不太正确
3≥X≥0
软件
设计
说明
10分
程序设计关键问题或段落有详细说明,程序代码正确
10≥X≥8
程序设计关键问题或段落有说明,程序代码基本正确
7≥X≥4
程序设计关键问题或段落基本无说明,程序代码不完整或不太满足设计要求
3≥X≥0
结果
分析
10分
能正确记录调试结果,并能分析结果,给出合理的建议
10≥X≥8
能记录调试结果,并加以分析
7≥X≥4
记录调试结果,但无分析
3≥X≥0
心得
体会
10分
基本上真实、客观地反映了本人课程设计的收获、心得
10≥X≥6
无感而发,空洞,套话。
5≥X≥0
规范
10分
完全按照报告格式要求,内容充实、详细,完全符合规范
10≥X≥8
基本按报告格式要求,内容完整,基本符合规范
7≥X≥4
未按报告格式要求,不太符合规范
3≥X≥0
程序调试
10分
程序上机调试运行结果完全正确
10≥X≥8
程序上机调试运行结果基本满足设计要求
7≥X≥4
程序上机调试运行结果不太满足设计要求
3≥X≥0
设计答辩
10分
能详细完整地表述设计内容,并能正确回答问题
10≥X≥8
能完整地表述设计内容,并能回答相关问题
7≥X≥4
基本表述设计内容,但不能回答相关问题
3≥X≥0
难度分值
10分
一~三题:7分 四~七题:8分
八~十二题:9分 十三~十七题:10分
纪律及考勤
10分
按照课程设计进度安排完成课程设计任务,按时参加中期检查及答疑、程序演示及答辩环节。缺席一次扣5分。
总评分数
优秀(100~90)
良好(89~80)
中等(79~70)
及格(69~60)
不及格(60以下)