80X86汇编语言设计第一次上机实验报告时间:2008-6-7,18:50-21:30地点:南一楼804室52号实验台实验人员:刘明哲班级:计二0606班(华中科技大学控制科学与工程系物流0603班)学号:012006011610一、目的(1)学会汇编源程序的编辑、汇编、连接;(2)学会使用程序调试工具TD.EXE;(3)已学习过的汇编语言程序设计知识的实践,加深对这些知识的理解和印象。二、题目1、《80X86汇编语言程序设计》教材中P45的2.3题。(1)分别记录执行到“MOVCX,10”和“INT21H”之前的(BX),(BP),(SI),(DI)各是多少。(2)记录程序执行到退出之前数据段开始40个字节的内容,指出程序运行结果是否与设想的一致。.386STACKSEGMENTUSE16STACKDB200DUP(0)STACKENDSDATASEGMENTUSE16BUF1DB0,1,2,3,4,5,6,7,8,9BUF2DB10DUP(0)BUF3DB10DUP(0)BUF4DB10DUP(0)DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATA;SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUF1MOVDI,OFFSETBUF2MOVBX,OFFSETBUF3MOVBP,OFFSETBUF4MOVCX,10LOPA:MOVAL,[SI]MOV[DI],ALINCALMOV[BX],ALADDAL,3MOVDS:[BP],ALINCSIINCDIINCBPINCBXDECCXJNZLOPAMOVAH,4CHINT21HCODEENDSENDSTART实验步骤:1.使用文本文档录入源程序,存盘文件名为TEST1.ASM。2.使用TASM汇编源文件。即TASM/ZiTEST1;3.观察提示信息,若出错,则用编辑程序修改错误,存盘后重新汇编,直至不再报错为止。4.使用连接程序TLINK.EXE将汇编生成的TEST1.OBJ文件连接成执行文件。即TLINK/v/3TEST1;5.若连接时报错,则依照错误信息修改源程序。之后重新汇编和连接,直至不再报错并生成TEST1.EXE文件。6.执行该程序。即在命令行提示符后输入TEST1后回车,观察执行现象。7.使用TD.EXE观察TEST1的执行情况。即TDTEST1.EXE回车(1)开始时观察数据段开始的前40字节的内容。(2)执行至“MOVCX,10”,观察寄存器BX、BP、SI、DI中的内容。(3)执行至“INT21H”,观察寄存器BX、BP、SI、DI中的内容,并观察数据段开始的前40字节的内容。实验记录:1、实验环境条件:AMD2.00GHZ*2,1G内存;WINDOWSXP命令行窗口;EDIT.EXE2.0;TASM.EXE4.1;TLINK.EXE7.1;TD.EXE5.0。2、汇编源程序时,汇编程序无任何程序错误。3、使用TD.EXE执行实验步骤中的第6、7两步后的结果是:(1)执行到MOVCX10时:(BX)=0014H(BP)=001EH(SI)=0000H(DI)=000AH执行到INT21H时:(BX)=001EH(BP)=0028H(SI)=000AH(DI)=0014H(2)退出之前数据段开始40个字节的内容:00010203040506070809000102030405060708090102030405060708090A0405060708090A0B0C0D与预期的一样2、《80X86汇编语言程序设计》教材中P46的2.4题的改写。(1)实现的功能不变。(2)内存单元中数据的访问采用变址寻址方式。(3)记录程序执行到退出之前数据段开始40个字节的内容,检查程序运行结果是否与设想的一致。程序改编如下:.386STACKSEGMENTUSE16STACKDB200DUP(0)STACKENDSDATASEGMENTUSE16BUF1DB0,1,2,3,4,5,6,7,8,9BUF2DB10DUP(0)BUF3DB10DUP(0)BUF4DB10DUP(0)DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVSI,0MOVDI,0MOVBX,0MOVBP,0MOVCX,10LOPA:MOVAL,BUF1[SI]MOVBUF2[DI],ALINCALMOVBUF3[BX],ALADDAL,3MOVDS:BUF4[BP],ALINCSIINCDIINCBPINCBXDECCXJNZLOPAMOVAH,4CHINT21HCODEENDSENDSTART实验步骤:1.使用文本文档录入源程序,存盘文件名为TEST2.ASM。2.使用TASM汇编源文件。即TASM/ZiTEST2;3.观察提示信息,若出错,则用编辑程序修改错误,存盘后重新汇编,直至不再报错为止。4.使用连接程序TLINK.EXE将汇编生成的TEST2.OBJ文件连接成执行文件。即TLINK/v/3TEST2;5.若连接时报错,则依照错误信息修改源程序。之后重新汇编和连接,直至不再报错并生成TEST2.EXE文件。6.执行该程序。即在命令行提示符后输入TEST2后回车,观察执行现象。7.使用TD.EXE观察TEST2的执行情况。即TDTEST2.EXE回车。实验记录:1、实验环境条件:AMD2.00GHZ*2,1G内存;WINDOWSXP命令行窗口;EDIT.EXE2.0;TASM.EXE4.1;TLINK.EXE7.1;TD.EXE5.0。2、汇编源程序时,汇编程序无任何程序错误。3、连接过程无任何异常。4、使用TD.EXE执行实验步骤中的第6、7两步后的结果是:00010203040506070809000102030405060708090102030405060708090A0405060708090A0B0C0D与预期的一样3、《80X86汇编语言程序设计》教材中P31的1.14题。要求:(1)直接在TD中输入指令,完成两个数的求和功能(可以省略实验报告中的程序框图)。求和后的结果放在(AH)中(2)请事先指出执行加法指令后(AH)、标志位SF、OF、CF、ZF的内容。(3)记录上机执行后与(2)中对应的内容。:实验步骤:1.直接在命令行中键入TD回车(1)直接在TD中的代码显示区置的任意位置键入:MOVAH,+0110011BADDAH,+1011010B然后执行这两条程序指令,观察执行后的SF、OF、CF、ZF的值。(2)直接在TD中的代码显示区置的任意位置键入:MOVAH,-0101001BADDAH,-1011101B然后执行这两条程序指令,观察执行后的SF、OF、CF、ZF的值。(3)直接在TD中的代码显示区置的任意位置键入:MOVAH,+1100101BADDAH,-1011101B然后执行这两条程序指令,观察执行后的SF、OF、CF、ZF的值。实验记录:1、实验环境条件:AMD2.00GHZ*2,1G内存;WINDOWSXP命令行窗口;EDIT.EXE2.0;TASM.EXE4.1;TLINK.EXE7.1;TD.EXE5.0。2、使用TD.EXE分别执行实验步骤中的结果是:(1)SF=1,OF=1,CF=0,ZF=0(2)SF=0,OF=1,CF=1,ZF=0(3)SF=0,OF=0,CF=1,ZF=0与结果预期相同,本实验内容结束。4、《80X86汇编语言程序设计》教案中P18寄存器间接寻址举例的实验源程序如下:.386DATASEGMENTUSE16ADW100H,300H,500H,700HBDW?DATAENDSSTACKSEGMENTUSE16STACKDB200DUP(0)STACKENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATA,SS:STACKBEGIN:MOVAX,DATAMOVDS,AXMOVECX,OFFSETAMOVAX,0ADDAX,[ECX]ADDECX,2ADDAX,[ECX]ADDECX,2ADDAX,[ECX]ADDECX,2ADDAX,[ECX]MOVB,AXMOVAX,4C00HINT21HCODEENDSENDBEGIN问题:上述程序中,若将ECX改为CX是否可以?若改为BP或者EBP呢?改为EDX或者DX呢?改为BX呢?要求:(1)完成汇编源程序的编辑、汇编、连接;(2)记录执行指令前后,ECX,AX的值,并分析记录。(4)在数据区观察执行指令前的相应内存单元的值。(5)将ECX依次改为CX,BP,EBP,EDX,DX和BX。验证哪些替换是成功的,哪些不允许。分析原因。实验步骤:1.使用文本文档录入源程序,存盘文件名为TEST4.ASM。2.使用TASM汇编源文件。即TASM/ZiTEST4;3.观察提示信息,若出错,则用编辑程序修改错误,存盘后重新汇编,直至不再报错为止。4.使用连接程序TLINK.EXE将汇编生成的TEST4.OBJ文件连接成执行文件。即TLINK/v/3TEST4;5.若连接时报错,则依照错误信息修改源程序。之后重新汇编和连接,直至不再报错并生成TEST4.EXE文件。6.执行该程序。即在命令行提示符后输入TEST4后回车,观察执行现象。7.使用TD.EXE观察TEST4的执行情况。即TDTEST4.EXE回车(1)执行程序前后,观察ECX,AX的值,并观察记录。(2)将原程序中的ECX依次替换成CX,BP,EBP,DX和BX,使用实验步骤1-6重新汇编、连接和显示,观察结果。实验记录:1、实验环境条件:AMD2.00GHZ*2,1G内存;WINDOWSXP命令行窗口;EDIT.EXE2.0;TASM.EXE4.1;TLINK.EXE7.1;TD.EXE5.0。2、汇编源程序时,汇编程序无任何程序错误。3、连接过程无任何异常。4、使用TD.EXE执行实验步骤中的第6步后的结果是:(ECX)=0006H(AX)=4C00H执行前(ECX)=0000H(AX)=0000H5、使用TD.EXE执行实验步骤中的第7步后的结果是:ECX替换成CX、DX和BX出错,而ECX可以替换成BP、EBP。这是因为ECX与BP以及EBP的存储方式相同,而ECX存储到CX、DX、BX中会产生溢出。与结果预期相同5、《80X86汇编语言程序设计》教材中P94,3.1的实验要求:(1)将数据段写在一个完整的程序中。(2)记录数据段中的数据存储结果。源程序设计:.386STACKSEGMENTUSE16STACKDB200DUP(0)STACKENDSDATASEGMENTUSE16STR1DB0,1,2,3,4,5STR2DB'012345'COUNTEQU30NUMBDB3DUP(2)NUMWDW10H,-60HPOINDW0DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATA;SS:STACKSTART:INT21HCODEENDSENDSTART实验步骤:1.使用文本文档录入源程序,存盘文件名为TEST5.ASM。2.使用TASM汇编源文件。即TASM/ZiTEST5;3.观察提示信息,若出错,则用编辑程序修改错误,存盘后重新汇编,直至不再报错为止。4.使用连接程序TLINK.EXE将汇编生成的TEST5.OBJ文件连接成执行文件。即TLINK/v/3TEST5;5.若连接时报错,则依照错误信息修改源程序。之后重新汇编和连接,直至不再报错并生成TEST5.EXE文件。6.执行该程序。即在命令行提示符后输入TEST5后回车,观察执行现象。7.使用TD.EXE观察TEST5的执行情况。即TDTEST5.EXE回车;执行后观察数据段中相应存储的内容。实验记录:1、实验环境条件:AMD2.00GHZ*2,1G内存;WINDOWSXP命令行窗口;EDIT.EXE2.0