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

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

举报
开通vip

汇编语言程序设计实验报告.PAGE/NUMPAGES实验报告实验名称汇编语言程序设计||专业班级:信息安全学号:姓名:实验一汇编语言上机过程和Debug常用调试命令实验目的:学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。实验题目:熟悉与实验有关的系统软件的使用方法。在调试过程中,学习及掌握debug程序的各种操作命令。问题描述:试编写一程序:比较两个字符串string1和string2所含的字符是否相同,若相同则显示‘match’;否则,显示‘nomatch’。方法说明:使用ws、tc或ED...

汇编语言程序设计实验报告
.PAGE/NUMPAGES实验报告实验名称汇编语言程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 ||专业班级:信息安全学号:姓名:实验一汇编语言上机过程和Debug常用调试命令实验目的:学习程序设计的基本 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。实验题目:熟悉与实验有关的系统软件<如编辑程序、汇编程序、连接程序和调试程序等>的使用方法。在调试过程中,学习及掌握debug程序的各种操作命令。问题描述:试编写一程序:比较两个字符串string1和string2所含的字符是否相同,若相同则显示‘match’;否则,显示‘nomatch’。方法说明:使用ws、tc或EDIT编辑程序来建立源文件,然后存盘,使系统返回DOS。用汇编程序masm<或asm>对源文件汇编产生目标文件obj如:汇编指示出错则需重新调用编辑程序修改错误,直至汇编通过为止。用连接程序link产生执行文件EXE.执行程序,可直接从DOS执行程序。使用debug程序调试程序的方法。实验步骤:调用字处理程序EDIT建立以sample.asm文件datareasegmentstring1db‘movethecursorbackward.’string2db‘movethecursorbackward.’mess1db‘Match..’,13,10,’$’mess2db‘Nomatch!..’,13,10,’$’datareaendsprognamsegmentmainprocfarassumecs:prognam,ds:datarea,es:datareastart:pushdssubax,axpushaxmovax,datareamovds,axmoves,axleasi,string1leadi,string2cldmovcx,25repzcmpsbjzmatchleadx,mess2jmpshortdispmatch:leadx,mess1disp:movah,09int21hretmainendpprognamendsendstart对源文件汇编产生目标文件objD:\masm文件名。Asm3.用连接程序link产生执行文件exeD:\link文件名。Obj4.执行程序D:\文件名5.使用debug程序调试程序的方法。d>debug文件名.exe_用G命令运行程序用U命令显示程序学会设置断点。学会查看数据段的内容情况D用E命令修改数据区的字符串。用A命令把数据区的内容恢复原状T命令逐条跟踪程序的执行学会使用F命令、R命令、Q命令等等实验总结第一次进行汇编实验,主要是学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法,只有多上机练习,才能更好的掌握汇编语言程序设计的思想。实验二循环程序设计1循环结构是控制重复执行某一程序段的基本程序结构.在汇编语言程序设计中,循环程序的地位也是极为重要,从本质上来看,循环程序结构是分支程序结构的一种手特殊形式,也是使用条件转移指令来控制执行循环的.一.实验目的:学会用循环结构进行程序编程。二.实验题目:设计一个按 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 格形式显示ASC||码为10H—100H的所有字符的程序。三.实验要求:按15行*16列的表格形式显示ASC||码为10H----100H的所有字符,即以行为主的顺序及ASC||码递增的次序依次显示对应的字符。每16个字符为一行,每行中的相邻两个字符之间用空白符隔开。四.方法说明:<1>显示每个字符可使用功能号为02的显示输出功能调用,使用方法如下:movah,02hmovdl,0AHint21h本题中可把dl初始化为10H,然后不断使其加1<用INC指令>以取得下一个字符的ASC||码。<2>显示空白符时,用其ASC||码0置入dl寄存器,每行结束时,用显示回车和换行符来结束本行并开始下一行。<3>由于逐个显示相继的ASC||字符时,需要保存并不断修改dl寄存器的内容,而显示空白、回车、换行符时也需要使用dl寄存器,为此可使用堆栈来保存相继的ASC||字符。具体用法是:在显示空白或回车,换行符前用指令pushdx把dl的内容保存到堆栈中去。在显示空白或回车,换行符后用指令popdx恢复dl寄存器的原始内容。五、实验代码stacksegmentdb100dupstackendscodesegmentassumecs:code,ss:stackstart:movdl,10hmovcl,0fhloopc:movah,02hmoval,dlint21hincdlpushdxmovdl,0hmovah,02hmoval,dlint21hpopdxloopnzloopcpushdxmovdl,0dhmovah,02hmoval,dlint21hmovdl,0ahmovah,02hmoval,dlint21hpopdxmovcl,0fhcmpdl,0hjneloopcmovah,4chint21hcodeendsendstart实验结果实验总结本次试验学会用循环结构进行程序编程,学好循环程序是很重要的,在程序设计中,它的地位是极其重要的。实验三循环程序设计2一.实验目的:学会用循环程序设计进行程序编程。二.实验题目:设计查找匹配字符串SEARCH的程序。三.问题要求:程序接收用户键入的一个关键字以及一个句子。如果句子中不包含关键字则显示’nomatch’;如果句子中包含关键字则显示‘match’,且把该字在句子中的位置用十六进制数显示出来,要求程序的执行过程如下:enterkeyword:abcentersentence:wearestudyingabcmatchatlocation:11Hofthesentenceentersentence:xyz,ok?nomatchentersentence:^c四.方法说明:程序可由三部分组成:<1>输入关键字和一个句子,分别存入相应的缓冲区中,可用功能调用0AH。在句子中查找关键字。关键字和一个句子中相应字段的比较可使用串比较指令,为此必须定义附加段,但附加段和数据段可以定义为同一段,以便于串指令的使用,这样,相应的寄存器内容也有了确定的含义,如下:SI寄存器为关键字的指针DI寄存器为句子中正相比较的字段的指针CX寄存器存放关键字的字母个数<长度>整个句子和关键字的比较过程可以用一个循环结构来完成。循环次数为:<句子长度--关键字长度>+1在计算循环次数时,如遇到句子长度小于关键字长度的情况则应转向显示"nomatch",循环中还需要用到BX寄存器,它用来保存句子中当前正在比较字段的首地址。输出信息:用功能调用09h分"找到"或"找不到"两种情况分别显示不同的信息。在"找到"时,还要求显示出匹配字符串在句子中的位置,在"找到"时BX寄存器的内容为匹配字符串的首地址,将此值减到句子的首地址,再将差值加1即是所要的匹配字符串在句子中的位置,可将位置转换为十六进制数从屏幕上显示出来。实验代码ssegsegmentstackdw256dupssegendsdatasegmentmsg1db'Enterkeyword:',24hmsg2db'EnterSentence:',24hcrdb13,10,24hkeyworddb250,?,250dupSentencedb250,?,250dupmatchdb'Matchatlocation:',24hmatch1db'ofthesentence',13,10,24hnomatchdb'Nomatch',13,10,24hdataendscodesegmentassumecs:code,ds:data,ss:ssegdisp_hexprocnearpushaxpushcxpushdxpushaxmovcl,4roral,clandal,0fhaddal,30hcmpal,39hjnad1addal,7d1:movdl,almovah,2int21hpopaxandal,0fhaddal,30hcmpal,39hjnad2addal,7d2:movdl,almovah,2int21hmovdl,'h'movah,2int21hpopdxpopcxpopaxretdisp_hexendpbegin:movax,datamovds,axmoves,axmovdx,offsetmsg1movah,9int21hmovdx,offsetkeywordmovah,0ahint21hcmpkeyword+1,0jequitmovdx,offsetcrmovah,9int21hb1:movdx,offsetmsg2movah,9int21hmovdx,offsetSentencemovah,0ahint21hmovdx,offsetcrmovah,9int21hmovdl,Sentence+1cmpdl,0jequitmovdh,keyword+1movdi,offsetSentence+2b2:cmpdh,dlja_nomatchmovsi,offsetkeyword+2movcl,dhmovch,0cldpushdirepecmpsbpopdije_matchincdidecdljmpb2_match:movax,disubax,offsetSentence+2incaxpushaxmovdx,offsetmatchmovah,9int21hpopaxcalldisp_hexmovdx,offsetmatch1movah,9int21hjmpb1_nomatch:movdx,offsetnomatchmovah,9int21hjmpb1quit:movah,4chint21hcodeendsendbegin六、实验结果实验总结本次试验主要考察了串比较指令的用法,同时将串指令和REPE联合起来用,使得指令变得简单。实验中还用到了一些数据结构,开始时需要定义空间以及缓冲区。另外程序需要运用有两层循环,内循环由CX记录关键字长度控制循环计数,外循环是由ax记录外循环次数控制外循环计数。通过本次实验,使我更加熟悉了课堂上知识,还培养了我将理论知识运用到实际编程中去的能力。实验四分支程序设计一.实验目的:学会用分支程序设计进行程序编程。二.实验题目:设计一个程序能分类统计字符个数三.实验要求:程序接收用户键入的一行字符<字符个数不超过80个,该字符串用回车符结束>,并按字母、数字及其它字符分类计数,然后将结果存入以letter、digit和other为名的存储单元中。四.方法说明:程序可采用0AH功能调用把键入字符直接送到缓冲区中,然后再逐个取出分类计数,也可采用01H功能调用在接收字符后先分类计数然后再存入缓冲区中。程序需进入debug运行并查看计数结果。实验代码DATASSEGMENTSTRING1DB'InputYourString:$';输入提示信息STRING2DB'Digit:$';各类字符提示信息STRING3DB'Letter:$'STRING5DB'Others:$'DIGITDB0;数字CHARSDB0;字母OTHERSDB0;其他DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXLEADX,STRING1;显示输入提示信息MOVAH,9INT21HMOVCX,100;设置循环次数足够大L1:MOVAH,1;中断调用,单字符输入INT21HCMPAL,0DH;若输入回车符则结束JZOVER2CMPAL,30HJBOTHER;若<30H<0>,OTHERS++CMPAL,39H;若>39H<9>,跳转进一步比较JAHIGHER1JMPDIGITAL;DIGIT++HIGHER1:CMPAL,41H;if<41H,OTHERS++JBOTHERCMPAL,5AH;if>5AH,跳转继续比较JAHIGHER2JMPCHAR;ALPHAU++HIGHER2:CMPAL,61H;if<61H,OTHERS++JBOTHERCMPAL,7AH;if>7AH,OTHERS++JAOTHERJMPCHAR;ALPHAL++JMPOVER;比较结束OTHER:INCOTHERS;OTHERS++JMPOVERDIGITAL:INCDIGIT;DIGIT++JMPOVERCHAR:INCCHARS;ALPHAL++JMPOVERJMPOVEROVER:NOPLOOPL1;循环,输入下一字符OVER2:CALLENDLINE;回车换行LEADX,STRING2;输出提示信息MOVAH,9INT21HXORAX,AXMOVAL,DIGIT;将统计的数字送AX,为输出做准备CALLDISPLAY;调用输出两位数字的子程序CALLENDLINE;下同LEADX,STRING3MOVAH,9INT21HXORAX,AXMOVAL,CHARSCALLDISPLAYCALLENDLINELEADX,STRING5MOVAH,9INT21HXORAX,AXMOVAL,OTHERSCALLDISPLAYMOVAH,4CHINT21HENDLINEPROCNEAR;控制输出 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 ,输出回车换行子程序MOVAH,2MOVDL,0AHINT21HMOVAH,2MOVDL,0DHINT21HRETENDLINEENDPDISPLAYPROCNEAR;输出两位数字的子程序MOVBL,10;10送BLDIVBL;AX/BL,AL=商,AH=余数PUSHAX;保存AX中的信息MOVDL,ALADDDL,30HMOVAH,2INT21H;输出十位数POPAX;出栈送AXMOVDL,AHADDDL,30HMOVAH,2INT21H;输出个位数RETDISPLAYENDPCODESENDSENDSTART实验总结本次实验要求我们学会用分支程序设计进行程序编程,其中运用到许多跳转和比较指令,只要细心一点,理清思路就能很容易的将本程序编写出来。实验五子程序设计实验目的:学会用子程序设计进行程序编程。实验题目:设计一个能查找电话号码phone的程序。实验要求:要求程序建立一个可存放50项的电话号码表,每项包括人名<20个字符>及电话号码<8个字符>两部分;程序可接收输入人名及相应的电话号码,并把它们加入电话号码表中;凡有新的输入后,程序应按人名对电话号码表重新排序;程序可接收需要查找电话号码的人名,并从电话号码表中查出其电话号码,再在屏幕上以如下格式显示出来。nametel********实验提示:程序采用子程序结构,主程序的主要部分如下:.显示提示符‘inputname:’;.调用子程序input_name接收人名;.调用子程序stor_name把人名存入电话号码表tel_tab中;.显示提示符‘inputatelephonenumber:’;.调用子程序inphone接收电话号码,并把它存入电话号码表tel_tab中;.如输入已结束则调用name_sort子程序对电话号码表按人名排序;.显示提示符‘DOyouwantatelephonenumber?’;.回答N则退出程序;.回答Y则再显示提示符‘name?’;.调用子程序input_name接收人名;.调用子程序name_search在电话号码表中查找所要的电话号码;.调用子程序printline按要求格式显示人名及电话号码;.重复查号提示符直至用户不再要求查号为止。实验代码datasegmenttel_tabdb50dup<28dup<''>>;tel_tab电话本空间tab_lendw0;已存联系人数目endaddrdw0;最后一个联系人的地址+28tnamedb21,?,20dup<''>,?;姓名缓冲区tphonedb9,?,8dup<''>,?;号码缓冲区tempdb28dup;一个联系人的临时空间inamedb13,10,'Inputname:',13,10,'$'iphonedb13,10,'Inputatelephonenumber:',13,10,'$'go_ondb13,10,'Continueinsert?',13,10,'$';提示是否继续插入联系人snamedb13,10,'Name?',13,10,'$'name_edb13,10,13,10,'Thenamehasbeeninthetable!Pleaseinputagain!',13,10,'$'text2db13,10,'NameTel.',13,10,'$'text3db13,10,'Thenameisnotinthetelephonetable!',13,10,'$'text4db13,10,13,10,'Doyouwantatelephonenumber?',13,10,'$'dataendscodesegment;****************************************************************************;主程序;-------------------------------------------------------------------------------------mainprocfarassumecs:code,ds:data,es:datastart:pushds;保存旧数据用于返回subax,axpushaxmovax,data;数据段、附加段初始化movds,axmoves,axinname:leadx,iname;提示输入姓名movah,09hint21hcallinput_name;调用读入姓名子程序callname_search;调用查找子程序,cmpbx,-1;如表中不存在该联系人jestor;则跳转到storcallcrlf;回车换行leadx,name_e;否则提示该联系人已在表中,提示重新输入movah,09hint21hjmpinnamestor:callstor_name;调用姓名转存子程序,把姓名移动到表中leadx,iphone;提示输入电话号码movah,09hint21hcallinphone;调用读入号码子程序callname_sort;排序callcrlfleadx,go_on;提示是否继续插入movah,09hint21hchoice1:movah,07;读取用户选择int21hcmpal,'y'jeinnamecmpal,'Y'jeinnamecmpal,'n'jeprint_all;如选择不插入,则显示所有记录cmpal,'N'jeprint_alljmpchoice1print_all:callprintall;显示所有记录want_search:callcrlfleadx,text4;提示是否查找号码movah,09int21hcallcrlfchoice2:movah,07;读取用户选择int21hcmpal,'y'jesearch;如果为y或Y则跳转到查找searchcmpal,'Y'jesearchcmpal,'n';为n或N则退出程序jeexit_mcmpal,'N'jeexit_mjmpchoice2search:leadx,sname;提示用户输入要查找的姓名movah,09int21hcallinput_name;读入姓名callname_search;查找callcrlfcallcrlfcmpbx,-1;是否查找到?jenot_find;=1则跳转到未找到not_findleadx,text2;找到则输出'NameTel.'movah,09int21hcallprintline;显示查找到的联系人jmpwant_search;跳转到提示查找not_find:;未找到callcrlfleadx,text3;输出'Thenameisnotinthetelephonetable!'movah,09hint21hjmpwant_searchexit_m:retprintallprocnear;**************************************************************************;显示所有电话。显示电话表中的所有姓名和号码,查看排序结果是否正确;----------------------------------------------------------------------------------------------callcrlfcallcrlfleadx,text2;输出'NameTel.'movah,09int21hleabx,tel_tab;号码表基址rept1:callprintline;显示联系人addbx,28;求下一个联系人首地址cmpbx,endaddr;是否到达表尾?jbrept1;未到达则继续显示retprintallendp;*******************************************************************;输入姓名子程序:读入姓名到tname缓冲区,并把不满20位的部分;补上空格〔方便查找时的比较;----------------------------------------------------------------------------------input_nameprocnearcallcrlfnoinputn:leadx,tname;姓名缓冲区movah,0ah;调用dos0ah读入字符串功能int21hcmptname[1],0;如果输入为回车jenoinputn;继续等待输入xorbx,bxmovbl,tname[1]movcx,20subcx,bxset_blank:movtname[bx+2],20h;把不满20位的部分补空格incbxloopset_blankcallcrlfretinput_nameendp;*****************************************************************;stor_name,该子程序把tname缓冲区的姓名转存入号码表中;---------------------------------------------------------------------------------stor_nameprocnearxorcx,cxmovcl,tname[1];字符个数leasi,tname[2]movdi,endaddrcldrepmovsbinctab_len;联系人人数增1addendaddr,28;最后一个联系人地址增28retstor_nameendp;***************************************************************;获取号码子程序:读入用户输入的号码到tphone缓冲区,然后;转存入号码表对应位置;------------------------------------------------------------------------------------inphoneprocnearnoinputp:callcrlfleadx,tphonemovah,0ahint21h;调用dos0a号功能输入字符串cmptphone[1],0;判断输入是否为回车jenoinputp;是,则继续等待输入xorcx,cxmovcl,tphone[1]leasi,tphone[2]movdi,endaddrsubdi,8;待插入位置cldrepmovsb;移动retinphoneendp;**********************************************************************;排序子程序〔用直接插入排序,对号码表进行按人名从小到大排序;--------------------------------------------------------------------------------------------------name_sortprocnearcmp[tab_len],1;记录数1,不用排序jeexitnleadi,tel_tab;第一个记录地址movsi,endaddrsubsi,28;最后一个记录-待排序记录的地址next1:movcx,20movax,si;暂存两个地址movdx,dicldrepecmpsb;查找插入位置jbinsertmovsi,axmovdi,dxadddi,28;比较下一个cmpdi,si;是否比较完jbnext1;没有则继续比较jmpexitn;否则排序完成insert:movcx,28movsi,axleadi,temprepmovsb;待排序数据放到缓冲区movdi,axnext2:movcx,28movsi,disubsi,28repmovsb;记录后移subdi,56cmpdi,dxjanext2movcx,28movdi,dxleasi,temprepmovsb;插入到待插位置exitn:retname_sortendp;******************************************************************************;姓名查找子程序。入口参数为tname缓冲区的人名,用寄存器bx返回结果,找到则返回该;姓名对应记录的地址,未找到则返回=-1;-------------------------------------------------------------------------------------------------------------------name_searchprocnearcmptab_len,0;记录为0,无法查找jeexit_nofindleasi,tname[2];待查姓名地址movax,si;暂存sileabx,tel_tab;从第一个记录开始查找rsearch:movcx,20movdi,bxrepecmpsbjzexit_nmovsi,axaddbx,28;查找下一个cmpbx,endaddrjbrsearchexit_nofind:movbx,-1;未找到则〔bx=-1exit_n:retname_searchendp;******************************************************************************;显示姓名和电话子程序。待显示的记录的地址保存在bx寄存器。;-----------------------------------------------------------------------------------------printlineprocnearpushax;保存axcallcrlfxorsi,simovcx,28;共28个字符movah,02h;调用dos2号显示字符功能nextc:movdl,[bx][si];待显示字符int21hincsi;输出下一个字符loopnextccallcrlfpopaxretprintlineendp;******************************************************************************;回车换行子程序;-----------------------------------------------------------------------------------------crlfprocnearpushaxpushdxmovah,02hmovdl,0dh;回车int21hmovdl,0ah;换行int21hpopdxpopaxretcrlfendp;-----------------------------------------------------------------------------------------mainendp;主程序结束codeends;代码段结束endstart;程序结束实验总结本次实验前应先画好程序框图和模块调用图,并在编码中不断修改完善,对把握程序的整体结构很有帮助。把模块设计成子程序在主程序调用,分解了整个程序功能,降低了设计的难度,同时方便调试和修改。总的来说,此次实验有点难度,但是平时多上机练习,完成此次实验并不是难事。
本文档为【汇编语言程序设计实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
zxiang
多年工作经验
格式:doc
大小:65KB
软件:Word
页数:14
分类:成人教育
上传时间:2022-02-16
浏览量:1