《如何编写和汇编语言程序精讲.doc》由会员分享,可在线阅读,更多相关《如何编写和汇编语言程序精讲.doc(8页珍藏版)》请在金锄头文库上搜索。
1、如何编写和汇编语言程序精讲如何编写和汇编语言程序可以用一般文本编写器编写汇编语言源程序。常用的有MS-DOS下的EDIT文本编写程序,Windows下的写字板(WORDPAD.EXE)等。用户经过屏幕编写程序键入源程序,检查无误,可将源程序存到汇编系统盘上,该程序的扩展名为ASM。软件运转基本环境运转汇编程序必备的软件环境:DOS操作系统;汇编系统。汇编系统盘应包含以下文件:MASM宏汇编程前言件LISK连接程前言件CRFF索引程前言件(也可不用)汇编源程序编写1)源程序的书写格式当CPU接见内存时,是把储存器分成若干个段,经过时一定按段的结构来编制程序。因为每个段的物理空间为的书写一般有以下
2、形式:逻辑货仓段货仓段名SEGMENTSTACK用变量定义预置的货仓空间货仓段名ENDS逻辑数据段数据段名SEGMENT用变量定义预置的数据空间数据段名ENDS逻辑代码段代码段名SEGMENTASSUME定义各段寻址关系过程名PROC4个段存放器中存放的地址对内储存器接见,所以在编源程序64KB,所以程序中各段可以分别为一个或几个。源程序程序过程名ENDP代码段名ENDSEND过程名或初步标号在源程序中最少要有一个代码段,数据段依据需要没关紧急,也可以增设附带段。对于货仓段也可以依据需要没关紧急,但在连接(LINK)时计算机将显示警告性的错误:Warning:NSTACKsegmentTher
3、ewas1errordetected.在程序中假如没实用到货仓时,该错误提示不影响程序的运转,假如程序顶用到货仓时一定设置货仓段。此中:SEGMENT、ASSUME、PROCENDP为伪指令,伪指令是发给汇编程序ASM的,而不睦微办理器打交道,在汇编时不产生目标代码,不过把源程序中各段的设置状况告诉汇编程序。2 )段存放器的段地址的装入Assume伪指令语句不过建立了当前段与段存放器的联系,但不可以把各段的段地址装入相应的段存放器中,段存放器的段地址的装入是在程序中达成的。( 1)DS、ES、SS的装入因为段存放器不可以用马上数寻址方式直接传递,所以段地址装入可经过通用存放器传递给段存放器。M
4、OVAX,逻辑段名MOV段存放器,AX此中逻辑段名为程序中定义各逻辑段的名字,(不包含代码段),段存放器是指与各逻辑段相对应的各段存放器(DS、ES、SS)。(2)CS的装入代码段存放器是装当前执行目标代码的段地址,执行,CS和IP装入新值时是一起达成的。IP是供给下一条要执行的目标代码的偏移量,为了保证程序的正确对CS和IP的装入有以下几种状况:依据用户程序中的伪指令END后的标号为在程序运转过程中,当执行某些指令和操作时,CS和IPCPU供给代码段的段地址和目标代码的偏移地址。自动更正CS和IP的值,使它们指向新的代码段。3 )程序中的数据与变量在汇编源程序中的数据除了马上数,由指令产生的
5、数和经过键盘输入的数之外,还胡大批的数据是经过伪指令语句进行预置和分配的,也就是在某逻辑段中(除代码段),将所需的数据以某种形式存放起来,在程序中可任意调用。在数据定义的同时还可以定义变量,将变量与数据结合在一起。可以为某个变量分配储存空间以便在程序执行过程中存放中间结果和最后结果,使用起来极为方便。()变量与数据的定义变量与数据的定义可以经过符号定义伪指令EQU、和数据定义伪指令DB或DW或DD来实现。EQU和可以出此刻程序的逻辑段内也可出此刻逻辑段外。()汇编程序中数据的供给方法用数据定义伪指令供给数据假如程序要求原始数据为一批数据时,用数据定义伪指令DB、DW和DD来供给较为方便。用马上
6、数的形式供给数据当原始数据只有几个时,一般用马上数的方法来供给。自然,用马上数的方法不过将一个数据传递到通用存放器中,它不过经过通用存放器传递数据。用编程的方法供给数据假如原始数据是一组有规律的数据项,则用编程序的方法形成这一组数据,不用特地为这组数据分配储存单元,节约了储存空间。用键盘供给数据当原始数据为任意数据时,一般用键盘输入方法,调用DOS21H中断。()数据的输出方式在显示器上显示一个字符调用02H号功能调用号,发21H号中断,将要显示的字符的ASCII码送入DL,即可在显示器上显示该字符。在打印机上输出一个字符调用05H号功能调用号,发21H号中断,将要打印字符的ASCII码送入D
7、L,即可在打印机上打印出DL中的字符。)返回DOS状态的方法当执行.EXE文件时,是在DOS状态下进行的,假如希望在执行完.EXE文件后正常返回DOS状态,一般用以下两种方法:采纳DOS4CH功能调用和采纳返回(RET)断点的方法。汇编办理执行宏汇编程序MASM.EXE用汇编语言编写的源程序一定是一个完好的源程序。宏汇编程序对汇编语言源程序的汇编过程包含语法检查和数据代码汇编两部分,生成目标程序和辅助信息文件。为了达成汇编任务,汇编程序一般采纳两遍扫描的方法,第一遍扫描源程序产生符号表、办理伪指令等,第二遍扫描产活力器指令代码、确立数据等。源程序用宏汇编程序翻译(汇编)后,可以获取三个文件:一
8、个是扩展名为.OBJ的目标文件,在该文件中,将源程序的操作码部分变为机器码,但地址操作数是可浮动的相对地址,而不是实质地址,所以需经LINK连接文件进行连接才能形成可执行文件。第二个文件是列表文件,扩展名为.LST,它把源程序和目标程序列表,以供检查程序用。第三个文件是交织索引文件,扩展名为.CRF,它是一个对源程序所用的各种符号进行前后比较的文件。此中目标文件是一定产生的,而其余两个文件在需要时恩赐命令即可产生,对连接和执行汇编程序无直接的关系。1 )汇编操作过程在DOS状态下,键入MASM则调入宏汇编程序,屏幕显示与操作以下:masmMicrosoft(R)MacroAssembleVer
9、sion5.00Copyright(C)MicrosoftCorp1981-1985,1987,Allrightreserved.Sourcefilename.ASM:MYFILEObjectfilenameMYFILE.OBJ:MYFILESourcelistingNUL.LST:MYFILECross-referenceNUL.CRF:MYFILE50678410090Bytessymbolspacefree0WarningErrors0SevereErrors此中划线部分为用户键入部分,MYFILE为源程序名(MYFILE.ASM),方括号中是机器规定的默认文件名,假如用户以为方括号内的
10、文件名就是要键入的文件名,则可只在划线部分键入回车符。则可在NUL.LST和NUL.CRF后不键入文件名只键入回车符。假如不想要列表文件和交织索引文件,当回答完上述四个咨询后,汇编程序就对源程序进行汇编。在汇编过程中,假如发现源程序中有语法错误,则提示出错信息,指出是什么性质的错误,错误种类,最后列出错误的总数。以后可重新进入屏幕编写状态,调入源程序(MYFILE.ASM)进行更正,更正达成,再进行汇编,直到汇编经过为止。假如在汇编时不需要产生列表文件(.LST)和交织索引文件(.CRF),调用汇编程序时可用分号结束。假如需要产生.OBJ和.LST文件,不需要.CRF文件,则在分号前面加两个逗
11、号即可。假如4个文件都需要,用简略的操作方法是在分号前用了3个逗号。2)列表文件(.LST)列表文件(.LST)是经过汇编程序(MASM)产生的,可以在DOS状态下用TYPE命令显示或打印该文件,以便分析调试源程序。如显示D盘上已存在的列表文件MYFILE.LST操作方法以下:DTYPEMYFILE.LST;列表程序由三部分构成:( 1)源程序和目标程序清单列表程序同时列出源程序和对应的机器语言清单。列表程序的第一列给出每条指令所内行号;第二列给出从段的首地址开始的每条指令存放的偏移地址;接着是数字列,给出对应每条语句的机器码和对应于存放在栈段和数据段的值,在机器码加上“R”的指令表示:这条指
12、令在连接时可能产生与列出来的偏移地址不一样的地址,因为这些偏移地址可能与其余模块有关;最右侧就是用汇编语言编写的源程序。(2)段信息汇总表在段信息汇总表中列出该程序用了哪几个段,如:代码段CODE、数据段DATA和货仓段STACK;每个段所占储存空间的长度(字节数);每个段的定位种类,包含PAGE(页)、PARA(节)、WORD(字)和BYTE(字节),它们表示此段的初步界限要求,即初步界限地址应分别可以被256、16、2和1除尽。该列表清单中是以PARA为CODE段、DATA段和STACK段的初步界限地址。最后一列为段的组合种类;段的组合种类是告诉连接程序,本段与其余段的关系,组合种类有NO
13、NE、PUBLIC、COMMOM、AT表达式、STACK和MEMORY。NONE:表示本段与其余段不发生逻辑关系,即每段都有自己的基当地址。是隐含组合种类。STACK:表示连接程序第一要把本段与同名同类其余其余段相邻地连接在一起,而后为所有定义为栈段的连接在一起的段,定义一个共同的段基地址,即连接成一个物理段。在列表程序的源程序中只有一个栈段,在栈段定义中给出了组合种类为STACK,所以在段信息汇总表中列出了该项,在本程序中它没有任何意义,因为没有其余栈段与它连接,不过为了说明这个问题而设置的。(3)符号汇总表在列表程序中最后部摆列出了符号汇总,是指在源程序顶用户定义的符号名、种类、值和所在段。假如在源程序中存在某些语法错误时,列表文件可提示某条语句有哪些错误,出错提示显示在出错指令行的下边,因此用户可借助列表文件很快地找到错误行,以便调试。别的因为列表文件给出了各条指令的偏移地址,对和程序时设置断点很方便。3)交织索引文件(.CRF)汇编后产生的交织索引文件,扩展名为.CRF,它列出