66合肥工业大学汇编程序设计实验报告完整代码

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1合肥工业大学计算机与信息学院实验报告课程:汇编语言程序设计专业班级:信息安全13-1学号:69姓名:马骏2实验一Debug程序的使用一.实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。2、掌握8086/8088的寻址方式及多字节数据的处理方法。二.实验内容1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。三.实验过程和程序实验将”H”和”FEDCBA98H”分别送入起始地址为DS:200H和DS:204H的两个单元中。还包含两个附加题,一是从DS:0000H开始的5个16位带符号数分别记为x,y,z,v,w,E命令初始化为:540,1,-1,1080,0,试求w=(v-(x*y+z-540))/x,二是统计bx中1的个数四.实验结果(包括必要的截图)将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。3直接寻址方式实现数据相加寄存器间接寻址实现数据相加4附加题一:从DS:0000H开始的5个16位带符号数分别记为x,y,z,v,w,用E命令初始化为:540,1,-1,1080,0,试求w=(v-(x*y+z-540))/x5附加题二:完成BX中1的个数的统计。五.实验体会通过本次实验,了解了使用debug的各种指令。同时在debug下进行编程,比较麻烦。由于是第一次编写汇编程序,还是需要多练习。6实验二汇编语言程序设计(顺序、循环)一.实验目的1、掌握顺序和循环程序结构和设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。二.实验内容1、X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。试编写汇编语言程序完成以下功能:①计算表达式值(V–(X*Y+Z-720))/X;②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。2、求一个班50名学生成绩的平均值(附加题:最大值和最小值,并将结果显示出来)3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有‘asm’子串。如果有,输出‘Yes’;否则,输出‘No’)。三.实验过程和程序1、计算表达式值(V–(X*Y+Z-720))/X;datasegmentxdw021chydw0001hzdw0ffffhvdw0438hwdw0000hsum1dw?sum2dw?dataendsassumecs:code,ds:datacodesegmentstart:movax,datamovds,axMOVAX,xIMULY;x*yMOVCX,AX7MOVBX,DXMOVAX,ZCWDADDCX,AXADCBX,DX;x*y+zSUBCX,540;?SBBBX,0;x*y+z-540MOVAX,VCWDSUBAX,CXSBBDX,BX;v-(x*y+z-540)IDIVX;(v-(x*y+z-540))/xmovsum1,axmovsum2,dxmovax,4c00hint21hcodeendsendstart2、求一个班50名学生成绩的平均值(附加题:最大值和最小值,并将结果显示出来)datasegmentdb7,49dup(6)maxdb?mindb?resultdb0dataendsassumecs:code,ds:datacodesegmentstart:movax,datamovds,axmovax,0movcx,50movdi,0again:movbx,0movbl,[di]8adddi,1addax,bxloopagainmovbl,50divblmovresult,almovdi,50max2:subdi,1movcx,50movsi,0moval,[di]max1:cmpal,[si]jbmax2addsi,1loopmax1movmax,almovdi,50min2:subdi,1movcx,50movsi,0moval,[di]min1:cmpal,[si]jnbmin2addsi,1loopmin1movmin,almovax,4c00hint21hcodeendsendstart93、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有‘asm’子串。如果有,输出‘Yes’;否则,输出‘No’)。datasegmentdata2db50,?,50dup('$')stringdb'yes$'string1db'no$'dataendsassumecs:code,ds:datacodesegmentstart:movax,datamovds,axmovah,0ahmovdx,offsetdata2int21hmovah,2hmovdl,0ahint21hmovah,2hmovdl,0dhint21hmovdx,offsetdata2+2movah,09hint21hmovah,2hmovdl,0ahint21hmovah,2h10movdl,0dhint21hmoval,0hmovcx,47movdi,0again:moval,[di+2]cmpal,61hjnznextmoval,[di+3]cmpal,73hjnznextmoval,[di+4]cmpal,6dhjnznextjmpyesnext:adddi,1loopagainmovdx,offsetstring1movah,09hint21hjmpendcodeyes:movdx,offsetstringmovah,09hint21hendcode:movax,4c00hint21hcodeendsendstart11四.实验结果(包括必要的截图)1、计算表达式值(V–(X*Y+Z-720))/X;2、求一个班50名学生成绩的平均值(附加题:最大值和最小值,并将结果显示出来)0030地址为平均值的商0032地址为最大值0034地址为最小值3、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有‘asm’子串。如果有,输出‘Yes’;否则,输出‘No’)。12五.实验体会通过此次试验,了解了符号扩展指令的使用。第二程序中,以及在输出时,输入的字符串末尾要注意加结束标志’$’,还有在输出字符串前要先输出个回车换行,否则回车后看不到输出结果。13实验三汇编语言子程序设计(分支、子程序)一.实验目的1、掌握分支和子程序结构和设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。3、通过汇编语言了解高级语言的参数传递等知识。二.实验内容1、BL中的只有一位为1。编写程序测试,并输出提示信息“TheXBitis1”,要求:地址表和转移表。2.编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。要求通过堆栈(寄存器、内存)传送所有参数。3.实践CAsm的转换过程。三.实验过程和程序1、BL中的只有一位为1。编写程序测试,并输出提示信息“TheXBitis1”,要求:地址表和转移表。;blhaveone1coutTheXBitis1datasegmentaddresdwfun8,fun7,fun6,fun5,fun4,fun3,fun2,fun1string8db'The8Bitis1$'string7db'The7Bitis1$'string6db'The6Bitis1$'string5db'The5Bitis1$'string4db'The4Bitis1$'string3db'The3Bitis1$'string2db'The2Bitis1$'string1db'The1Bitis1$'dataendsassumeds:data,cs:codecodesegmentstart:movax,datamovds,ax14movbl,10hmovax,0000hmovcx,8math:shlbl,1jcrightjmpnextright:movdl,02hmuldlmovbp,axjmpaddres[bp]next:incaxloopmathfun8:movdx,offsetstring8jmpcoutfun7:movdx,offsetstring7jmpcoutfun6:movdx,offsetstring6jmpcoutfun5:movdx,offsetstring5jmpcoutfun4:movdx,offsetstring4jmpcoutfun3:movdx,offsetstring3jmpcoutfun2:movdx,offsetstring2jmpcoutfun1:movdx,offsetstring1jmpcoutcout:movah,09hint21hmovah,4chint21h15codeendsendstart2.编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。要求通过堆栈(寄存器、内存)传送所有参数。使用堆栈:datasegmentxdb03hydb0ffhzdw0000hdataendsstacksegmentdw100dup(?)stackendsassumeds:data,cs:code,ss:stackcodesegmentstart:movax,datamovds,axmovax,stackmovss,axmoval,xpushaxmoval,ypushaxcallprogrammovz,dxaddsp,2jmpquitprogram:pushbpmovbp,spmovax,[bp+6]movdx,[bp+4]imuldlmovdx,axmovax,[bp+6]16cbwadddx,axmovax,[bp+4]cbwsubdx,axpopbpretquit:movah,4chint21hcodeendsendstart二、使用寄存器传值datasegmentxdb03hydb0ffhzdw0000hdataendsstacksegmentdw100dup(?)stackendsassumeds:data,cs:code,ss:stackcodesegmentstart:movax,datamovds,axmovax,stackmovss,axmoval,xmovbl,ycallprogrammovz,dxjmpquitprogram:17movcl,alimulblmovdx,axmoval,clcbwadddx,axmoval,blcbwsubdx,axretquit:movah,4chint21hcodeendsendstart3.实践CAsm的转换过程。#includestdio.hintmain(){_asmmovax,0088h;_asm{}return0;}18四.实验结果(包括必要的截图)1、BL中的只有一位为1。编写程序测试,并输出提示信息“TheXBitis1”,要求:地址表和转移表。2.编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。要求通过堆栈(寄存器、内存)传送所有参数。使用堆栈:dx及0002中为f(3,-1)=119二、使用寄存器传值dx及0002中为f(3,-1)=13.实践CAsm的转换过程。TITLED:\c++documents\huibian.cpp.386Pincludelis

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功