(完整word版)字符串动画显示汇编语言程序设计
- 格式:doc
- 大小:226.00 KB
- 文档页数:26
汇编语⾔程序设计第4章汇编语⾔程序设计§4.1 汇编语⾔的模式⼀、汇编语⾔源程序的⼀般模式[Name 模块名][Title 标题][定义宏][定义数据段][定义附加段][定义堆栈段]定义代码段源程序结束中括号括起的部分可以省略,可见在⼀个汇编语⾔源程序中必须要定义代码段,并且必须有源程序结束指令。
⼆、8086汇编语⾔程序的⼀个例⼦Pg90。
§4.2 语句⾏的构成汇编语⾔中的语句⼀般分为两种类型:指令性语句和指⽰性语句。
指令性语句的格式为:[标号:] 助记符 [操作数1[,操作数2]] [;注释]指⽰性语句的格式为:[名称] 助记符 [参数1,参数2,……] [;注释]标号和名称都是编程⼈员根据需要和⼀定的规则任意取的。
也可以认为汇编语⾔的语句⾏是由标记和分隔符(空格)构成。
⼀、标记1.IBM宏汇编的字符集(1)字母(2)数字符(3)特殊字符2.界符⽤于定界⼀个标记的结束或⼀个标记的开始,本⾝具有⼀定的意义。
3.常量出现在汇编语⾔源程序中的固定值称为常量。
(1)数值常量①⼆进制:以字母B结束。
②⼗进制:以字母D或⽆字母结束。
③⼋进制:以字母Q(或O)结束。
④⼗六进制:以字母H结束。
(2)字符常量指⽤单引号或双引号引起的字符或字符串。
4.标识符由程序员⾃⼰建⽴的字符序列(标号或名称)。
⼀个标识符不能超过31个字符,不能以数字开头。
5.保留字汇编语⾔中具有特殊意义的字符序列。
6.注释⼀⾏中分号以后的部分。
⽤于对⼀段或⼀⾏程序进⾏说明,便于阅读和理解。
⼆、符号具有⼀定意义的字符序列。
1.寄存器名2.变量段属性、偏移属性、类型属性3.标号段属性、偏移属性、类型属性4.常数5.其它三、表达式由操作数和运算符组合⽽成的序列。
1.操作数(1)⽴即数(2)寄存器操作数(3)存储器操作数2.运算符(1)算术运算符+、-、*、/、MOD(求余)(2)逻辑运算符AND、OR、NOT、XOR(3)关系运算符EQ、NE、LT、LE、GT、GE结果为“假”时,返回0,结果为“真”时,返回⼆进制全1。
disp macro x,y, lengths,color,flag,varmov ah,13h;fun numbermov al,1;the monitor show modelmov bh,0;page nummov bl,color;colormov cx,lengths;str lengthsmov dh,x;str linemov dl,y;str colife flagmov bp,offset varelsemov bp,varendif;set the bp valueint 10hendm;---------------------------------------data segmentline equ 2color equ 5fh;color_board equ 3Dhline1 db 177,56 dup(177),177line2 db 177,56 dup(' '),177line3 db 177,56 dup(177),177ll equ $-line3xx equ (80-ll)/2line4 db "serial ports com1 and com2 automatic test program "l equ $-line4i equ (80-l)/2;每次右移位显示的起始列号为Ij equ i+l-1;第一次左移位显示的起始列号为Jlorg db j+1lorg1 db l/2+20-3lorg2 db l/2+i+3count dw 0count1 dw 0data ends;-----------------------------CODE SEGMENTASSUME CS:CODE,DS:CODE,es:datastart:MOV AX,CODEMOV DS,AXmov ax,0b800hMOV ES,AXcldAGAIN: MOV AX,3INT 10Hlea dx,MENU ;主菜单mov ah,9int 21hinput:mov ah,0int 16hcp1:cmp al,'1'jnz cp2call sub01 ;字符串左右移动jmp AGAIN ;返回到主菜单cp2:cmp al,'2'jnz cp3call sub02 ;字符串左右移动jmp AGAIN ;返回到主菜单cp3:cmp al,'3'jnz cp4;call sub03 ;字符串左右移动jmp AGAIN ;返回到主菜单cp4:cmp al,'4'jnz cp5;call sub04 ;字符串左右移动jmp AGAIN ;返回到主菜单cp5:cmp al,'5'jnz cp6;call sub05 ;字符串左右移动jmp AGAIN ;返回到主菜单cp6:cmp al,'6' ;返回DOS jnz inputlea dx,MESGmov ah,9int 21hmov ah,1int 21hMOV AH,4CHINT 21Hsub01:;---------------------------------START1:mov ax,datamov ds,axmov es,axmov ax,3int 10h;clear the window;------------------------------disp line+0,xx,ll,color,0,line1disp line+1,xx,ll,color,0,line2disp line+2,xx,ll,color,0,line3;-----------------------------; init the board;左移位loopstr:inc count;每一次左移位或右移位需要打印的字符数mov cx,countdec lorgmov dl,lorg;每次循环减一,使得打印的起始列值左移一位mov bp,offset line4disp line+1,dl,cx,color,1,bp;显示右边的数进行左移位call delay;右移位mov bp,offset line4+l;每次都先使BP指向最后一个字符‘M’的后面一位mov cx,countsub bp,cx;使得BP指向要打印的第一个字符disp line+1,i,cx,color,1,bp;显示右边的数进行右移位call delay;调用延迟子程序cmp count,l;判断是否全部打印结束jne loopstrs: dec countjnz sa:inc lorgcmp lorg,j+1jnz ajmp startmov ah,01h;调用Dos功能的键盘输入mov ah,4ch;结束int 21hRETsub02:mov ax,datamov ds,axmov es,axmov ax,3int 10h;clear the window;------------------------------disp line+0,xx,ll,color,0,line1disp line+1,xx,ll,color,0,line2disp line+2,xx,ll,color,0,line3;-----------------------------; init the board;左移位loopstr1:inc count1;每一次左移位或右移位需要打印的字符数mov cx,count1dec lorg1mov dl,lorg1;每次循环减一,使得打印的起始列值左移一位mov bp,offset line4disp line+1,dl,cx,color,1,bp;显示右边的数进行左移位call delay;右移位mov bp,offset line4+l;每次都先使BP指向最后一个字符‘M’的后面一位mov cx,count1;inc lorg1;mov dh,lorg1sub bp,cx;使得BP指向要打印的第一个字符disp line+1,lorg2,cx,color,1,bp;显示右边的数进行右移位call delay;调用延迟子程序cmp count1,l/2;判断是否全部打印结束jne loopstr1s1: dec count1jnz s1a1:inc lorg1cmp lorg1,l/2+20-3a2:inc lorg2cmp lorg2,l/2+i+3jnz a2jmp startmov ah,01h;调用Dos功能的键盘输入int 21hmov ah,4ch;结束int 21hret;------------------------------;延迟子程序DELAY procpush cxpush dxmov ah,86hd1:mov cx,0ffffh;千分秒,延迟时间loop $dec dxjnz d1mov dx,800int 15hpop dxpop cxRETMENU DB 5 DUP(0AH)DB 31 DUP(' '),'MAIN MENU',0DH,0AHDB 25 DUP(' '),201,21 DUP(205),187,0DH,0AHDB 25 DUP(' '),186,' 1.Origine ',186,0DH,0AH DB 25 DUP(' '),186,' 2.middle1 ',186,0DH,0AH DB 25 DUP(' '),186,' 3.middle2 ',186,0DH,0AH DB 25 DUP(' '),186,' 4.asymchronical ',186,0DH,0AH DB 25 DUP(' '),186,' 5.two lines ',186,0DH,0AH DB 25 DUP(' '),200,21 DUP(205),188,0DH,0AHDB 28 DUP(' '),'Choice(1,2,3,4,5):$'MESG DB 0dh,0ah,0dh,0ah,9,'Press any key to exit ...$' CODE ENDSEND start。
河北科技大学课程设计报告学生姓名:学号:专业班级:电信L122班课程名称:微型计算机原理及应用技术学年学期: 2 0 14 —2 0 15 学年第1 学期同组人员:指导教师:张永强2 0 14年12 月课程设计成绩评定表目录一、设计目的-——-———--——--—--——--—-—--—-—---———-—--—--4二、设计任务与要求--———--——-—------—--—-——————-—----——-4三、小组分工--—--————-——-—-——---————---——-——-—---——-—--—4四、实现方法—-——--——-—————--—————--————--———---——-—--—-—5五、功能效果展示—--——-————------—--——--—————-—---—--—-—6六、心得体会----——--——----————---—--———-——-—————-—--———-9七、参考资料---—-—-——------—--————-—--——-———-—-—----——--10八、附源程序---———-—--—--————-—-------———---———--——-———-11一、设计目的:1、掌握汇编语言,会利用汇编语言编写一定功能的程序;2、熟悉DOS环境以及在DOS下会调试编写好的汇编程序;3、熟悉常用的DOS功能;4、小组合作完成设计题目。
二、设计任务与要求设计内容要求:1、菜单内容包括:①输入字符串;②字符串动画显示;③退出。
2、输入字符串选择该项后,可以输入一个字符串。
该字符串即为动画显示时所显示的字符串。
3、字符串动画显示所显示字符串在一矩形框内从无到有,一半从左另一半从右向中间移动,当两半相遇时停止移动,当按下R键后重复从两边到中间移动的动作,直到按下Q键,停止字符串动画显示返回到主菜单。
4、在主菜单中选择退出项,则结束程序返回DOS。
三、小组分工四、实现方法4.1 MASM编译开发环境实现MASM是微软公司开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,支持80x86汇编以及Win32Asm是Windows下开发汇编的利器。
(完整word版)字符串动画显示汇编语言程序设计目录1总体方案论证 (1)1.1题目功能分析 (1)1。
2算法说明 (1)2流程图设计及说明 (2)2。
1主程序流程图设计 (2)2.2分布具体功能实现流程图设计 (3)2。
2.1字符串右移 (3)2。
2。
2字符串下移 (4)2。
2。
3字符串闪烁 (5)3软件设计关键问题或程序段落说明 (5)3。
1提示输入字符串显示功能实现 (5)3.2向右、向下移动功能实现 (7)3.3字符串大小写变化实现 (9)3.4颜色变化功能实现 (10)3。
5退出功能实现 (10)4调试说明、结果记录及分析 (11)4。
1调试说明 (11)4.2结果记录与分析 (11)4.2。
1 提示输入字符串 (11)4。
2。
2输入后显示字符串 (11)4.2。
3在特定位置从无到有显示 (12)4.2.4在特定位置向右移动 (13)4.2。
5在特定位置向下移动 (13)4。
2.6小写变成大写加闪烁 (14)5课程设计收获及心得 (15)6参考文献 (16)(完整word版)字符串动画显示汇编语言程序设计字符串动画显示汇编语言程序设计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-1 字符串动画总流程图2。
微机原理课设报告学生姓名:常卫洪学号:130704101 专业班级:电子科学与技术131班课程名称:微型计算机原理及应用技术学年学期:2015-2016学年第1 学期指导教师:赵艳2 015年12 月课程设计成绩评定表目录一、设计目的--------------------------------------------4二、设计任务与要求-------------------------------------4三、小组分工--------------------------------------------4四、实现方法--------------------------------------------4五、功能效果展示---------------------------------------11六、改进以及及建意-------------------------------------13七、心得体会---------------------------------------------14八、参考资料--------------------------------------------14九、附源程序--------------------------------------------14一、设计目的:1、掌握汇编语言,会利用汇编语言编写一定功能的程序;2、熟悉DOS环境以及在DOS下会调试编写好的汇编程序;3、熟悉常用的DOS功能;4、小组合作完成设计题目。
二、设计任务与要求设计内容要求:1、菜单内容包括:①输入字符串;②字符串动画显示;③退出。
2、输入字符串选择该项后,可以输入一个字符串。
该字符串即为动画显示时所显示的字符串。
3、字符串动画显示所示字符串在一矩形框内一半从左另一半从右向中间移动,当两半相遇时又分别向两边移动,直至遇到两侧的边框双重新向中间移动,重复上述过程直至按任意键,则停止字符串动画显示返回到主菜单。
实验报告──学年第学期实验课程汇编语言学生姓名123实验项目汇编语言上机过程及屏幕字符显示程序学院计算机科学技术实验性质专业选修课班级学号实验地点同组人数 1 第组实验日期第周星期第节成绩3环境参数Windows xp一、实验目的及要求二、实验原理、实验内容三、实验仪器设备及材料四、操作方法与实验步骤五、实验数据记录及处理六、实验结果分析及讨论一:1、熟练掌握汇编语言的程序格式,程序设计方法;学会使用masm6.11对源程序进行编译、链接、调试和运行2、利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法。
3、利用^Break退出程序的方法及局限性。
4、汇编程序的编写二:实验任务编写一个简化的段定义结构程序:先提示输入数字“Input number:0-9”,然后在下一行显示输入的数字,结束;如果不是键入了0-9 数字,就提示错误“ERROR!”,继续等待输入数字。
源代码:编译连接:实验结果:此程序没按要求将数字在下一行输出。
且程序中用到了多余的指令int 3.修改“done:”段done: mov dl,almov ah,02hint 21h.exit 02.编写一个完整的段定义结构程序:从键盘输入一个字符串(不超过255个),将其中的小写字母转换成大写字母,然后按原来的顺序在屏幕上显示。
要求对以上两个程序,进行编译,链接,调试,运行,给出具体步骤源代码:请问程序中的第39行错误用了一个标号。
编译连接:运行结果:三、小结1、学会使用edit进行程序的编写。
2、学会写简易段程序和完整段程序。
3、学会了在dos下进行汇编程序的编译、连接、调试和运行。
4、学会了使用21号中断的2号9号功能进行字符的显示。
5、汇编基础知识不扎实,指令经常写错,要多练习。
仪器设备损坏、非正常损耗材料(试剂)及处理情况:无教师对报告的最终评价及处理意见:2段程序均有错。
教师签字:年月日。
一、游戏背景介绍随着信息时代的发展,计算机已经变为我们生活中不可缺少的一部分,它作为我们了解世界的一个窗口的同时还可以让我们从中以最快的速度查找学习资源,休闲之余,更多的人选择玩小型的益智游戏来放松,因为它不仅达到了娱乐的目的,而且对自己的思维有一定的帮助作用,根据大多数人的娱乐放松需求,我做出了一款动画游戏——可控的汽车与机器人。
上了一学期的汇编语言课,让我对汇编语言有了一定的认识。
这次课程作业我决定亲自动手用汇编语言编写一个型小程序,熟悉计算机体系结构,加深对汇编语言的了解。
DOS 操作系统的功能调用及BIOS的功能调用。
进一步了解汇编语言控制计算机硬件的方法,以及如何用汇编语言来实现算法,提高应用汇编语言编程的能力,也加深了自己对一些算法的理解,提高了自己的编程能力。
利用汇编语言编写程序,在屏幕上显示动画,还可以通过键盘上的输入来改变图片的位置,实现动画的运动。
动画游戏程序设计的开始屏幕上会出现一辆小车和一个机器人,操作者可自由选择至少两个运动物体(机器人和汽车)在屏幕上运动,一开始汽车与人分别从左向右、从右向左运动,操作者可以通过屏幕上方现实的提示对机器人和小车进行控制。
可以通过键盘上的W、A、S、D和上下左右的方向键来分别控制运动机器人和小车通过W,A,S,D 控制方向,同时整个程序包括人机界面控制台和运动中动画的暂停(空格键控制),开始(ENTER键控制),退出键则由ESC键控制,运动加减速动作(“+”控制逐级加速、“—”控制逐级减速)。
程序插图如图1:图1动画界面示意图屏幕上方是操作提示,用户可与根据提示对汽车和小人进行操控,来改变他俩的运动轨迹。
起先车和小人都是各自运动的一个向左另一个向右,操作者可以通过键盘来改变这两物体的运动轨迹,同时在按键盘上的加号会看见物体的运动速率明显加快,减号则反之。
二、核心算法思想本程序定义了两个图分别表示(汽车和机器人),八个坐标变量(汽车清图坐标car_row0 car_col0 汽车画图坐标car_row1 car_col1机器人清图坐标man_row0 man_col0机器人画图坐标man_row1 man_col1),用于控制汽车和机器人清图和画图的坐标。
以输出字符串为例演示汇编语言程序编译过程文件夹中的DOSbox为安装程序,不是XP系统的同学可以安装此虚拟编译环境,sample.ASM 为举例所用源程序,也可用记事本编好储存为.ASM格式。
一.首先将工程文件映射到D盘,如图所示,出现Drive D is mounted as local directory d:\Project\字样即成功。
二、更改模拟系统的工作区到D盘,如图:三、生成源程序的工程文件,如图:四、生成源程序的exe文件,如图:五、调试程序,出现字符串“Welcome”如图:注意:1.源程序.ASM文件可用记事本打开查看。
2.图中每一步完成之后,点击回车即可往下运行。
3.生成源程序的工程文件的时候检查的错误和警告是针对程序的格式等,如果用文本直接粘贴的可能会失去分行,中文变为乱码,从而出现错误。
4.生成工程文件和exe文件的时候可在文件夹下查看是否出现。
5.Debug的时候在-之后输入g是go运行的意思,其他各种命令在附录给出,并对常用命令查看r,退出q与逐行调试t进行举例说明,如图:黄字部分即为下一行指令,每一行执行之后没有问题都会自动转到第二行。
附录:汇编语言调试DEBUG命令详解1、显示命令D①D [地址]②D [范围]如不指定范围,一次显示8行×16个字节。
-D ;默认段寄存器为DS,当前偏移地址-D DS:100 / -D CS:200-D 200:100-D 200;200为偏移地址,默认段寄存器DS-D DS:100 110/ -D 100 L 102.修改命令E①E 地址;从指定地址开始,修改(或连续修改)存储单元内容。
DEBUG首先显示指定单元内容,如要修改,可输入新数据;空格键显示下一个单元内容并可修改,减号键显示上一个单元内容并可修改;如不修改,可直接按空格键或减号键;回车键结束命令。
②E 地址数据表;从指定的地址开始用数据表给定的数据修改存储单元。
课程设计题目字符串动画显示设计学院自动化学院专业自动化专业班级自动化1004姓名指导教师2013 年 1 月10 日课程设计任务书学生姓名:专业班级:指导教师:教授工作单位:自动化学院题目: 字符串动画显示设计初始条件:掌握8086汇编语言程序设计方法,设计不同的动态显示方式来实现一个字符串定的动画显示,完成相应的程序编写。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、菜单内容包括:①输入字符串;②字符串动画显示;③退出。
2、输入字符串选择该项后,可以输入一个字符串。
该字符串即为动画显示时所显示的字符串。
3、字符串动画显示所显示字符串在一矩形框内从无到有,从右至左移动,完全从框内移出后,又从右至左移动,直到有任意键按下,停止字符串动画显示返回到主菜单。
4、在主菜单中选择退出项,则结束程序返回DOS。
5. 撰写课程设计说明书。
内容包括:摘要、目录、正文、参考文献、附录(程序清单)。
正文部分包括:设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。
时间安排:2012年12月30日----- 12月31日查阅资料及方案设计2013年01月01日----- 01月05日编程2013年01月06 日----- 01月08日调试程序2013年01月09 日----- 01月10日撰写课程设计报告指导教师签名:2013 年01 月11 日系主任(或责任教师)签名:年月日摘要 (1)1 总体方案论证 (2)1.1题目功能 (2)1.2算法分析 (2)2 流程图设计及说明 (3)2.1主程序流程图 (3)2.2菜单流程图 (4)2.3字符串输入流程图 (5)2.4字符串左移流程图 (6)2.5按任意键返回菜单流程图 (7)3 软件设计关键问题或程序段落说明 (8)3.1提示退出或继续功能实现 (8)3.2字符串输入功能实现 (8)3.3字符左移程序实现 (9)3.4按任意键返回菜单的实现 (10)3.5延时函数的实现 (11)4 结果记录及分析 (12)4.1提示窗口 (12)心得体会 (14)参考文献 (15)附录:程序清单 (16)本设计使用汇编语言,在MF2KP平台上实现了字符串的输入并且动画显示的效果。
实验三汇编语言程序设计——字符与数据的操作(二)
一、实验目的:
1.掌握显示提示信息的方法及接收键盘输入信息的方法,完成字符串匹配程序。
2.掌握字符和数据的显示方法,完成字符和数据的显示程序。
3.了解小写字母和大写字母在计算机内的表示方法,并掌握如何进行转换,完成将键盘输入的小写字母转换成大写字母。
二、实验内容:
1. 编写程序,先显示信息“INPUT STRING ,THE END FLAG IS $”,再接收字符。
如为非数字字符即非“0——9”,则计数器加1,并显示字符。
如为数字,则直接显示,但不计数。
2.编写程序,接收键盘字符(以^-C为结束),并将其中的大写字母转变为小写字母,然后进行显示。
三、实验原理
1.DB、 DUP、 EQU等伪指令的功能以及使用格式;INT 21H 的09H子功能的功能、工作情况以及使用格式;INT 21H的0AH子功能的功能、工作情况以及使用格式;串扫描指令SCASB的功能以及使用格式;入栈、出栈指令PUSH 、POP的使用情况。
2.程序跳转指令JMP的功能及用法;比较指令CMP 、JB、 JBE 等指令的功能及用法;循环移位指令ROL的用法及功能;逻辑指令AND的功能及用法。
3.比较指令JA的功能及用法;减法指令SUB的功能及用法。
四、程序框图
五、实验步骤
1.按实验要求编写程序
2.汇编连接程序生成可执行文件 3.执行程序观察结果。
目录1总体方案论证 (1)1.1题目功能分析 (1)1.2算法说明 (1)2流程图设计及说明 (2)2.1主程序流程图设计 (2)2.2分布具体功能实现流程图设计 (3)2.2.1字符串右移 (3)2.2.2字符串下移 (4)2.2.3字符串闪烁 (5)3软件设计关键问题或程序段落说明 (5)3.1提示输入字符串显示功能实现 (5)3.2向右、向下移动功能实现 (7)3.3字符串大小写变化实现 (9)3.4颜色变化功能实现 (10)3.5退出功能实现 (10)4调试说明、结果记录及分析 (11)4.1调试说明 (11)4.2结果记录与分析 (11)4.2.1 提示输入字符串 (11)4.2.2输入后显示字符串 (12)4.2.3在特定位置从无到有显示 (12)4.2.4在特定位置向右移动 (13)4.2.5在特定位置向下移动 (13)4.2.6小写变成大写加闪烁 (14)5课程设计收获及心得 (15)6参考文献 (16)字符串动画显示汇编语言程序设计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主程序流程图设计开始段地址初始化进入Dos窗口输出提示信息输入字符串显示输入字符串字符串右移字符串向下移动字符串小写变大写三色变换闪烁N按Q,q?Y结束图2-1 主程序流程图图2-1 字符串动画总流程图2.2分布具体功能实现流程图设计2.2.1字符串右移结束输完? 获取字符串YY N图2-2 字符串右移流程图开始输出字符串设置光标起始位置 延迟1输出空白覆盖字符串延迟2结束?N横坐标更新结束输完? 获取字符串YY N图2-3 字符串下移流程图开始输出字符串设置光标起始位置 延迟1输出空白覆盖字符串延迟2结束?N纵坐标更新3软件设计关键问题或程序段落说明3.1提示输入字符串显示功能实现屏幕提示输入字符串主要运用中断INT 21H 的0A H 功能,输入后回车则完成字符串在特定位置的显示。
另外,在此段程序中,还通过用空字符串的逐个显示来完成字符从无到有的功能实现。
lea dx ,bufmov ah ,0ah结束Y 图2-4 字符串闪烁流程图N获取字符串开始N是否输完? Y 输出字符串设置起始位置 延迟1设置字符串颜色次数已到?mov bx,2;多字符输入,回车结束,有效内容自第三个始。
mov di,0B1:mov al,buf[bx]cmp al,13;是否是回车?je AG1mov buff1[di],alinc bxinc dijmp B1AG1:mov ah,0mov al,2int10h;黑白文本OTHER:mov cx,0ffffh;AG:mov dh,7;hangmov dl,35;liemov ah,2mov bh,0;页号为0int10h;置光标位置lea dx,buff1mov ah,9int21h;显示字符串mov dh,7mov ah,2mov bh,0int10h;置光标位置lea dx,buff2mov ah,9int21h;sub cx,1;jnz AG ;不等于转移3.2向右、向下移动功能实现如流程图可知,向下和向右移动,程序基本相同,只不过一个改变的是行,另一个改变的是列,以下以向右移动为例。
主要通过INT 10H 调用,且循环操作一定次数实现。
其中,在下一次输出时,为了清除前一个位置的输出,用空字符串替代。
另外,通过延时控制移动速度。
程序如下:mov al,3mov ah,0int10h;16色文本mov dl,0;字符串向右移动, 给出起始列bbb2:MOV SI,OFFSET buff1mov di,0bbb1:mov dh,7;dh hang dl lieinc dlmov ah,2int10h;置光标位置2号置光标位置9号指定输出,每次显示一个mov ah,09;9号功能inc dimov al,[si]inc simov bh,0;显示页mov bl,0eh;colormov cx,01;显示字符的次数int10hcmp di,0fh; 立即数大小取决于字符串大小jb bbb1call delay1sub dl,0fh; 设置列mov SI,OFFSET buff2mov di,0ccc1:mov dh,7;dh hang dl lieinc dlmov ah,2int10h;置光标位置mov ah,09;9号功能inc dimov al,[si]inc simov bh,0;显示页mov bl,0eh;colormov cx,01;字符重复一次int10hcmp di,0fhjb ccc1call delay2; mov ah,07; int 21h 首先在一个位置输出然后输出空白覆盖掉在输出下一个位置cmp dl,25jnb xiangxia ; 在这里跳出右移,转到向下sub dl,0dhjmp bbb23.3字符串大小写变化实现因为在ASC 表中大小写相差20H,所以通过将输入字符与‘a’和‘z’比较,若为小写字母,则减去20H,否则不变。
程序如下:daxiaoxie:mov dl,7mov dh,35MOV SI,OFFSET buff1mov di,0a1:mov al,[SI]cmp al,'$'je shansuocmp al,'a'jb nextcmp al,'z'ja nextsub al,20hmov [SI],alnext:inc SIjmp a13.4颜色变化功能实现颜色变化功能实现相当于对字符串属性定义,表现出颜色差别,然后循环调用并插入延时。
以下程序效果是三种颜色闪烁,其中aaa1表示黄色,aaa2表示绿色,aaa3表示红色。
具体程序如下:shansuo: ;三种颜色闪烁call aaa1call delay1call aaa2call delay1 ;内部转换后还是用BIOS 10h 9号功能调用call aaa3call delay1jmp shansuo3.5退出功能实现退出功能通过将输入‘Q’和‘q’与其ASC 比较,跳转到退出程序;而退出程序主要通过INT 21H的4C H功能实现。
mov ah,08h;q键退出int21Hcmp AL,'Q'je exitcmp AL,'q'je exitexit: mov ah,4chint21h4调试说明、结果记录及分析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 segmentbuff1 db ' $'buff2 db ' $'buf db100dup('$')buff3 db 'please input a string !',13,10,'$'buff4 db 'Press Q or q to exit!',13,10,'$'data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlea dx,buff3;显示提示信息mov ah,09hint21hlea dx,buff4;显示提示信息mov ah,09hint21hlea dx,bufmov ah,0ahint21hmov bx,2;多字符输入,回车结束,有效内容自第三个始。