汇编语言实验报告

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

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

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

资源描述

合肥工业大学实验报告课程:汇编语言程序设计专业班级:学号:姓名:实验一Debug程序的使用一.实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。2、掌握8086/8088的寻址方式及多字节数据的处理方法。二.实验内容1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。三.实验过程和程序基础题:1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。附加题:1.从DS:0000H开始的5个16位带符号数分别记为x,y,z,v,w,用E命令初始化为:540,1,-1,1080,0,试求w=(v-(x*y+z-540))/x2.完成BX中1的个数的统计。3.用串操作指令将DS:0000开始20个字节初始化为:0CCH。并将这20个字节的内容复制到其后的20个字节里。四.实验结果(包括必要的截图)基础题1:基础题2:附加题1:附加题2:附加题3:五.实验体会1.在汇编语言中,变量的其实都是地址。2.在Debug中,数值都是16进制的。3.在读写内存中的数据时,必须指出数据类型是byte还是word。实验二汇编语言程序设计(顺序、多分支、循环)一.实验目的1、掌握顺序和循环程序结构和设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。二.实验内容1、X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。试编写汇编语言程序完成以下功能:①计算表达式值(V–(X*Y+Z-720))/X;②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。2、使用地址表实现如下功能:根据输入的数字1-7,分别显示相应的英文星期名,如果输入其他字符,则重新输入。3、求一个班50名学生成绩的平均值、最大值和最小值,并将结果显示出来。三.实验过程和程序第一题:stacksegmentstackdw512dup(?)stackendsdatasegmentXdw021CHYdw0001HZdw0FFFFHVdw0438HSUM1dw0HSUM2dw0Hdataendscodesegmentassumecs:code,ds:data,ss:stackstart:movax,datamovds,axmovax,XimulwordptrYmovcx,dxmovbx,axmovax,Zcwdaddbx,axadccx,dxmovax,21CHcwdsubbx,axsbbcx,dxmovax,Vcwdsubax,bxsbbdx,cxidivwordptrXmovwordptrSUM1,axmovwordptrSUM2,dxmovah,4chint21hcodeendsendstart第二题:stacksegmentstackdw512dup(?)stackendsdatasegmenttipdb'Inputnumber(1~7,0forquit):','$'msg1db'Monday',0DH,0AH,'$'msg2db'Tuesday',0DH,0AH,'$'msg3db'Wednesday',0DH,0AH,'$'msg4db'Thursday',0DH,0AH,'$'msg5db'Friday',0DH,0AH,'$'msg6db'Saturday',0DH,0AH,'$'msg7db'Sunday',0DH,0AH,'$'tabledwshow1,show2,show3,show4,show5,show6,show7dataendscodesegmentassumecs:code,ds:data,ss:stackstart:movax,datamovds,axgetnum:;打印提示信息movdx,offsettipmovah,09Hint21H;用户输入数字movah,01Hint21Hmovbl,al;换行保持美观movah,02Hmovdl,0DHint21Hmovah,02hmovdl,0AHint21H;非法数值重新输入cmpbl,'0'jbgetnumcmpbl,'7'jagetnum;输入'0'直接退出cmpbl,'0'jequitandbx,000FHdecbxshlbx,01Hjmptable[bx];输出对应单词print:movah,09Hint21Hjmpgetnumquit:movah,4chint21hshow1:movdx,offsetmsg1jmpprintshow2:movdx,offsetmsg2jmpprintshow3:movdx,offsetmsg3jmpprintshow4:movdx,offsetmsg4jmpprintshow5:movdx,offsetmsg5jmpprintshow6:movdx,offsetmsg6jmpprintshow7:movdx,offsetmsg7jmpprintcodeendsendstart第三题:stacksegmentstackdw512dup(?)stackendsdatasegmentstudentdb50dup(2)tabledw10000,1000,100,10,1NewLinedb0DH,0AH,'$'MaxStrdb'Max:$'MinStrdb'Min:$'Averagedb'Average:$'dataendscodesegmentassumecs:code,ds:data,ss:stackstart:movax,datamovds,axcallcalcAveragecallfindMaxcallfindMinmovah,4CHint21HcalcAverage:leasi,studentmovcx,50movax,0PlusNext:addal,[si]adcah,0incsiloopPlusNextmovbl,50divblmovbl,alxorbh,bhleadx,Averagemovah,09Hint21Hcallputnumleadx,NewLinemovah,09Hint21HretfindMax:leasi,studentmovcx,50moval,0MaxNext:cmpal,[si]jaMaxPassmoval,[si]MaxPass:incsiloopMaxNextmovbl,alxorbh,bhleadx,MaxStrmovah,09Hint21Hcallputnumleadx,NewLinemovah,09Hint21HretfindMin:leasi,studentmovcx,50moval,0FFHMinNext:cmpal,[si]jbMinPassmoval,[si]MinPass:incsiloopMinNextmovbl,alxorbh,bhleadx,MinStrmovah,09Hint21Hcallputnumleadx,NewLinemovah,09Hint21Hretputnum:movcx,5leadi,tablenext:movax,bxmovdx,0Hdivwordptr[di]testal,0Hmovbx,dxaddal,'0'movdl,almovah,02Hint21Hadddi,2loopnextretcodeendsendstart四.实验结果(包括必要的截图)第一题:第二题:第三题:五.实验体会1.汇编中的分支、循环只能通过跳转实现。2.地址表是实现多分支结构的常用方法。实验三循环和子程序设计一.实验目的1、掌握循环程序和子程序的设计方法;2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。二.实验内容1.在内存Score缓冲区中存放有100个学生的成绩数据,为无符号字节数。设计程序完成如下功能:根据用户输入的一个2位十进制数,作为查找对象,在该数组中查找,若找到则显示“Y”,若没找到则显示“N”。2.从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(附加题:查找中间是否有‘asm’子串。如果有,输出‘Yes’;否则,输出‘No’)。3.编写一个子程序计算z=f(x,y)=x*y+x-y(x,y,z有符号数内存数)。要求通过堆栈(寄存器、内存)传送所有参数。(要求输入输出实现,且有提示)三.实验过程和程序第一题:stacksegmentstackdw512dup(0)stackendsdatasegmentScoredb20,21,22,23,24,25,26,27,28,29db30,31,32,33,34,35,36,37,38,39db40,41,42,43,44,45,46,47,48,49db50,51,52,53,54,55,56,57,58,59db60,61,62,63,64,65,66,67,68,69db70,71,72,73,74,75,76,77,78,79db80,81,82,83,84,85,86,87,88,89db90,91,92,93,94,95,96,97,98,99db100,101,102,103,104,105,106,107,108,109db110,111,112,113,114,115,116,117,118,119NextLinedb0DH,0AH,'$'Tipdb'Inputanumber:','$'Nodb'N',0DH,0AH,'$'Yesdb'Y',0DH,0AH,'$'InputBufdb4,?,8dup('$')dataendscodesegmentassumecs:code,ds:data,ss:stackstart:movax,datamovds,ax;打印提示信息leadx,Tipmovah,09Hint21H;获取用户的输入,放在alsubsp,2callGetNumpopax;扫描Scoreleabx,Scoremovcx,100L:cmpal,[bx];若[bx]==al,找到jeFoundincbxloopL;循环没有中断,没找到,打印'No'leadx,NojmpOutPutFound:leadx,YesjmpOutPutOutPut:movah,09Hint21HExit:movah,4CHint21H;参数:无;返回值:8位无符号数GetNumprocfarpushaxpushbxpushcxpushdxpushbpmovbp,spleadx,InputBufmovah,0AHint21Hmovdl,10xorax,axleabx,InputBuf[2]movcl,InputBuf[1];设置CXxorch,chNext_GetNum:muldlmovdh,[bx]subdh,'0'addal,dhincbxloopNext_GetNumxorah,ahmovss:[bp+14],axleadx,NextLinemovah,09Hint21HpopbppopdxpopcxpopbxpopaxretGetNumendpcodeendsendstart第二题:stacksegmentstackdw512dup(0)stackendsdatasegmentStrBufdb50,?,50dup('$')

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

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

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

×
保存成功