您好,欢迎访问三七文档
实验一顺序与分支程序设计一、实验目的1)掌握顺序程序设计方法。2)掌握分支程序的结构及分支程序的设计,调试方法。2)学习数据传送及算术和逻辑运算指令的用法。3)熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。二、实验内容1)有一字变量BUF1是以原码表示的有符号数,要求将其转换为反码和补码,分别存入BUF2和BUF3单元,并在屏幕上显示出来。2)有两个两字节无符号数分别放在存储单元A、B起始的缓冲器中,求其和,结果放在A起始的缓冲区并在屏幕上显示。相加若有进位不存入存储单元。3)在BUF和BUF+1、BUF+2单元分别放有一个无符号字节型数,编程序将其中最大数存入MAX单元,并在屏幕上显示。4)要求同上,只是比较的数为有符号数。5)将1000H单元开始的10个字节数,采用奇偶校验,将奇数在前偶数在后仍存回原数据区。本实验要求在DEBUG调试状态下进行,包括汇编程序、运行程序、检查结果。6)从键盘上接收一位十进制数X,计算Y值,并以十六进制形式显示出来,Y按下列公式计算。)6(2/)5()4(2)3(2222XXXXXXXXXXY7)从键盘上接收两个一位十六进制数X和Y,然后再输入一个A-D之间的一个字符,按下列要求计算。a)当输入字符为A,则计算X+Y,并以十六进制形式显示出来b)当输入字符为B,则计算|X-Y|,并以十六进制形式显示出来c)当输入字符为C,则计算X*Y,并以十六进制形式显示出来d)当输入字符为D,则计算X/Y,并以十六进制形式显示出来三、实验步骤1)输入源程序。2)汇编、连接程序,生成.EXE文件,执行文件,检查结果。源程序一:DATASEGMENTBUF1DW9348HBUF2DW4DUP(0),0AH,0DH,’$’BUF3DW4DUP(0),’$’DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATABEGIN:MOVAX,DATAMOVDS,AXMOVAX,BUF1ADDAX,0JSNEXTMOVBUF2,AXMOVBUF3,AXJMPEEENEXT:ANDAX,7FFFHNOTAXMOVBUF2,AXINCAXMOVBUF3,AXEEE:MOVCX,0004HMOVDI,OFFSETBUF2MOVDX,[DI]ADDDI,03BBB:MOVAX,DXANDAX,000FHCMPAL,0AHJBQQQADDAL,07HQQQ:ADDAL,30HMOV[DI],ALDECDIPUSHCXMOVCL,04HSHRDX,CLPOPCXLOOPBBBMOVCX,0004HMOVSI,OFFSETBUF3MOVDX,[SI]ADDSI,03HCCC:MOVAX,DXANDAX,000FHCMPAL,0AHJBDDDADDAL,07HDDD:ADDAL,30HMOV[SI],ALDECSIPUSHCXMOVCL,04HSHRDX,CLPOPCXLOOPCCCMOVDX,OFFSETBUF2MOVAH,09HINT21HMOVDX,OFFSETBUF3MOVAH,09HINT21HMOVAH,4CHINT21HCODEENDSENDBEGIN运行结果为:ECB7ECB8源程序二:DATASEGMENTADB34H,18H,2DUP(0),’$’BDB56H,83HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,AMOVBL,BADDAL,BLMOVAH,A+1MOVBH,B+1ADCAH,BHMOVA,ALMOVA+1,AHMOVCX,0004HMOVDI,OFFSETAMOVDX,[DI]ADDDI,03NEXT:MOVAX,DXANDAX,000FHCMPAL,0AHJBQQQADDAL,07HQQQ:ADDAL,30HMOV[DI],ALDECDIPUSHCXMOVCL,04SHRDX,CLPOPCXLOOPNEXTMOVDX,OFFSETAMOVAH,09HINT21HMOVAH,4CHINT21HCODEENDSENDSTART运行结果为:9B8A源程序三:STACKSEGMENTSTACKDB1024DUP(0)STACKENDSDATASEGMENTBUFDB70H,35H,1FHMAXDB2DUP(?),’$’DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKBEGIN:MOVAX,DATAMOVDS,AXMOVAL,BUFCMPAL,BUF+1JNBLP1MOVAL,BUF+1LP1:CMPAL,BUF+2JAELP2MOVAL,BUF+2LP2:MOVCX,02HMOVDI,OFFSETMAXMOVDL,ALINCDILP3:ANDAL,0FHCMPAL,0AHJBLP4ADDAL,07HLP4:ADDAL,30HMOV[DI],ALDECDIPUSHCXMOVCL,04SHRDL,CLPOPCXMOVAL,DLLOOPLP3MOVDX,OFFSETMAXMOVAH,09HINT21HMOVAH,4CHINT21HCODEENDSENDBEGIN运行结果为:70源程序四:STACKSEGMENTSTACKDB1024DUP(0)STACKENDSDATASEGMENTBUFDB98H,75H,32HMAXDB2DUP(?),’$’DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKBEGIN:MOVAX,DATAMOVDS,AXMOVAL,BUFCMPAL,BUF+1JGLP1XCHGAL,BUF+1LP1:CMPAL,BUF+2JGLP2XCHGAL,BUF+2LP2:MOVMAX,ALMOVCX,02HMOVDI,OFFSETMAXMOVDL,[DI]INCDILP3:MOVAL,DLANDAL,0FHCMPAL,0AHJBLP4ADDAL,07HLP4:ADDAL,30HMOV[DI],ALDECDIPUSHCXMOVCL,04SHRDX,CLPOPCXLOOPLP3MOVDX,OFFSETMAXMOVAH,09HINT21HMOVAH,4CHINT21HCODEENDSENDBEGIN运行结果为:75源程序五:ORG2000H2000BE0010MOVSI,10002003BF0910MOVDI,100920068A14MOVDL,[SI]200880C200ADDDL,00200B7B0BJPO2018200D8615XCHGDL,[DI]200F8814MOV[SI],DL20114FDECDI201239FECMPSI,DI20147407JE201D2016EBF0JMP2008201846INCSI20198A14MOVDL,[SI]201BEBF5JMP2012201DF4HLT四、实验报告的要求1)列出源程序,说明程序的基本结构,包括程序中各部分的功能。2)说明程序中各部分所用的算法。3)说明主要符号和所用到寄存器的功能。4)总结为什么在设计分支程序时必须解决三个问题:判断、转向和定标号。5)说明标志位CF、SF和OF的意义。6)上机调试过程中遇到的问题是如何解决的。7)对调试源程序的结果进行分析。实验二循环与子程序程序设计一、实验目的1)加深对循环结构的理解。2)掌握循环程序的设计方法。3)学习子程序的定义和调用方法。4)掌握子程序、子程序的嵌套、递归子程序的结构。5)掌握子程序设计、编制及调试。6)熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。二、实验内容1)编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。2)将从3000H内存单元开始的100个字节存储单元全部清0。3)编制在屏幕上显示九九乘法表的程序。4)编制在屏幕上显示用*组成的三角形的程序。5)设有五个字数据存放在以BUF为首地址的内存单元中,要求采用调用多个字数据相加的子程序方法编程,和的低位字放在RESULT单元,和的高位字放在RESULT+2单元,并将结果显示在屏幕上。6)编写一个递归子程序,计算指数函数Xn的值,其中X,n从键盘输入。三、实验步骤1)按程序流程图编制实验程序。2)输入源程序。3)汇编、连接程序,执行程序,检查结果。4)对内存单元3000H开始的100个存储单元用E命令输入任意数。5)程序的执行可用DEBUG的G命令,也可用T命令单步跟踪执行。6)用D命令检查执行结果。源程序一:DATASEGMENTBUFDB’S=1+2×3+3×4+4×5+…+N(N+1)+…=‘,’$’RESDW4DUP(0),’$’DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSETBUFMOVAH,09HINT21HMOVDX,1MOVBL,2NEXT:MOVAL,BLINCBLMULBLADDDX,AXCMPAX,200JNANEXTMOVCX,0004HMOVDI,OFFSETRESADDDI,03HNEXT1:MOVAX,DXANDAX,000FHCMPAL,0AHJBNEXT2ADDAL,07NEXT2:ADDAL,30HMOV[DI],ALDECDIPUSHCXMOVCL,04SHRDX,CLPOPCXLOOPNEXT1MOVDX,OFFSETRESMOVAH,09HINT21HMOVAH,4CHINT21HCODEENDSENDSTART运行结果为:S=1+2×3+3×4+4×5+…+N(N+1)+…=045F源程序二:ORG2000H2000BF0030MOVDI,30002003B164MOVCL,642005C60500MOVBYTEPTR[DI],0200847INCDI2009FEC9DECCL200B75F8JNZ2005200DF4HLT源程序三:STACKSEGMENTSTACKDB1024DUP(0)STACKENDSDATASEGMENTBUFDW0F101H,110DH,52H,100H,456HCOUNT=($-BUF)/2RESULTDW4DUP(?),’$’DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKWDADDPROCPUSHDIMOVAX,0MOVDX,0MOVDI,OFFSETBUFNEXT2:ADDAX,[DI]JNCNEXT1INCDXNEXT1:ADDDI,2LOOPNEXT2POPDIRETWDADDENDPSHOWPROCPUSHCXPUSHDIMOVCX,04HMOVDI,OFFSETRESULTMOVBX,AXADDDI,07HBBB:MOVAX,BXANDAX,000FHCMPAL,0AHJBQQQADDAL,07HQQQ:ADDAL,30HMOV[DI],ALDECDIPUSHCXMOVCL,04SHRBX,CLPOPCXLOOPBBBMOVCX,0004HCCC:MOVAX,DXANDAX,000FHCMPAL,0AHJBDDDADDAL,07HDDD:ADDAL,30HMOV[DI],ALDECDIPUSHCXMOVCL,04HSHRDX,CLPOPCXLOOPCCCPOPDIPOPCXRETSHOWENDPBEGIN:MOVAX,DATAMOVDS,AXMOVCX,COUNTCALLWDADDCALLSHOWMOVDX,OFFSETRESULTMOVAH,09HINT21HMOVAH,4CHINT21HCODEENDSENDBEGIN四、实验报告的要求1)列出源程序。2)对程序中用到的寄存器说明其功能。3)总结计数控制循环程序的设计方法。4)说明怎样使用DEBUG进行程序调试的。调试过程中所遇到的问题是如何解决的。
本文标题:汇编作业
链接地址:https://www.777doc.com/doc-5275809 .html