首页 汇编语言程序设计实验报告

汇编语言程序设计实验报告

举报
开通vip

汇编语言程序设计实验报告PAGE/NUMPAGES汇编语言实验报告题目:1、实验方法2、用表格形式显示字符3、分类统计字符个数4、查找学生学院应用技术学院专业班级2009级电子信息工程技术一班学号2009680107学生##____李果____指导教师胡勇20##1月12日实验实验目的与要求掌握用汇编语言设计、编写、调试和运行程序的方法。掌握debug程序的各种操作命令,熟悉程序的调试与其技巧。实验内容比较字符串sample.asm(文件名)试编写一程序:比较两个字符串stringl和string2所含的字符是否相同。若相同则...

汇编语言程序设计实验报告
PAGE/NUMPAGES汇编语言实验报告 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 目:1、实验方法2、用表格形式显示字符3、分类统计字符个数4、查找学生学院应用技术学院专业班级2009级电子信息工程技术一班学号2009680107学生##____李果____指导教师胡勇20##1月12日实验实验目的与要求掌握用汇编语言设计、编写、调试和运行程序的方法。掌握debug程序的各种操作命令,熟悉程序的调试与其技巧。实验内容比较字符串sample.asm(文件名)试编写一程序:比较两个字符串stringl和string2所含的字符是否相同。若相同则显示‘Match’,否则,显示‘Nomatch’。实验步骤调用字处理程序wordstar或记事本建立asm文件建立sample.asm源文件如图1.1所示:;*********************************************datareasegment;definedatasegmentstring1db'Movethecursorbackward.'string2db'Movethecursorbackward.';mess1db'Match.',13,10,'$'mess2db'Nomatch!',13,10,'$'datareaends;*********************************************prognamsegment;definecodesegment;-------------------------------------------------------------------mainprocfarassumecs:prognam,ds:datarea,es:datareastart:;startexecutionaddress;setupstackforreturnpushds;saveolddatasegmentsubax,ax;pushzeroinAXpushax;saveitonstack;setDSregistertocurrentdatasegmentmovax,datarea;datareasegmentaddrmovds,ax;intoDSregistermoves,ax;intoESregister;MAINPARTOFPROGRAMGOESHEREleasi,string1leadi,string2cldmovcx,25repzcmpsbjzmatchleadx,mess2jmpshortdispmatch:leadx,mess1disp:movah,09int21hret;returntoDOSmainendp;endofmainpartofprogram;---------------------------------------------------------------prognamends;endofcodesegment;************************************************endstart;endassembly图1.1源文件sample.asm用汇编程序masm〔或asm〕对源文件汇编产生目标文件objC:>masmsample;用连接程序link产生执行文件exeC:>linksample执行程序可直接从DOS执行程序如下:C:>sampleMatch.终端上已显示出程序的运行结果。为了调试程序的另一部分,可重新进编辑程序修改两个字符串的内容,使他们互不相同。如修改后的数据区为:;*********************************************datareasegment;definedatasegmentstring1db'Movethecursorbackward.'string2db'Movethecursorforward.';mess1db'Match.',13,10,'$'mess2db'Nomatch!',13,10,'$'datareaends;*********************************************然后,重新汇编、连接、执行,结果为:C:>sampleNomatch!至此,程序已经调试完毕,运行结果正确。另一种调试程序的方法是使用debug程序。可调用如下:C:>debugsample.exe可先用u命令显示程序,以便了解指令地址。显示结果如图1.2所示:图1.2用debug调试时,u命令的显示情况将断点设置在程序的主要部分运行以前,同时根据其中指示的DS寄存器内容查看数据段的情况如下:可用e命令修改数据区的字符串,操作如下图所示,再次用d命令查看修改结果。用g命令运行程序,结果为:-gNomatch!用q命令退出debug-q至此程序已调试完毕。四、心得体会通过这次实验主要是学习使用debug调试程序,掌握对程序的调试方法。虽然在调试过程中有遇到一定的难处,但是通过反复实验和同学的帮助还是能够比较顺利的完成的。个人觉得这个调试方法比较不直接点,不过相信应该有它的独到之处吧。计算机学院0专业2班__组、学号31##协作者_________教师评定实验题目用表格形式显示字符实验二实验目的与要求学习用汇编语言设计与编写循环程序。题目:用表格形式显示ASCII字符SMASCII实验内容按15行×16列的表格形式显示ASCII码为10H---100H的所有字符,即以行为主的顺序与ASCII码递增的次序一次显示对应的字符。每16个字符为一行,每行中的相邻两个字符之间用空白符〔ASCII为0〕隔开。实验步骤输入的源文件为print.asm,以下为源代码:.modelsmall.stack200h.data.codestart:movcl,16;初始化列数计数为16movch,15;初始化行数计数为15movdh,10h;初始化dh为10hpo:deccl;列数计数减1movah,02h;输出该字符movdl,dhint21hincdh;令dh为下一个字符的ASCⅡ值movah,02h;输出空格movdl,0int21hcmpcl,0;若列数计数cl为0jzmo;即已输出了16个字符则跳转换行jmppo;否则继续执行输出下一个字符的操作mo:movcl,16;换行,重新置列数计数为16movah,02h;输出回车符movdl,0dhint21hmovah,02hmovdl,0ah;输出换行符int21hdecch;换行,则使行数计数ch减1cmpch,0;若ch为0jzno;则跳转至结束程序jmppo;否则继续执行输出下一行字符的操作no:movax,4c00hint21hendstart汇编并连接文件后,生成exe文件,运行结果如下:心得体会编写中使用了功能号为02的输出功能调用,同时由于逐个显示相继的ASCII字符,需要保存并不断修改dl寄存器的内容,而显示空白、回车、换行符时也需要使用dl寄存器,故要使用堆栈来保存相继的ASCII字符。同样的,在实验过程中遇到了一些难点和想不通的地方,幸运的是,有老师的指点和同学的帮助,使我能够完成这个实验。同时也让我感受到细心,谨慎对我们学汇编语言的重要性,有一点点失误就使整个程序不能运行了。计算机学院专业2班__组、学号##协作者_________教师评定实验题目分类统计字符个数实验三实验目的与要求学习用汇编语言编写与设计分支循环程序。题目:分类统计字符个数COUNT_CHAR实验内容程序接收用户键入的一行字符〔字符个数不超过80个,该字符串用回车符结束〕,并按字母、数字与其他字符分类计数,然后将结果存入以letter、digit和other为名的存储单元中。实验步骤1输入的源文件为count_c.asm的源代码:datasgsegmentstringlabelbytemaxdb80actdb?stokndb80dup(?)digitdb0Letterdb0otherdb0mess1db'Pleaseinputchars:','$'mess2db0dh,0ah,'$'mess3db'digit:','$'mess4db'letter:','$'mess5db'other:','$'mess6db'h','$'ndb3datasgends;codesgsegmentassumecs:codesg,ds:datasgCOUNT_CHARprocfarpushdssubax,axpushaxmovax,datasgmovds,axleadx,mess1;输出字符串movah,09int21hleadx,stringmovah,0ah;换行int21hleadx,mess2movah,09h;输出字符串int21hleasi,stoknsubch,chmovcl,actagain:;判断ASCLLmoval,[si]cmpal,30hjlother1cmpal,3ahjldigit1cmpal,41hjlother1cmpal,5bhjlletter1cmpal,61hjlother1cmpal,7bhjlletter1other1:;处理其他字符,计数加一incotherincsiloopagainjmpprintdigit1:;处理数字,计数加一incdigitincsiloopagainjmpprintletter1:;处理字母,计数加一incletterincsiloopagainprint:movch,2movbl,digitleadx,mess3movah,09int21hrotate:;转换16进制movcl,4rolbl,clmoval,blandal,0fhaddal,30hcmpal,3ahjlprint1addal,7hprint1:movdl,almovah,2int21hdecchjnzrotateleadx,mess6movah,09int21hdecncmpn,2jzletter2cmpn,1jzother2jmpexitletter2:leadx,mess4movah,09int21hmovch,2movbl,letterjmprotateother2:leadx,mess5movah,09int21hmovch,2movbl,otherjmprotateexit:;结束退出retCOUNT_CHARendpcodesgendsendCOUNT_CHAR2编并连接文件后,生成exe文件,debug调试程序:输入字符为1234[%$#]abcd^_^.结果如下:心得体会编写程序主要用0a号功能输入字符串,同时练习设计分支结构的程序,为以后的编程打下基础.次实验程序分支较多,刚开始不懂得如何用DEBUG查询,后来在老师的帮助下终于知道原来通过查看寄存器内容得到结果的。计算机学院专业2班__组、学号##王楚青协作者_________教师评定实验题目查找实验四实验目的与要求学习用汇编语言设计与编写子程序。题目:查找phone实验内容要求程序建立一个可存放50项的表,每项包括人名〔20个字符〕与〔8个字符〕两部分;程序可接受输入人名与相应的,并把它们加入表中;凡有新的输入后,程序应按人名对表重新排序;程序可接受需要查找的人名,并从表中查出其,再在屏幕上以如下格式显示出来。nametel.××××××××实验步骤输入的源文件为phone.asm,以下为源代码:OUTPUTMACROMESS;定义输出字符串宏操作MOVAH,9LEADX,MESSINT21HENDM;----------------------------------DATASEGMENTNAMEPARLABELBYTEMAXNLENDB21NAMELENDB?NAMEFLDDB21DUP(?);PHONEPARLABELBYTEMAXPLENDB9PHONELENDB?PHONEFLDDB9DUP(?);NAMECTRDB0PHONECTRDB0ENDADDRDW?;TEL_TABDB50DUP(28DUP('')),'$';表TELSAVDB28DUP(?),'$'SWAPPEDDB0;;提示信息MESS1DB'Inputname:$'MESS2DB'Inputatelephonenumber:$'MESS3DB'Doyouwantatelephonenumber?(Y/N)$'MESS4DB'NAME$'MESS5DB'TEL.$'MESS6DB16DUP(''),'$'MESS7DB'NAME?$'DATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATASTART:PUSHDSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVES,AX;-----------------------------------------------LEADI,TEL_TABLOOP1:OUTPUTMESS1CALLINPUT_NAME;输入名字CALLCRLFCMPNAMELEN,0;当输入字符为回车符结束输入记录JZLOOP2CALLSTOR_NAME;保存名字OUTPUTMESS2CALLINPHONE;输入并保存个人CALLCRLFJMPLOOP1LOOP2:CALLNAME_SORT;按人名对表重新排序LOOP3:OUTPUTMESS3MOVAH,1;接收单个字符INT21HCMPAL,'n';若为’n’退出程序JZQUITCMPAL,'N';若为’N’退出程序JZQUITCALLCRLFOUTPUTMESS7CALLINPUT_NAME;输入要查找人名CALLCRLFCALLNAME_SEARCH;按人名查找记录OUTPUTMESS4OUTPUTMESS6OUTPUTMESS5CALLCRLFCALLPRINTLINE;按要求输出信息CALLCRLFJMPLOOP3QUIT:MOVAH,4CHINT21HMAINENDP;----------------------------------------INPUT_NAMEPROCNEAR;接受人名MOVAH,0AH;0A号功能调用接收人名LEADX,NAMEPARINT21H;CMPNAMELEN,0JZEXITMOVBH,0MOVBL,NAMELENMOVCX,21SUBCX,BXINPUT_XH:MOVNAMEFLD[BX],20HINCBXLOOPINPUT_XHEXIT:RETINPUT_NAMEENDP;-----------------------------------STOR_NAMEPROCNEAR;把人名存入表tel_tab中INCNAMECTRCLDLEASI,NAMEFLDMOVCX,10REPMOVSW;人名从缓冲区传送到tel_tabRETSTOR_NAMEENDP;------------------------------------INPHONEPROCNEAR;接受,并存入表tel_tab中MOVAH,0AH;0A号功能调用接受LEADX,PHONEPARINT21HMOVBH,0MOVBL,PHONELENMOVCX,9SUBCX,BXINPHONE_XH:MOVPHONEFLD[BX],20HINCBXLOOPINPHONE_XHINCPHONECTRCLDLEASI,PHONEFLDMOVCX,4REPMOVSW;从缓冲区送到tel_tabRETINPHONEENDP;----------------------------------NAME_SORTPROCNEAR;对表按人名排序〔冒泡法〕SUBDI,56MOVENDADDR,DIXH1:MOVSWAPPED,0;SWAPPED为记录转换次数LEASI,TEL_TABXH2:MOVCX,28MOVDI,SIADDDI,28MOVAX,DIMOVBX,SIREPECMPSBEXH3CALLEXCHANGEXH3:MOVSI,AXCMPSI,ENDADDREXH2CMPSWAPPED,0JNZXH1RETNAME_SORTENDP;----------------------------------EXCHANGEPROCNEAR;冒泡法中交换记录MOVCX,14LEADI,TELSAVMOVSI,BXREPMOVSW;MOVCX,14MOVDI,BXREPMOVSW;MOVCX,14LEASI,TELSAVREPMOVSW;MOVSWAPPED,1RETEXCHANGEENDP;--------------------------------------NAME_SEARCHPROCNEAR;在表中查找所要的LEASI,NAMEFLDLEADI,TEL_TABSEARCH_XH1:MOVCX,20REPCMPSB;缓冲区字符串与tel_tab记录比较JESEARCH_XH2ADDDI,8LEASI,NAMEFLDJMPSEARCH_XH1SEARCH_XH2:MOVSI,DISUBSI,20LEADI,TELSAVMOVCX,14REPMOVSW;比对正确,传送记录到缓冲区以便输出RETNAME_SEARCHENDP;-----------------------------------PRINTLINEPROCNEAR;按要求格式显示人名与MOVAH,9LEADX,TELSAVINT21HRETPRINTLINEENDP;-----------------------------------CRLFPROCNEAR;输出回车换行符MOVDL,0DHMOVAH,2INT21HMOVDL,0AHINT21HRETCRLFENDP;----------------------------------CODEENDSENDSTART各个模块说明:由于各个模块基本上是并行方式共存,故模块层次为main模块之下有以下模块并行,这些模块分别是INPUT_NAME、STOR_NAME、INPHONE、NAME_SORT、EXCHANGE、NAME_SEARCH和PRINTLINE。各模块说明:模块名:main为总控模块输入:接受从键盘输入的人名与其,存入tel_tab中。输出:接受从键盘输入的欲查找记录的人名,再按要求格式输出记录。功能:显示提示符’Inputname:’,调用子程序INPUT_NAME接收人名,调用子程序STOR_NAME把人名存入表tel_tab中,显示提示符’Inputatelephonenumber:’,调用子程序INPHONE接收,并把它存入表tel_tab中,如输入已结束则调用NAME_SORT子程序对表按人名排序,显示提示符’Doyouwantatelephonenumber?(Y/N)’,回答N或n退出程序,否则显示提示符’name?’,调用子程序INPUT_NAME接收人名,调用子程序NAME_SEARCH在表中查找所要的,调用子程序PRINTLINE按要求格式显示人名与。模块名:INPUT_NAME输入:从键盘接收人名。功能:人名存入缓冲区〔0A号功能调用〕。模块名:STOR_NAME功能:把缓冲区中的人名以字符串传送形式送到表tel_tab中。模块名:INPHONE输入:从键盘接收。功能:人名存入缓冲区后,按字符串传送形式送到表tel_tab中。模块名:NAME_SORT功能:对表tel_tab按人名用冒泡法重新排序,调用EXCHANGE子程序进行冒泡法中的数据交换。模块名:EXCHANGE功能:若前一个人名的ASCII码比后一个人名的ASCII码大,则交换两个记录。模块名:NAME_SEARCH功能:接收人名后,比较缓冲区的记录和表tel_tab中的记录,若相等,则把tel_tab中的记录移到缓冲区中,以便输出。模块名:PRINTLINE输出:按要求格式输出人名和。汇编并连接文件后,生成exe文件,执行文件并debug调试程序:输入三个记录:分别是1.LiMing38456787;2.zhangYi49885656;3.LiuWei84752544;执行exe全过程:四、心得体会作为一次综合实验比起前几次的实验还是比较难的,编写过程中遇到的问题也比较多,通过上几次实验的练兵,代码程序还是比较容易写的,但在开始调试却用了很多时间,最后认真的检查和跟同学交流讨论才找出所有的错误,确实调试是一件很不简单的事啊!通过这个综合实验,对汇编语言有了更进一步的掌握,一些课堂上比较难弄懂的知识,做完这个实验后,基本都迎刃而解了。为了更好的学好汇编语言,只有经常上机编程实验才能把课本上的知识应用到实践上,在实践中更好的掌握学到的知识。同时,在编程的过程中时时刻刻都不要忘记细心、再细心,只要有一点点失误,就永远运行不了这个程序。也许人生就如程序这样,以后无论在生活还是工作中都必须细心、再细心!
本文档为【汇编语言程序设计实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
is_529050
暂无简介~
格式:doc
大小:237KB
软件:Word
页数:22
分类:其他高等教育
上传时间:2022-05-05
浏览量:2