《汇编语言程序设计实验报告》由会员分享,可在线阅读,更多相关《汇编语言程序设计实验报告(18页珍藏版)》请在金锄头文库上搜索。
1、实验报告实验名称汇编语言程序设计|专业班级:信息安全学号:姓名:实验一汇编语言上机过程和Debug常用调试命令一实验目的:学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。二实验题目:熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。在调试过程中,学习及掌握debug程序的各种操作命令。三问题描述:试编写一程序:比较两个字符串stringl和string2所含的字符是否相同,若相同则显示match;否则,显示nomatch。四方法说明:a)使用ws、tc或EDIT编辑程序来建立源文件,然后存盘,使系统返回DOS。b)用汇编程序ma
2、sm(或asm)对源文件汇编产生目标文件obj如:汇编指示出错则需重新调用编辑程序修改错误,直至汇编通过为止。c)用连接程序link产生执行文件EXE.d)执行程序,可直接从DOS执行程序。e)使用debug程序调试程序的方法。五实验步骤:1.调用字处理程序EDIT建立以sample.asm文件datareasegmentstring1dbmovethecursorbackward.string2dbmovethecursorbackward.mess1dbMatch.,13,10,$mess2dbNomatch!.,13,10,$datareaendsprognamsegmentmainpr
3、ocfarassumecs:prognam,ds:datarea,es:datareastart:pushdssubax,axpushaxmovax,datareamovds,axmoves,axleasi,string1leadi,string2cldmovcx,25repzcmpsbjzmatchleadx,mess2jmpshortdispmatch:leadx,mess1disp:movah,09int21hretmainendpprognamendsendstart2. 对源文件汇编产生目标文件objD:masm文件名。Asm3用连接程序link产生执行文件exeD:link文件名。
4、Obj4. 执行程序D:文件名5. 使用debug程序调试程序的方法。ddebug文件名.exe1. 用G命令运行程序2. 用U命令显示程序3. 学会设置断点。4. 学会查看数据段的内容情况D5. 用E命令修改数据区的字符串。6. 用A命令把数据区的内容恢复原状7. T命令逐条跟踪程序的执行&学会使用F命令、R命令、Q命令等等五、实验总结第一次进行汇编实验,主要是学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法,只有多上机练习,才能更好的掌握汇编语言程序设计的思想。实验二循环程序设计1循环结构是控制重复执行某一程序段的基本程序结构.在汇编语言程序设计中,循环程序
5、的地位也是极为重要,从本质上来看,循环程序结构是分支程序结构的一种手特殊形式,也是使用条件转移指令来控制执行循环的.一. 实验目的:学会用循环结构进行程序编程。二. 实验题目:设计一个按表格形式显示ASCII码为10H100H的所有字符的程序。三. 实验要求:按15行*16列的表格形式显示ASCII码为10H-100H的所有字符,即以行为主的顺序及ASCII码递增的次序依次显示对应的字符。每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCII为0)隔开。四方法说明:(1)显示每个字符可使用功能号为02的显示输出功能调用,使用方法如下:movah,02hmovdl,0AHint21h本
6、题中可把dl初始化为10H,然后不断使其加1(用INC指令)以取得下一个字符的ASCII码。显示空白符时,用其ASCII码0置入dl寄存器,每行结束时,用显示回车(ASCII为0dh)和换行符(ASCII为oah)来结束本行并开始下一行。(3)由于逐个显示相继的ASCII字符时,需要保存并不断修改dl寄存器的内容,而显示空白、回车、换行符时也需要使用dl寄存器,为此可使用堆栈来保存相继的ASCII字符。具体用法是:在显示空白或回车,换行符前用指令pushdx把dl的内容保存到堆栈中去。在显示空白或回车,换行符后用指令popdx恢复dl寄存器的原始内容。五、实验代码stacksegmentdb1
7、00dup(?)stackendscodesegmentassumecs:code,ss:stackstart:movdl,10hmovcl,0fhloopc:movah,02hmoval,dlint21hincdlpushdxmovdl,0hmovah,02hmoval,dlint21hpopdxloopnzloopushdxmovdl,0dhmovah,02hmoval,dlint21hmovdl,0ahmovah,02hmoval,dlint21hpopdxmovcl,0fhcmpdl,0hjneloopc六、实验结果movintcodeah,4ch21hendsendstart-Kzi
8、+;,JYh)8*1JtOa5sbUn2A卩1oxYUMN-rTop-=wTaAua6oHHiiiiL丄一l_e_ht-affiITJS6吧日冲-n=Hca-a-ctAhiJTPD:H%n=i-JAY2ir-Tf11-0?N1J1rleo-tILrrs.-七、实验总结本次试验学会用循环结构进行程序编程,学好循环程序是很重要的,在程序设计中,它的地位是极其重要的。实验三循环程序设计2一. 实验目的:学会用循环程序设计进行程序编程。二. 实验题目:设计查找匹配字符串SEARCH的程序。三. 问题要求:程序接收用户键入的一个关键字以及一个句子。如果句子中不包含关键字则显示nomatch如果句子中包含
9、关键字则显示match,且把该字在句子中的位置用十六进制数显示出来,要求程序的执行过程如下:enterkeyword:abcentersentence:wearestudyingabcmatchatlocation:11Hofthesentenceentersentence:xyz,ok?nomatchentersentence:Ac四. 方法说明:程序可由三部分组成:(1)输入关键字和一个句子,分别存入相应的缓冲区中,可用功能调用0AH。(2) 在句子中查找关键字。1关键字和一个句子中相应字段的比较可使用串比较指令,为此必须定义附加段,但附加段和数据段可以定义为同一段,以便于串指令的使用,这
10、样,相应的寄存器内容也有了确定的含义,如下:SI寄存器为关键字的指针DI寄存器为句子中正相比较的字段的指针CX寄存器存放关键字的字母个数(长度)2整个句子和关键字的比较过程可以用一个循环结构来完成。循环次数为:(句子长度-关键字长度)+1在计算循环次数时,如遇到句子长度小于关键字长度的情况则应转向显示“nomatch”,循环中还需要用到BX寄存器,它用来保存句子中当前正在比较字段的首地址。(3) 输出信息:用功能调用09h分“找到”或“找不到”两种情况分别显示不同的信息。在“找到”时,还要求显示出匹配字符串在句子中的位置,在“找至【”时BX寄存器的内容为匹配字符串的首地址,将此值减到句子的首地
11、址,再将差值加1即是所要的匹配字符串在句子中的位置,可将位置转换为十六进制数从屏幕上显示出来。五、实验代码ssegsegmentstackdw256dup(?)ssegendsdatasegmentmsg1dbEnterkeyword:,24hmsg2dbEnterSentence:,24hcrdb13,10,24hkeyworddb250,?,250dup(?)Sentencedb250,?,250dup(?)matchdbMatchatlocation:,24hmatch1dbofthesentence,13,10,24hnomatchdbNomatch,13,10,24hdataends
12、codesegmentassumecs:code,ds:data,ss:ssegdisp_hexprocnearpushaxpushcxpushdxpushaxmovcl,4roral,clandal,0fhaddal,30hcmpal,39hjnad1addal,7d1:movdl,almovah,2int21hpopaxandal,0fhaddal,30hcmpal,39hjnad2addal,7d2:movdl,almovah,2int21hmovdl,hmovah,2int21hpopdxpopcxpopaxretdisp_hexendpbegin:movax,datamovds,ax
13、moves,axmovdx,offsetmsg1movah,9int21hmovdx,offsetkeywordmovah,0ahjequitmovdx,offsetcrmovah,9int21hb1:movdx,offsetmsg2movah,9int21hmovdx,offsetSentencemovah,0ahint21hmovdx,offsetcrmovah,9int21hmovdl,Sentence+1cmpdl,0jequitmovdh,keyword+1movdi,offsetSentence+b2:cmpdh,dlja_nomatchmovsi,offsetkeyword+in
14、t21hcmpkeyword+1,022movcl,dhmovch,0cldpushdirepecmpsbpopdije_matchincdidecdljmpb2_match:movax,disubax,offsetSentence+2incaxpushaxmovdx,offsetmatchmovah,9int21hpopaxcalldisp_hexmovdx,offsetmatch1movah,9int21hjmpb1_nomatch:movdx,offsetnomatchmovah,9int21hjmpb1quit:movah,4chint21hcodeendsendbegin六、实验结果鄭D:JMSOFTlM3EmbjnDWTerr