汇编语言课程设计任务书_第1页
汇编语言课程设计任务书_第2页
汇编语言课程设计任务书_第3页
汇编语言课程设计任务书_第4页
汇编语言课程设计任务书_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编语言课程设计任务书一、课程设计目的掌握汇编语言与高级语言的接口方法,正确编写混合语言程序,掌握混合语言程序的调试和运行;掌握DOS、BIOS系统功能调用,掌握基本的显存读写技术;进一步了解汇编接口的功能和用法,掌握利用定时器产生声音的方法;学会用汇编语言编写一个较完整的实用程序,培养自己的动手操作能力;学习汇编语言项目设计的基本思路和方法,编程、调试、撰写报告等。二、任务内容:任务一:混合编程,将内存中的一个字符串的小写字母转换为大写并输出。也可根据自己兴趣自定题目。要求:1.分别运用混合编程的两种方法:嵌入式编程、C程序调用汇编函数模块完成该任务;也可根据兴趣自定题目,如排序、求阶乘和等。任务二:以下题目二选一显示系统日期和时间要求:1.在屏幕特定位置显示当前系统日期和时间;显示的日期和时间要求即时更新,即设计为跳动的时钟;可自定义电子钟的显示区域、显示位置、背景和前景色或以图形化方式显示。当按下某个键,如“Q”时,程序返回DOS,数字钟消失。利用PC扬声器演奏乐曲要求:1.在屏幕特定位置显示乐曲名称;循环演奏乐曲(自选);当按下某个键,如“Q”时,音乐停止,程序返回DOS。本次课程设计每位同学必须认真、独立的完成课程设计的编程和调试。课程设计报告要求使用A4纸打印,必须有目录。封面提供,内容要认真独立完成。课程设计报告内容一般应包含如下部分:课程设计目的、内容;每个任务的程序流程图程序清单调试结果及分析;收获、体会和建议。课程设计结束同时上交课程设计报告,不得拖延。考勤(20分)调试验收(30分)随机回答指导教师的问题(20分)课程设计报告(30分)课程设计态度不认真,超过1/3时间不到者,不予及格。完全拷贝他人,对设计内容一无所者或知之甚少者,一经发现,不予及格。课程设计报告雷同或抄袭者,不予及格。可以自主扩充功能,有创新可加分。汇编语言课程设计指导书一、混合编程预备知识(一)什么是混合编程多种程序设计语言间,通过相互调用、参数传递、共享数据结构和数据信息而形成程序的过程就是混合编程。程序的大部分采用高级语言编写,可以提高程序的开发效率;在某些部分,利用汇编语言编写,可以提高程序的运行效率。(二)混合编程方法汇编语言与C语言混合编程有4种实现方法:一是嵌入式汇编,即将汇编语句或程序嵌入到C语言程序中;二是在C语言程序中调用汇编语言函数(汇编函数以汇编程序源文件形式存在);三是在汇编语言程序中调用C语言程序;四是采用DOS或BIOS调用函数。这里我们着重介绍前两种方法。嵌入式汇编(1)C语言中嵌入汇编语句的格式如下:asm操作码操作数<;或换行〉如以下C源程序文件“test.c”:#incLude<stdio.h>x=LC;main.()4<5LRt1==.-6asmincbyteptrx7asmniQVax72C8asmnoviTax9printf(T,\nx=%dff210getchar(j;11?(2)编译连接方法含有嵌入式汇编语句的C程序的编译连接,需要使用TC环境的命令行编译器TCC.EXE,而TCC.EXE在编译时要调用TASM.EXE,因此TC安装目录下必须有汇编程序TASM.EXE。但是在大多数的情况下此目录中是没有TASM.EXE的。我们可以先下载TASM5.0进行安装,然后将安装目录下的TASM.EXE直接拷贝到TC安装目录下,就可以用了。TCC.EXE的调用格式是:

TCC[options]file[s]其中,file[s]为需要编译或连接的文件,可有一个或多个。[option]为各个参数选项,常用的有“-B”,用于指示源程序中使用了嵌入式汇编,则编译命令为:TCC-Id:\tc\include-Btest注意:TCC区分大小写,B必须为大写。(3)编译连接过程假定TC2.0安装目录为C:\turboc2,test.c文件在turboc2文件夹中,且该目录中含有TASM.EXE。则编译连接过程如下:①启动命令提示符,使用cd\turboc2命令切换到tc目录,输入TCC命令:②运行该编译命令,如下图所示表示编译连接成功:C:\¥IKDOVS\systeM32\cMd.exe.c:□AssemblerUersion4.1Copyright<c>1988,②运行该编译命令,如下图所示表示编译连接成功:C:\¥IKDOVS\systeM32\cMd.exe.c:□AssemblerUersion4.1Copyright<c>1988,1996BorlandInternationallingflie:messages:gmessages:test.ASHNoneNonememory:12LinkUersion2.0Copyright<c>1987,1988BorlandInternationalAuailablememory396860:\turboc2>,③此时在当前目录下生成test.obj、test.exe文件,运行test.exe文件,结果如下:C:\¥IHDO¥S\syste>32\c>d.exe一test.exeBl匡IfTurboCUersion2.0Copyright<c>1987,1988^BorlandInternationa^^test.c:TurboAssemblerUersion4.1Copyright<c>1988,1996BorlandInternationalHssemblingfile:test.ASMErrormessages:NoneWarningmessages:NonePasses:1Remainingmemory:232kIurboLinkUersion2.0Copyright<c>1987,1988BorlandInternationalAvailablememory396860fc:Xturboc2>test.exeL=ll,i=20在C语言程序中调用汇编语言函数此方法要求分别编译C语言程序和汇编语言程序,再将目标文件连接成一个可执行文件。在这一过程中,汇编语言程序被看作函数,被C语言程序调用。C语言程序以汇编语言子程序名作为函数名调用汇编语言程序模块。(1)编写源程序汇编语言子模块的过程应用PUBLIC伪指令将其说明为“公用过程”。在C语言程序中,也应对被调用的汇编语言程序模块用EXTERN声明为“外部模块”。例如:在C中调用汇编语言模块完成两个数的求和。C文件(命名为ADDC.C)#inclu.de<stdio.h>main.(j<extern二ntADDUP(Lr:trLRt);Lntx=33Ty=38fz;z=ADEUP(xyy);换二土irtf暮一丫=告目「卫];getchar(i;9?参数传递主要采用堆栈来进行。对于TC中的小模式采用近调用,参数入栈采用自右向左的顺序,即变量y、变量X,且在栈中各占用2个字节。汇编语言文件(命名为ADDM.ASM,完成的功能为求两个整数之和)-1segmentbytepublic'CODE'2assunciecs:3publiz4_ADDUPproc5pushbp6novbp,sp7mov8sdd9popbp10ret11endp12ends13end可以看出代码段是以带下划线的标识符开头的,代码段的标识为_TEXT,这是由TC编译程序所定好了的,如果不按照这个格式书写汇编代码,调用就不会成功。TC编译器默认情况下,对外部标识符均要在其首部加下划线,所以C程序中调用的函数ADDUP在这里也是以下划线标出:_ADDUP。(2)编译过程①用MASM宏汇编在命令行下对ADDM.ASM汇编,汇编后生成一个模块文件ADDM.OBJ,然后将ADDM.OBJ复制到TC目录下,以便于建立TC下的工程文件。②工程文件的建立。在TC集成环境下建一个新文件,其内容为:就只有以上两行内容,写完后保存为ADDCM.PRJ,说明了该工程包含了ADDC.C和ADDM.OBJ两个程序模块。③对工程文件编译连接。在TC环境中利用Compile—MakeEXEfile命令,可将该文件编译连接为ADDCM.EXEo运行ADDCM.EXE,结果如下:二、系统时间的获取和显示(一)时间的获取调用系统日期和时间,并将调用的日期和时间数转换成ASCII码存在系统内存区的字符串中。将存在系统内存区的日期和时间用字符串存入显存区(显存的起始地址:B800:0000)并在合适的位置显示出来。由于获取了的系统时间不会自动刷新,所以我们要设计成刷新的方式(如利用定时器中断,中断类型号为1CH)来不断获取系统的时间,这样就形成了会跳动的电子钟。流程图如图1、图2所示。图1主程序流程图图2中断处理程序流程图(二)屏幕特定位置显示字符阅读教材P.324-335页内容。对应屏幕上的每个字符位置,显存空间都有相应的存储单元与之对应。对应显示在屏幕上的每个字符,在存储器中由连续的两个字节表示,一个字节保存ASCII码,另一个字节保存字符的属性。属性字节对单色显示和彩色显示都是有效的。相应的值与属性关系参考教材P.325图9.5以及P.326图9.6以及表我们可以使用BOIS显示中断10H的各项功能来进行显示字符的编程。首先,利用0号功能设置屏幕显示方式:MOVAX,0003H;设置80X25彩色文本方式INT10H设置光标位置:MOVAH,02HMOV8H,显示的页号MOVQX,显示的行、列INT10H在光标位置显示字符:MOVAH,09HMOV8H,显示的页号MOV8乙,字符属性值MOVA乙,显示的字符MOVCX,显示次数INT10H三、使PC发出音符声音8253定时器内部有三个独立的计数器:Counter0、Counterl、Counter2(端口地址为40H、41H、42H)和一个控制寄存器(端口地址为43H)。三个计数器是分别编程的,对任一个计数器编程时,首先要将控制字节写入控制寄存器。控制字节各位含义如图1所示.SCISCORL1RL0M2MlM0BCD「00计数器锁存操作

01只读写LSB10只读写MSB

读写LSB==MSB『00J01|10L11选择COUDtO选择count1选择count?无效图1控制字节各位含义o二送制1BCD码「000McxieO001Modelxl0Mode2xllModeS100Mode4虹101Mode5PC中,通过初始化控制寄存器(43H端口值为0B6H)使通道2用于扬声器发声。使扬声器发声的驱动电路如图2所示。1.19MHz信号计数值(地址42H)(地址43H)图2微机扬声器发声电路原理图8255的PB端口(61H)第1位8255的PB端口(61H)第□位通过使8255的PB端口的第1位输出高电平打开与门,利用8253的2通道发出不同频率的脉冲信号,经过放大器放大后,便可驱动扬声器发声。通过改变计数值的方法,使其产生不同频率音调的声音。音符与频率值的对应关系如表1所示。表1音符与频率值对应关系表123456712345671131147165175196220247262294330349392440494523编程提示:音频频率的产生,可通过设置8253通道2的计数器值来确定。计数值=1.19318MHz/给定音符频率=1234DCH/给定音符频率可用以下程序求计数值。MOVQ/,给定频率值MOVDX,12HMOVAX,34DCHDIVDI得到的计数值,按低8位、高8位分别送通道2,程序如下:OUT42H,ALMOVAL,AHOUT42H,AL乐曲是按照一定的高低、长短和强弱关系组成的音调,组成乐曲的每个音符的频率值和持续时间是乐曲程序发声所需要的两个数据。音符的频率可以从表1中获得,音符的持续时间根据乐曲每个音符的节拍数来确定。在4/4(四四拍)中,四分音符为一拍,每小节4拍,全音符持续4拍,二分音符持续2拍,四分音符持续1拍,八音符持续半拍等。如果我们给全音符分配1秒的时间,则二分音符的持续时间为0.5秒。10ms的延迟时间可以简单地通过执行循环指令取得:WAIT1:MOVCX,2801DELAY:LOOPDELAY如果要产生与10ms成倍数的延迟时间,可执行该倍数次延迟10ms的指令。知道了音调与频率和时间的关系,我们就可以按照乐曲的曲谱将每个音符的频率和持续时间定义成两个数据表,然后编写程序依次取出表中的频率值送通道2并用持续时间进行延时。两只老虎1231|1231345-34两只老虎,两只老虎,踱得快,跑得565-43[|5^_g5^431151-15一只没有眼睛,一只没有肆朵,真奇怪,真奇I=c|5-快,1-|怪『如上面《两只老虎》的乐曲,我们就可以建立如下数据表:MUS_FREQDW2DUP(262,294,330,262)DW2DUP(330,349,392)DW2DUP(392,440,392,349,330,262)DW2DUP(262,392,262)DW-1MUS_TIMEDW8DUP(100)DW2DUP(100,100,200)DW2DUP(75,25,75,25,100,100)DW2DUP(100,100,200)j12131415161019202122三、附件附1:任务一参考程序清单finclnde<stdio.tL>main()/*主程序j12131415161019202122char^st『"Thismtazrt;巳idOut;AmLdw巳zruam—!";printf("Originstringjkii/s'TL"/str);asmmovsi,s-~rloop:f*C■诲言定义的标号asmmoval,[si]asmcmpal,'a'asm士ness/没转'移至肥的标号/asmcmpal,'-'asm-aneKS不是-到,,之间的字符保持原样Vasmsubal,2Oh/*小写字■母转换成大写”asmmov[si]falnexs:asmincsiasmandal,al/*ciS言中,字符串用网EL(O)■尾asm~nzLoopprintf("Upp巳:ruam巳Stzriiig][n冬mLn",str);gez-char();}设计思路:对字符串中的字符进行逐个判断是否为小写字母,若是,则转换为大写。小写字母转换为大写字母的方法为减去20h。运行结果如下:eC:\turboc2\A.EXElOriginstring:ThisStartedOutAsLowercase*UppercaseString:THISSTARTEDOUTASLOWERCASE!

附2:获取日期时间参考程序清单注意:此程序没有设置为跳动的时钟以及确定时钟显示位置1datasegment2countdw1infodb'Currenttimeis:1fOdh.,0ah71S1:提示语4datestrdb'00-00-0000'rOdh,0ah71£1其月显示,信,皂、:month-day-year5timestrdb100:00:0017Odh,0ah71S1:时T田显示,信,宜、:hour:minute:second112131415161718192021222324252627282930313233343536373839404142434445dataendscodesegmentassurriecs:code,ds:data;Mainprogrammainprocfarstart:movdatamovdsrax;保存原中断向量mQVal,lchmovahz35hint21hF获取luh中断向宣至[]es:bxpushespushbxpushdsF保存;设置新的中断向量movd.Xfoffsetintpromovax,segintpromovds,axmoval,lchmovahz25hLnt21h;设耋中断向popdsln-alf21h;读中断屏蔽寄存器and吊开定时器中断out21h,al;写中晰屏蔽备存器stL;开,中断;等待中断s:novcifCffffhdelay:novsifCffffhdelayl:dec;sijr.zdelayldec:cijnzdelay10DOs46;恢复:Luh原中断向量47§当48ds49raoval,L"h5Dnovahf2三h5121h5253raov4c:C'Oh5421h55lYiaLiiendp1

57f—58;中断处理程序intpro59f60intproprocnear61;保护现场62pushds63pushax64pushex65pushdx6667raovdata68inovdsrax69sti7071deccount72jnzexit7374movdxfoffsetinfo75movah,09h76int2lh;显示多符串77calldispdate;调用函数显示m期和眩间78calldisptime79►movcountf18|81exit:82土二83popdx84popex85popax86popds8788iret899092intproendpf93i显示3期子程序dispdate94f95dispdateprocnear96pushax97pushex98pushdx99pushsi100;获取系统m期:入口:ah<-2ahr出口:cx<-yearfdh<-niQrLth.fdl<-day101movahf2ah.102Lnt2lh103104movaxfex;年份转4位asu工码105movbxf10106Leasifdatestr-9;指向宇为罗串年份最舌一1立107movcxf4;年份4位,循环4次108pushdx;保存月3109110y:xordxfdx;加清零:保存余数厂个位111divbx;商存mx:余数存己x112add3011;转脱己工码*存datestr^符串末尾113mov[si.]fdl114decsi115loopy116117popdx;还原加,处理118movalj-dl119xorah,ah120dLV01;求曰的个位,存n,二'位存mL121add3C3Ch;分别转ascii^122silbsi.f2123mov[si.]Tax;存曰124125movalfdh;处理月126xorahrah127divbl;求月的个位:存n,—'位存成128addaxf3030h;分别转msu126xorahrah127divbl;求月的个位:存n,—'位存成128addaxf3030h;分别转msu工码129subsir3130mov[si]『ax;存曰146disptimeprocnear147pushax148pushex149pushdx150pushsipopexpopaxret141dispdateendp142143;144;显示时间子程序disptimei4E;151;获取系统时I司:入口rah<-2chf(JHOtch<-hourjcl<-mirLiitefdh<-secQndmQvahf2ch153int21h154155movblf10leasLrtimestrnioval,chF处理小时xorahfah159divbladdaxf3030hmov[si],ax162addsif3164novalfcl;处理分xorahfahcl*hl3C.C.axf303Ohnov:si.:rax169soldsif

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论