汇编.docx
《汇编.docx》由会员分享,可在线阅读,更多相关《汇编.docx(18页珍藏版)》请在冰豆网上搜索。
![汇编.docx](https://file1.bdocx.com/fileroot1/2023-2/7/f58c7cc8-1de3-4849-b3fc-c9a14c43766e/f58c7cc8-1de3-4849-b3fc-c9a14c43766e1.gif)
汇编
JIANGSUTEACHERSUNIVERSITYOFTECHNOLOGY
汇编语言实验报告
学院名称:
计算机工程学院
专业:
计算机技术与应用
班级:
10计2Z
姓名:
徐玲玲
学号:
10141224
2012年12月
目录
1.绪论
2.概要设计
2.1系统总体分析
2.2设计流程图及说明
3.详细设计
3.1主模块及子模块说明
3.2功能模块详细设计
4.程序调试
4.1运行界面分析
4.2运行结果界面
4.3算法的分析
4.4调试过程及分析
5.心得体会
5.1设计体会
5.2系统改进
参考文献
附录
打印出一个文字
摘要:
本课程设计师通过使用汇编语言来完成的,具体实现的方法可以通过在MASM使用环境下运行,也可以通过在DOS环境下完成。
我做的课程设计是通过编写语言程序,实现一个文字的显示。
我显示的字符是“仁”,主要使用了汉字库16点阵画点法来实现汉字的显示,在程序设计中,首先确定了文字的显示位置,为在显示的时候能够显示较好的效果,打下了基础。
接着程序的编写,在编写过程中对于一些陌生的操作都进行了注释,最后调试出所要求的文字。
本程序可以再DOS环境和MASM环境下运行,要求我们熟悉BIOS中断10的各种功能。
整个程序设计的过程,是一个不断学习、不断实践的过程,从而提高了我们的编程能力和程序开发思想,也提高了我们自主学习的能力。
关键词:
文字显示,10号中断,BIOS
Abstract:
thecurriculumdesignerthroughtheuseofassemblylanguagetocomplete,thespecificimplementationofthemethodcanbeusedinMASMenvironmentrunning,canalsopassinDOSenvironment.Idocurriculumdesignisbywritinglanguageprogram,therealizationofatextdisplay.Ishowthecharacteris"benevolence",themainuseofChinesecharacterslibrary16latticepointmethodtorealizetheChinesecharactersdisplay,intheprogramdesign,firstdeterminethetextdisplayposition,aswhendisplayedtoshowgoodeffect,laidafoundation.Thentheprogram,inthepreparationprocessforsomestrangeoperationforannotation,thefinalcommissioningoftherequiredtext.ThisprocedurecanbeDOSenvironmentandtheMASMenvironmentrunning,askwearefamiliarwiththevariousfunctionsofBIOSinterrupt10.Thewholeprocessofprogramdesign,isacontinuouslearning,continuouspracticeprocess,therebyimprovingourabilityofprogrammingandprogrammingideas,improveourabilityofindependentlearning.
Keywords:
textdisplay,10,interrupt,BIOS
1.绪论
在课程设计之前,首先要明确设计的目的。
本次课程设计的题目是一个文字的显示,要求我们能够编写一个汇编程序,正确的显示所要求的汉字。
这就需要我们对汇编指令有一定的了解,通过课程设计,我们能更深入的了解汇编程序的基本框架,更熟练的运用汇编指令。
在本课程设计中,还着重运用了BIOS10号中断调用及其功能,这就要求我们在这一个小模块有更深的学习。
通过课程设计,可以提高我们的动手能力,培养我们对编程及学习的兴趣。
通过编写程序使我们对指令的应用更加熟练。
同时,也使我们对masmedit软件和dos命令有了更多的学习和了解。
目的在于培养我们的自主学习能力和动手能力,提高我们的编程水平。
在课程设计中,我们也要学会交流,与同学之间互相取长补短,达到共同进步,达到想要达到进步的目的。
Masmforwindows集成实验环境是从事一线教学的大学教师针对汇编语言初学者的特点开发的一个简单易用的汇编语言学习与实验软件,支持32位与4位的WINDOWS7,支持DOS的16/32位汇编程序和Windows下的32汇编程序(并提供调试通过的35个WINDOWS汇编程序实例源代码),它具有错误信息自动定位、关键字实时帮助并且在帮助中动画演示汇编指令的执行过程、语法着色、无限次撤消与恢复、WORD式的查找、替换、定位、支持中文、长文件名等功能。
2.概要设计
2.1系统总体分析
本程序是显示一个文字的程序,我显示的字符是“仁”,主要使用了汉字库16点阵画点法来实现汉字的显示,在程序设计中,首先确定了文字的显示位置,为在显示的时候能够显示较好的效果,打下了基础。
通过16点阵的设计,点出“仁”这个汉字,得以显示出来。
为了清晰地看到每一个字,需要放大,程序中编写了放大功能的程序。
此外,程序中还有清屏子程序,通过适当的改变放大位置,可实现图形的放大。
2.2设计流程图及说明
3.详细设计
3.1主模块及子模块说明
本程序是通过16点阵的设计显示一个文字的程序,我显示的字符是“仁”,主要使用了汉字库16点阵画点法来实现汉字的显示,在程序设计中,首先确定了文字的显示位置,为在显示的时候能够显示较好的效果,打下了基础。
为了清晰地看到每一个字,需要放大,程序中编写了放大功能的程序。
此外,程序中还有显示子程序showprocnear,清屏子程序clearsprocnear,通过适当的改变放大位置,可实现图形的放大。
3.2功能模块详细设计
1、“仁”字的定义
rendw300h,0,3c0h,0c0h,33fh,0fff0h,0f00h,0,0c00h,0,3c00h,0,0cc00h,0,0c00h,0,0c00h,0,0c00h,0,0c0,0h,0,0c00h,0h,0cffh,0fffch,0c00h,0,0c00h,0,0,0
2、字的初始化(初始位置,字体大小……)
rowdw50
coldw50
offdw36;每次要增加的距离
lp1numdb0
lp2numdb2
lp3numdb0;第3层循环的次数,最大为16
lp4numdb0
lp5numdb0
cmpnumdw8000h
ndb1;设置字体大小,默认一个象素画一个点
3、设置屏幕显示方式320*200彩色方式
movah,0h
moval,04h
int10h;调用中断
movah,0bh;置彩色调色板ID
movbh,0h
movbl,1;和ID配套使用的颜色
int10h;调用中断
movah,0bh
movbh,01h
movbl,0
int10h;调用中断
4、功能设计
输入“q”则为退出程序,输入“+”则为放大文字。
keyacc:
movah,0
int16h
cmpal,'q'
jeexit;结果相等则转移
cmpal,'+'
jeenlarge
jmpkeyacc
enlarge:
incn;n+1
cmpn,8
jbegons;判断不高于则转移
decn;n-1
gons:
jmpxiansh
.
.
.
clearsprocnear
pushax
pushbx
movah,0fh
int10h
movah,0
int10h
popbx
popax
ret
clearsendp
codeends
endstart
4.程序调试
4.1运行界面分析
本程序可以在masm环境下运行,也可在DOS环境下运行,Masmforwindows集成实验环境是从事一线教学的大学教师针对汇编语言初学者的特点开发的一个简单易用的汇编语言学习与实验软件,支持最新操作系统WINDOWS7,支持DOS的16/32位汇编程序和Windows下的32汇编程序(并提供调试通过的35个WINDOWS汇编程序实例源代码),它具有错误信息自动定位、关键字实时帮助并且在帮助中动画演示汇编指令的执行过程、语法。
4.2运行结果界面
4.3算法的分析
本次设计的思想便是利用点点来拼凑一个图形,调用放大子程序循环的输出不同位置的,直到所需的汉字字输出完,汉字的最终结果也就显示出来了。
需要注意的是,汉字的大小由它前一次大小的基础放大确定。
4.4调试过程及分析
本程序可以在DOS环境和MASM环境下运行,在DOS环境下运行,首先用masm命令将源程序.asm进行编译,生成.obj文件;其次,用Link命令进行连接,产生.exe文件;最后进入debug,用-g命令进行调试运行。
值得注意的是,各个阶段产生的目标文件的文件格式不同,因此在输入命令的时候,要注意文件的后缀名。
若是在MASMEDIT软件下运行,则只需点击相应的功能按钮即可。
用MASMEDIT软件运行的界面友好,视觉效果相对于DOS界面要好看。
5.心得体会
5.1设计体会
这次课程设计总体来说做得比较顺利。
在设计前期,我翻阅了很多资料,加深了对汇编语言的学习,基本掌握了怎样运用汇编语言去设计字符图形,并制作出相应的流程图。
程序中主要用到显示输出管理10号中断调用及其多种功能。
我就这方面进行了深入的学习,掌握了各个功能的运用。
在设计前期,我查找了相关书记和资料,更加深入的学习了汇编指令和中断调用的知识,能够得以应用,并根据流程图,设计出程序的大概框架;在设计的中期,我将各个模块细化,并编写了子程序,并将主程序和子程序进行衔接;在设计的后期,我认真的检查了程序调用和参数传递等细节,保证程序的正确性。
通过课程设计,我领悟到我们应该有一个缜密的编程思想,在编程过程中,首先要对整体程序有一个初步的框架构想,然后根据所学的知识,活用指令,能够使程序更加精简,这就要求我们对指令要熟悉。
在日常生活中,可以通过编写一些小的程序,来熟悉指令的使用和记忆。
在设计过程中也遇到了一些困难,通过和老师、同学的讨论和学习,最终程序得以完成,所以,在完成每一件事情时,不能忽略团队的力量,应当吸取各人的优势,来使自己更加完善。
5.2系统改进
虽然本程序基本满足了本次课程设计的要求,但其中依然有很多需要改进的地方。
可以通过对BIOS10号中断的深入学习,使得界面更加美化。
还有代码的简化,可以从平时的编程或者学习中,找到更好的方法来优化程序。
程序中的子程序只是字符显示的部分功能,可以加以改进,使系统更加完善
参考文献
[1]李敬兆.8086/8088和基于ASM核汇编语言程序设计(第二版).合肥:
中国科学技术大学出版社,2008
[2]沈美明,温冬婵.IBM—PC汇编语言程序设计(第二版).北京:
清华大学出版社出版,2007
[3]沈美明,温冬婵,张赤红.IBM—PC汇编语言程序设计实验教程.北京:
清华大学出版社出版,2007
[4]李敬兆.8086/8088和基于ASM核汇编语言程序设计实验教材及习题解答.合肥:
中国科学技术大学出版社,2008
[5]钱晓捷.新版汇编语言程序设计[M].北京:
电子工业出版社,2006
[6]卜艳萍,周伟.汇编语言程序设计教程.北京:
清华大学出版社,2007
[7]宋人杰,牛斗.汇编语言程序设计.北京:
清华大学出版社,2008
[8]王爽.汇编程序设计语言.北京:
清华大学出版社,2008
附录
codesegment
assumecs:
code,ds:
code
org100h;org伪操作用来设置当前地址计数器的值
mainprocfar
start:
jmpbegin
;汉字:
仁
rendw300h,0,3c0h,0c0h,33fh,0fff0h,0f00h,0,0c00h,0,3c00h,0,0cc00h,0,0c00h,0,0c00h,0,0c00h,0,0c00h,0,0c00h,0h,0cffh,0fffch,0c00h,0,0c00h,0,0,0
;要显示的位置
rowdw50
coldw50
offdw36;每次要增加的距离
lp1numdb0
lp2numdb2
lp3numdb0;第3层循环的次数,最大为16
lp4numdb0
lp5numdb0
cmpnumdw8000h
ndb1;设置字体大小,默认一个象素画一个点
begin:
pushds
xorax,ax;清0
pushax
movax,code
movds,ax
;设置屏幕显示方式320*200彩色方式
movah,0h
moval,04h
int10h;调用中断
movah,0bh;置彩色调色板ID
movbh,0h
movbl,1;和ID配套使用的颜色
int10h;调用中断
movah,0bh
movbh,01h
movbl,0
int10h;调用中断
;程序主体部分,3重循环
xianshi:
;清除屏幕
callclears
movsi,offsetren;offset:
回送变量或标号的偏移地址值
;调用显示子程序,入口参数:
si=要显示的汉字(用32个word存储的32*32的点阵)
;入口参数:
col=要显示汉字的行,row=要显示汉字的列
;显示汉字:
仁
callshow
;循环接收键盘响应,看是否输入'+'字符
keyacc:
movah,0
int16h
cmpal,'q'
jeexit;结果相等则转移
cmpal,'+'
jeenlarge
jmpkeyacc
enlarge:
incn;n+1
cmpn,8
jbegons;判断不高于则转移
decn;n-1
gons:
jmpxianshi
;程序退出
exit:
movah,0;恢复屏幕原来的显示方式
moval,2;黑白方式80*25
int10h
ret
mainendp
;显示汉字子程序,入口参数:
si=要显示的汉字存储区首地址(用32个word存储的16*32的点阵)
;入口参数:
col=要显示汉字的行,row=要显示汉字的列
showprocnear
pushax
pushbx
pushcx
pushdx
pushsi
pushwordptrrow
pushwordptrcol
movah,0ch
movdx,row
movcx,col
movlp1num,0
lp1:
movlp2num,0
movcx,col
lp2:
movbx,[si]
movlp3num,0
movcmpnum,8000h
lp3:
testbx,cmpnum
jzwr2;结果为0则转移
moval,2
pushdx;保护列值以便恢复
movlp4num,0
lp4:
pushcx
movlp5num,0
lp5:
int10h;调用中断
inclp5num;lp5num+1
inccx;cx+1
pushax
moval,n
cmplp5num,al;比较
popax
jblp5;低于,或者不高于或等于,或进位位为1则转移
ag4:
incdx
inclp4num
popcx
pushax
moval,n
cmplp4num,al
popax
jblp4;低于,或者不高于或等于,或进位为1则转移
jmpag3;跳转ag3
wr2:
moval,0
pushdx;保护列值以便恢复
lp42:
pushcx
movlp5num,0
lp52:
int10h;调用中断
inclp5num
inccx
pushax
moval,n
cmplp5num,al
popax
jblp52;低于,或者不高于或等于,或进位为1则转移
ag42:
incdx
inclp4num
popcx
pushax
moval,n
cmplp4num,al
popax
jblp42;低于,或者不高于或等于,或进位为1则转移
ag3:
popdx
shrcmpnum,1;右移
pushax
moval,n
movah,0
addcx,ax
popax
inclp3num
cmplp3num,16;cmp:
比较
jblp3;低于,或者不高于或等于,或进位为1则转移
ag2:
addsi,2
inclp2num
cmplp2num,2
jblp2ee;低于,或者不高于或等于,或进位为1则转移
jmpag1
lp2ee:
jmplp2
ag1:
pushax
moval,n
movah,0
adddx,ax
popax
inclp1num
cmplp1num,16
jblp1ee;低于,或者不高于或等于,或进位为1则转移
jmpexitshow
lp1ee:
jmplp1
exitshow:
movlp2num,0
movlp3num,0
movlp1num,0
movcmpnum,8000h
popwordptrcol;ptr:
段间转移的操作符
popwordptrrow
popsi
popdx
popcx
popbx
popax
ret;返回
showendp
;清除屏幕子程序
clearsprocnear
pushax
pushbx
movah,0fh
int10h
movah,0
int10h
popbx
popax
ret
clearsendp
codeends
endstart