80X86汇编语言程序设计实验指导书中南民族大学计算机科学学院2006年9月1目录实验一实验的基本要求与方法........................................................1实验二顺序程序设计......................................................................13实验三分支程序设计......................................................................18实验四循环程序设计......................................................................24实验五子程序设计..........................................................................31实验六串操作指令的使用..............................................................36实验七位运算指令的使用..............................................................41实验八宏汇编技术..........................................................................45附录AMASM6.X...........................................................................53附录BWindbg的使用....................................................................54附录CI/O宏说明............................................................................57附录D汇编指令总汇......................................................................73附录E流程图规范..........................................................................901实验一实验的基本要求与方法1.1实验目的与要求1.1.1实验目的实验是掌握汇编语言程序设计的步骤,学习使80X86汇编语言程序设计的基本方法和技能,熟练掌握用汇编语言设计、编码、调试和运行程序的方法,养成良好的程序设计习惯,为后续课程和将来相关的项目开发打下坚实的基础。1.熟练操作宏汇编的开发环境,熟悉汇编语言的编译工具(MASM6.11)及调试器(Windbg)的使用。2.掌握汇编语言的寻址方式和常用指令。3.掌握汇编语言基本的程序设计方法和调试手段。4.掌握子程序和宏指令的设计和调试手段。1.1.2实验要求1.上机前应做好充分的准备。对选定的实验题要先进行设计包括程序框图、数据结构以及算法;上机之前先编好程序代码,并进行认真地静态检查,减少错误的发生,同时还有预先估计程序运行的结果或结果范围,做到心中有数。2.上机时要遵守实验室的规章制度,爱护实验设备。要熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。在程序的调试过程中,有意识的学习及掌握Windbg程序的各种功能,以便掌握程序的调试方法和技巧。不互相抄袭,应自己动手按自己的算法编制程序,调试通过。3.下机后要对实验结果进行整理,分析程序调试过程中所出现的各种情况,对未通过的程序更好认真分析原因,总结经验教训。4.每个程序完成后应写出实验报告,实验报告的要求如下:(1)本次实验的目的及要求,实验内容。(2)设计说明:用来说明程序的功能和结构,它包括:程序名、功能、原理及算法说明、数据结构及主要符号名说明等。(3)程序框图:根据设计思想给出规范的程序流程图,流程图规范参看附录E。(4)调试说明:总结经验提高编程及调试能力。它包括:调试情况,如上机时遇到的问题及解决的办法,观察到的现象及其分析,对程序设计技巧的总结及分析等;程序的输出结果及对结果的分析;实验的心得体会等。(5)使用说明:程序提供给用户使用时必须作出的说明。如:程序的使方法,调用方式,操作步骤等;要求输入信息的类型及格式;出错信息的含义及程序的使用范围等。(6)程序清单。21.2实验方法例1.1求两数之和。试编写一程序,输出提示信息,从键盘输入两个数number1和number2,求它们的之和并显示结果。1.进入windows下的DOS命令行环境鼠标点击Windows系统的“开始”――“运行”,输入“cmd”回车后(如图1.1),进入windows下的DOS命令行环境(图1.2)。图1.1图1.2DOS命令行环境这里设定所需软件都安装在C盘的masm目录下。使用DOS的CD命令进入masm目录(图1.3)。输入:cdc:\masm(回车)3图1.3进入汇编程序目录2.调用文本编辑程序EDIT建立汇编源文件(后缀名为.asm)在当前目录,输入:editexample.asm后就可进入编辑环境(图1.4)。图1.4EDIT编辑环境也可以用其他编辑程序如记事本等来建立源程序(建议不要用officeword)。建议以example.asm为文件名的源文件如图1.5。;*********************************************************************;Exampleassemblylanguageprogram--addstwonumbers;Author:R.Detmer;Date:revised7/97;---------------------------------------------------------------------.386.MODELFLAT;---------------------------------------------------------------------ExitProcessPROTONEAR32stdcall,dwExitCode:DWORD;---------------------------------------------------------------------INCLUDEio.h;headerfileforinput/output;---------------------------------------------------------------------4crEQU0dh;carriagereturncharacterLfEQU0ah;linefeed;---------------------------------------------------------------------.STACK4096;reserve4096-bytestack;---------------------------------------------------------------------.DATA;reservestoragefordatanumber1DWORD?number2DWORD?prompt1BYTEEnterfirstnumber:,0prompt2BYTEEntersecondnumber:,0stringBYTE40DUP(?)label1BYTEcr,Lf,ThesumissumBYTE11DUP(?)BYTEcr,Lf,0;---------------------------------------------------------------------.CODE;startofmainprogramcode_start:outputprompt1;promptforfirstnumberinputstring,40;readASCIIcharactersatodstring;converttointegermovnumber1,eax;storeinmemoryoutputprompt2;repeatforsecondnumberinputstring,40atodstringmovnumber2,eaxmoveax,number1;firstnumbertoEAXaddeax,number2;addsecondnumberdtoasum,eax;converttoASCIIcharactersoutputlabel1;outputlabelandsumINVOKEExitProcess,0;exitwithreturncode0PUBLIC_start;makeentrypointpublic;---------------------------------------------------------------------END;endofsourcecode;*********************************************************************图1.5例1.1的源文件example.asm53.用汇编程序ml对源文件汇编产生目标文件(后缀名为.obj)输入:ml/c/coff/Ziexample.asm显示如图1.6,则表示汇编成功,同时生成了目标文件(example.obj)。如果汇编指示出错则需重新调用编辑程序修改错误,直至汇编通过为止。图1.64.用连接程序link产生可执行文件(后缀名为.exe)输入:link/debug/subsystem:console/entry:start/out:example.exeexample.objio.objkernel32.lib显示如图1.7,则表示连接成功,同时生成了可执行文件(example.exe)图1.75.执行程序可直接在当前目录下执行如下:输入:example显示结果如图1.8。图1.8example.exe运行结果6.查看列表文件(后缀名为.lst)在进行汇编时候,如果在输入参数中加上“/Fl”,则可生成和列表文件(example.lst)。输入:ml/c/coff/Zi/Flexample.asm用编辑软件打开example.lst(图1.9)。Microsoft(R)MacroAssemblerVersion6.1108/03/0515:19:43example.asmPage1-1;Exampleassemblylanguageprogram--addstwonumbers;Author:R.Detmer;Date:revised7/976.386.MODELFLATExitProcessPROTONEAR32stdcall,dwExitCode:DWORDINCLUDEio.h;headerfileforinput/outputC;IO.H--headerfileforI/OmacrosC;32-bitversionforflatmemorymodelC;R.Detmerlastrevised8/2000C.NOLIST;turnofflistingC.LIST;beginlistingC=0000000DcrEQU0dh;carriagereturncharacter=0000000ALfEQU0ah;linefeed.STACK4096;reserve4096-bytestack00000000.DATA;reservestoragefordata0000000000000000number1DWORD?0