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

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

举报
开通vip

汇编语言程序设计实验报告..优选.....学习.资料.汇编语言程序设计报告班级:学号::目录TOC\o"1-3"\h\z\uHYPERLINK\l"_Toc437862611"汇编语言程序设计报告PAGEREF_Toc437862611\h1HYPERLINK\l"_Toc437862612"汇编语言程序设计实验报告PAGEREF_Toc437862612\h3HYPERLINK\l"_Toc437862613"实验一PAGEREF_Toc437862613\h3HYPERLINK\l"_...

汇编语言程序设计实验报告
..优选.....学习.资料.汇编语言程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 班级:学号::目录TOC\o"1-3"\h\z\uHYPERLINK\l"_Toc437862611"汇编语言程序设计报告PAGEREF_Toc437862611\h1HYPERLINK\l"_Toc437862612"汇编语言程序设计实验报告PAGEREF_Toc437862612\h3HYPERLINK\l"_Toc437862613"实验一PAGEREF_Toc437862613\h3HYPERLINK\l"_Toc437862614"实验容PAGEREF_Toc437862614\h3HYPERLINK\l"_Toc437862615"实验目的PAGEREF_Toc437862615\h3HYPERLINK\l"_Toc437862616"实验代码PAGEREF_Toc437862616\h3HYPERLINK\l"_Toc437862617"实验代码整体思路PAGEREF_Toc437862617\h3HYPERLINK\l"_Toc437862618"1.检测所编程序的正确性PAGEREF_Toc437862618\h3HYPERLINK\l"_Toc437862619"实验二PAGEREF_Toc437862619\h3HYPERLINK\l"_Toc437862620"1.实验容PAGEREF_Toc437862620\h3HYPERLINK\l"_Toc437862621"结果测试:PAGEREF_Toc437862621\h3HYPERLINK\l"_Toc437862622"Debug:PAGEREF_Toc437862622\h3HYPERLINK\l"_Toc437862623"实验三PAGEREF_Toc437862623\h3HYPERLINK\l"_Toc437862624"实验要求:PAGEREF_Toc437862624\h3HYPERLINK\l"_Toc437862625"实验代码:PAGEREF_Toc437862625\h3HYPERLINK\l"_Toc437862626"实验代码思路:PAGEREF_Toc437862626\h3HYPERLINK\l"_Toc437862627"检测结果,验证正确性PAGEREF_Toc437862627\h3HYPERLINK\l"_Toc437862628"结论PAGEREF_Toc437862628\h3HYPERLINK\l"_Toc437862629"实验四PAGEREF_Toc437862629\h3HYPERLINK\l"_Toc437862630"实验容PAGEREF_Toc437862630\h3HYPERLINK\l"_Toc437862631"流程图PAGEREF_Toc437862631\h3HYPERLINK\l"_Toc437862632"实验代码:PAGEREF_Toc437862632\h3HYPERLINK\l"_Toc437862633"WindbgPAGEREF_Toc437862633\h3HYPERLINK\l"_Toc437862634"实验结果测试:PAGEREF_Toc437862634\h3HYPERLINK\l"_Toc437862635"输入数据进展测试PAGEREF_Toc437862635\h3HYPERLINK\l"_Toc437862636"实验五PAGEREF_Toc437862636\h3HYPERLINK\l"_Toc437862637"实验容:多模块程序设计及多语言混合编程。PAGEREF_Toc437862637\h3HYPERLINK\l"_Toc437862638"要求:PAGEREF_Toc437862638\h3HYPERLINK\l"_Toc437862639"实验代码:PAGEREF_Toc437862639\h3HYPERLINK\l"_Toc437862640"实验代码 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 说明:PAGEREF_Toc437862640\h3HYPERLINK\l"_Toc437862641"实验数据检测:判断是否成功完成实验任务PAGEREF_Toc437862641\h3HYPERLINK\l"_Toc437862642"实验心得PAGEREF_Toc437862642\h3汇编语言程序设计实验报告实验一实验容:熟悉DOS编程环境:编写一个DOS环境的汇编语言程序,要求从键盘输入一串字符,去除连续重复的字符后再显示,如:输入一串为"aaawwweerrty〞的字符串,输出结果应为‘awerty’实验目的:通过上机实践加深对16位环境下编程的了解学会使用debuge调试程序实验代码:ASSUMECS:CODE,DS:DATADATASEGMENTBUFFERDB60,",60DUP(")PRINTDB'TOINPUT:'CRLFDB0DH,0AH,'$'DATAENDSCODESEGMENTMAIN:MOVAX,DATAMOVDS,AXMOVAH,9LEADX,PRINTINT21HMOVAH,0AHLEADX,BUFFERINT21HMOVAH,9LEADX,CRLFINT21HLEASI,BUFFER+1LP1:INCSILP2:MOVAL,[SI]CMPAL,13JZDISPCMPAL,[SI+1]JNZLP1MOVDI,SILP3:INCDIMOVAL,[DI+1]MOV[DI],ALCMPAL,13JZLP2JMPLP3DISP:MOVAL,'$'MOV[SI],ALMOVAH,9LEADX,BUFFER+2INT21HEXIT:MOVAX,4C00HINT21HCODEENDSENDMAIN实验代码整体思路:定义一个大小为60的缓冲区,用来存储从键盘输入的字符串;调用中断调用,将字符串输入到缓冲区当中;使用取地址符号Lea取得输入字符串的首地址然后后一位与前一位相比,假设一样那么将其舍弃,否者将其 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 在缓冲区中,循环完毕之后在其后补上字符"$〞即可一次输出,无单个输出检测所编程序的正确性:编译所建的1.asm文件:按下回车键之后开场编译,如以下图所示,编译完毕说明没有错误不存在警告对编译成功之后的文件进展,以生成能运行的.exe文件,如以下图1-1所示:1-1之后发现〔Link〕之后也是成功的,接下来就进展测试的最后一步,即运行1.exe文件,输入一串字符串,看能否到达预期的目的,如到达,那么成功,否者重新编译。可见,与预期目的一致,到达了目的。6.该实验使用的知识点:1.中断调用,以及使用功能号实现输入输出2.使用循环,无条件转移指令〔JMP〕等实验二实验容:〔1〕.程序中自定义缓冲区AREA1,其中存放200个有序的无符号字型数据〔至少有3个重复数据〕,编程序将其排序后送到自AREA2开场的单元中,要求传送后的数据从大到小排序,并实现查找功能,判定需要查找的数据在AREA1与AREA2中分别对应的位置,并通过查看存验证结果的正确性。把有序的无符号字型数据换成带符号字型数据,实现以上功能。(2).熟悉dEbUg调试环境。使用dEbUg调试程序观察机器码,并单步执行,观察每一条指令的执行结果、存放器的容、存变量和堆栈数据的变化情况。2.实验代码如下:assumeds:data,cs:code,ss:stackdatasegmentarea1dw2,2,2,10,15,255,0,67,143countdw$-area1indexdw0area2dw200dup(0)flagdb200dup(0)tips1db'Pleaseinputthenumberyouwanttofind:','$'tips2db'NotFound!','$'crlfdb0dh,0ah,'$'outputdb5dup('$')dataendsstacksegmentstackdw32dup(")stackendscodesegmentfindmostproc;findthegreatestnumberinarea1,putitinAXpushbxpushcxpushdxpushbpleabx,area1movdx,[bx]addbx,2lo:cmpdx,[bx]jgesmaller;jaesmaller;无符号时使用此指令,并将上条指令注释掉andflag[bx],1jnzsmallermovdx,[bx];将当前最大值储存movbp,bxsmaller:addbx,2cmpbx,count;检查是否为最后一个元素;记录最大值于axjlnotfinishmovax,dxmovWORDPTRds:flag[bp],1popbppopdxpopcxpopbxretnotfinish:jmplofindmostendpwriteGreatest2area2proc;按照要求将数据写入area2pushaxpushbxleabx,area2find_another:callfindmostmov[bx],axaddbx,2movindex,bxleaax,area2subindex,axleaax,countcmpindex,axjnzfind_anotherpopbxpopaxretwriteGreatest2area2endpconvertDigital2Asciiprocpushbxpushdxmovdx,axxorbx,bxmovcl,100divcladdax,48movoutput[bx],alincbxmovax,dxmovcl,10divcladdah,48addal,48movoutput[bx],alincbxmovoutput[bx],ahleadx,outputmovah,9int21hleadx,crlfint21hmovax,dxpopdxpopbxretconvertDigital2AsciiendpfindTheValueproc;在两个区域中分别查找数字ax的位置pushaxpushbxpushsipushcxpushdxmovcx,countmovbx,-2equal1:addbx,2cmpax,area1[bx]jnzequal1pushaxmovax,bxsarax,1incaxcallconvertDigital2Asciipopaxmovbx,-2equal2:addbx,2cmpax,area2[bx]jnzequal2pushaxmovax,bxsarax,1incaxcallconvertDigital2AsciipopaxpopdxpopcxpopsipopbxpopaxretfindTheValueendpstart:movax,datamovds,axcallwriteGreatest2area2movax,255callfindTheValuemovax,4c00hint21hcodeendsendstart结果测试:对实验二进展编译:运行程序,输出实验结果:Debug:显示存放器容,如以下图所示:用U命令反汇编可执行代码,如以下图所示:用g命令设置断点到CS:00D8处,如以下图所示:用t命令跟踪执行程序,如以下图所示逐条跟踪三次的结果:用q命令退出:实验三实验要求:熟悉Windows编程环境=1\*GB2⑴编写一个Windows界面汇编程序,显示一个带Yes,No选择按钮的消息框,标题显示为:自己的;正文容显示为:学号;选择Yes的返回:"你选择的是Yes〞,选择No的返回:"你选择的是No〞。〔2〕〔编写一个Windows32位控制台程序,要求从键盘输入5个十六进制数,输出该数所对应的二进制数中所包含"0〞的个数。〕〔3〕熟悉windbg调试环境。使用windbg调试程序观察机器码,并单步执行,观察每一条指令的执行结果、存放器的容、存变量和堆栈数据的变化情况。实验代码:.386.modelflat,stdcalloptioncasemap:noneMessageBoxAPROTO:dword,:dword,:dword,:dwordMessageBoxequIncludelibuser32.libIncludelibmsvcrt.libNULLequ0MB_OKequ1.stack4096.dataSzTilebyte'强!',0SzMsgbyte'1120211888!',0NO1byte'我选的是确定!',0ah,0NO2byte'我选的是取消!',0ah,0.codestart:invokeMessageBox,NULL,offsetSzMsg,offsetSzTile,MB_OKcmpeax,1jzAcmpeax,1jnzBA:invokeMessageBox,NULL,offsetNO1,offsetSzTile,MB_OKretB:invokeMessageBox,NULL,offsetNO2,offsetSzTile,MB_OKretretendstart.386.modelflat,stdcallincludelibmsvcrt.libprintfPROTOC:dword,:varargscanfPROTOC:dword,:vararg.dataszmsgbyte'%d',0ah,0msgbyte'%d',0szformatbyte'%x',0bufdword40dup(")l0dword"l1dword"l2dword"l3dword"l4dword".codestart:movesi,0L:invokescanf,offsetszformat,offsetbufmoveax,bufmovecx,4movedx,0t:movebx,eaxandebx,1cmpebx,0jzyzcmpebx,0jnztyyz:incedxty:shreax,1looptpushedxINCESIcmpesi,5jbLpopl4popl3popl2popl1popl0invokeprintf,offsetszmsg,l0invokeprintf,offsetszmsg,l1invokeprintf,offsetszmsg,l2invokeprintf,offsetszmsg,l3invokeprintf,offsetmsg,l4retendstart实验代码思路:第一小题代码思路:说明MessageboxA的调用规那么和参数类型将定义的MessageBoxA通过指令equ赋给MessageBox使用伪指令invoke,首次输出显示一个带Yes,No选择按钮的消息框,标题显示为:自己的;正文容显示为:学号通过比较MessageBox的返回值与1的大小确定其选择的yes还是no5.再次使用伪指令INVOKE调用MessageBox二次输出选择Yes的返回:"你选择的是Yes〞,选择No的返回:"你选择的是No〞。第二小题代码分析:说明scanf和printf的调用规那么和参数类型在数据区说明输入输出的表现形式设置一个外部变量esi确保循环五次,即可以依次输入5个十六进制数;不断使数据右移即除二,与1做与运算,然后和0比较大小,假设与0相等,那么该数有一个0,用edx记录0的个数。把edx入栈,然后清零出栈,倒序输出检测结果,验证正确性对第一个小实验代码进展编译,如以下图所示:运行检测结果:分别选择确定,取消,检测是否有正确的返回值,实验测试如下:对第二个小实验进展编译对第二个小实验进展检测,看是否正确,测试结果如下:结论:经过上述测试,实验结果与理论值相符,正确实验四实验容:把数组中的n个双字型元素按从大到小〔从小到大〕的顺序排列。增加一个交换标志,在排序完成时不再执行多余的外层循环。熟悉windbg调试环境。使用windbg观察存变量,并观察结果。流程图ESIEBX"EBX=arr[ESI*4+4]ESI=ESI+1EAX=arr[ESI*4]flag=1arr[ESI*4+4]=EAXarr[ESI*4]=EBX完毕flag==1"ESI=0flag=0开场ECX=n-1flagfla1ECX>0"Flag=1实验代码:.386.modelflat,stdcalloptioncasemap:noneincludelibmsvcrt.libprintfPROTOC:dword,:varargscanfPROTOC:dword,:vararg.datainput_single_numbyte'%d',0output_single_numbyte'%d',0output_single_num_crlfbyte'%d',0ah,0numberOfElementsdword"numberdword128dup(").codegetInputproclocalindex,temp,numberOfEle:dwordinvokescanf,offsetinput_single_num,offsetnumberOfElementspushecxmovecx,numberOfElementsmovnumberOfEle,ecxmovindex,0input:pusheaxmoveax,4mulindexmovtemp,eaxaddtemp,offsetnumberpopeaxinvokescanf,offsetinput_single_num,tempmovecx,numberOfEledecnumberOfEleincindexloopinputpopecxretgetInputendpbubbleSortproclocalflag:bytepushamovflag,0;Getthenumberofelements,andsaveitatecxmovecx,numberOfElementsdececxloop_out:xoresi,esiloop_in:moveax,number[esi*4]movebx,number[esi*4+4]cmpeax,ebxjgcontrolmovflag,1movnumber[esi*4],ebxmovnumber[esi*4+4],eaxcontrol:incesicmpesi,ecxjbloop_intestflag,1jzendloopmovflag,0looploop_outendloop:poparetbubbleSortendpoutputprocpushamovecx,numberOfElementsdececxdececxxoresi,esiisover:pushecxinvokeprintf,offsetoutput_single_num,number[esi*4]popecxcmpesi,ecxincesijbisoverinvokeprintf,offsetoutput_single_num_crlf,number[esi*4]poparetoutputendpstart:invokegetInputinvokebubbleSortinvokeoutputretendstartWindbg反汇编:使用U从起始地址00401010开场,列出15条语句执行断点命令G单步执行命令t,如以下图表示用t执行3条指令4.进程执行命令p,如以下图所示用P命令执行一条语句5.显示存放命令r,如下所示r命令之后紧跟P命令显示存放器容6.用alt+4显示存放器容,出现如以下图所示的存放器窗口7.显示存放单元D命令实验结果测试:对实验进展编译:输入数据进展测试:实验五实验容:多模块程序设计及多语言混合编程。要求:=1\*GB2⑴编写一个汇编语言递归子程序〔子模块〕求斐波那契数列,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)〔n>=2,n∈N*〕;〔输入一个数字,假设该数字在数列中,那么输出N,假设不在数列中,输出"error〞〕=2\*GB2⑵编写一个计算Z=sin(2n+1)*F(n)的汇编语言主模块,其中sin(x)调用C语言的函数库、F(n)通过调用=1\*GB2⑴中的模块实现,输入n。显示格式为:Z=使用调试程序观察参数传递及堆栈平衡情况。实验代码:.386.modelflat,stdcalloptioncasemap:noneincludelibmsvcrt.libscanfPROTOC:dword,:varargprintfPROTOC:dword,:vararg.dataSzMsgbyte'%d',0ah,0Szbyte'%x',0bufdword2Dup(")pjbyte'inputerror!',0Fdword1Tdword1counterdword2.codestart:invokescanf,offsetSz,offsetbufcmpbuf,1jzL6cmpbuf,1jnzL7L6:invokeprintf,offsetSzMsg,bufjmpLL7:moveax,Fpusheaxmovebx,Tpushebxaddeax,ebxpusheaxinccountermovedx,ebxmovebx,eaxmoveax,edxcmpbuf,ebxjzL2cmpbuf,ebxjaL3L2:invokeprintf,offsetSzMsg,counterjmpLL3:invokeprintf,offsetpjL:retendstart.386.modelflat,stdcallOptioncasemap:noneincludelibmsvcrt.libprintfPROTOC:dword,:varargscanfPROTOC:dword,:varargsinPROTOC:dword,:vararg.datandword0fdword50dup(0)fmtoutbyte'f(n)=%d',0ah,0fmtfoutbyte'z=%f',0ah,0fmtbyte'%d',0sinyqword0xqword0yqword0.codestartprocmovwordptrf[0],0movwordptrf[4],1movesi,0movecx,30L1:MOVeax,f[esi]movebx,f[esi+4]addeax,ebxmovf[esi+8],eaxaddesi,4loopL1invokescanf,offsetfmt,addrnmovesi,ninvokeprintf,offsetfmtout,f[esi*4]fildwordptrf[esi*4]invokesin,esifmulfstpxinvokeprintf,offsetfmtfout,xRETstartendpendstart实验代码分析说明:将初始值F(0)=0,F(1)=1,分别存储在两个不同的变量里设置一个变量counter用来记录N的大小,初始值为1从键盘输入一个数字判断其值与1的大小,假设等于1直接输出counter,否者执行第四步通过叠加,屡次计算F,判断其与输入值的大小关系,如果大于输入值,那么输出error,如果等于该输入值那么输出counter,否那么继续循环声明sin函数的调用规那么及参数类型,将其值与F相乘,输出想要的结果实验数据检测:判断是否成功完成实验任务对第一个实验进展编译,如以下图所示:输入数字进展测试,看是否与理论值相符,测试结果如下:可见实验数据与理论值相符,到达了实验目的,对第二个小实验进展编译,如以下图:输入一组数据进展测试:实验心得纸上得来终觉浅,绝知此事要躬行!此话说的一点也不错,之前学习汇编语言时只是上课听教师讲课并未觉得有什么问题,感觉很容易理解。可是当我开场做实验时候,遇到了一系列问题,与之前的感觉完全不同。顿时就陷入了迷茫。我开场反问自己到底学了点什么.后来我花了大量的时间看自己编写的程序,根据编译提示我很快的找到了错误具体在哪一行,然后针对该语句在 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf 上找相关定义,反复琢磨终于改了出来,做完第一个实验之后我回头才发现许多错误都是自己平常不注意细节,教师强调完之后也并没有当回事,在自己实践编程的时候吃了大苦头。上课认真听讲注意教师强调的细节可以为自己课下节约大量的时间,后来的几个实验刚上手并没有什么思路,于是我就开场翻书,认真的看了几遍书之后,终于编出了一个半成品〔可以运行但结果有偏差〕,于是我又开场了纠错。在实验过程中,我发现不管做什么事都必须要有毅力,要有恒心,比方说debug过程中,肯定不可能一眼就看到错误,需要我们反复的看代码,一遍又一遍的反思自己的思路看是自己思路出了问题还是编程代码没有符合自己的思维出现的错误,然后才有可能改正。确实,实验加深了我对所学知识的认识,但是自己所做的实践还不够。我把所学的C语言和汇编语言做了一些比较,觉得汇编语言不大符合人的逻辑思维。有时候用C语言很简单就能实现的循环,实践起来也觉得很顺利。可是换成汇编语言使用循环的时候可能是因为变量不太充足,把自己搞得晕头转向。还有排序比起C语言里的排序就更复杂了。今后一定要加强练习,多实践才能更好的理解所学的知识,学到的知识才能发挥其作用。如果只是局限于书本上所说的不加以实践学的再好又有什么用呢.无非是又多了几个括一样的人物。以后上课的过程中要结合练习更好地理解所学容,争取能养成一个良好的习惯,这样才能走得更远!教育之通病是教用脑的人不用手,不教用手的人用脑,所以一无所能。教育革命的对策是手脑联盟,结果是手与脑的力量都可以大到不可思议。
本文档为【汇编语言程序设计实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
ysdg83
从事建筑公司质量、技术
格式:doc
大小:99KB
软件:Word
页数:23
分类:教育学
上传时间:2022-03-21
浏览量:5