一、编辑源程序
汇编语言源程序:用汇编语句编写的解决应用问题的程序。
汇编程序:将汇编语言源程序翻译成机器语言程序的系统。
汇编:将汇编语言程序翻译成机器语言程序的过程。
在编辑汇编语言源程序时,对计算机硬件工作环境无特殊要求,对软件工作环境要求也很简单,只需用建立ASCII码文本文件的软件即可。
(1)编辑软件
行编辑软件:EDLIN.COM
全屏编辑软件:WPS、EDIT.COM、NE.COM、WORD、PE等。
当输入、建立和修改源程序时,可任选一种编辑软件,不要用格式控制符,要求编辑完成的文件扩展名一定是.ASM。
(2)汇编程序
有汇编ASM.EXE、宏汇编MASM.EXE及TASM等,一般使用宏汇编MASM.EXE,因它比ASM.EXE功能强。TASM适用于8086/8088~Pentium系列指令系统所编写的汇编语言程序,是比较先进的汇编工具。
(3)连接程序
用连接程序LINK.EXE或TLINK.EXE,将MASM.EXE产生的机器代码程序(.OBJ)文件连接成可执行程序.EXE,TLINK比LINK更先进。
(4)辅助工具程序(.EXE)
进行汇编语言程序调试和文件格式转换的程序有:
DEBUG.COM 动态调试程序
EXE2BIN.EXE 文件格式转换程序
CREF.EXE 交叉引用程序
编辑、汇编、连接、调试过程如图1.1所示。
TD(turbo Debugger简称)也是动态调试程序,可在DOS和Windows环境下运行,用户界面十分友好。
二、 汇编源程序
用编辑软件建立的源程序.ASM文件,必须经过汇编才能产生.OBJ文件。为此,需键入:
C:>MASM <源文件名>
或 C:>MASM
按前一种格式键入,屏幕上显示:
Microsoft(R) Macro assemble Version 5.00
Copyright(C) Microsoft Corp 1981-1985,1987 ALL rights reserved
OBJ filename[ Source listing[nul.lst]: Cross-reference[nul.crf]: 以上信息中方括中为该项提示的缺省回答值,冒号后面等待用户输入信息,若不改变缺省值则直接按回车键。 汇编后生成以下几个文件: (1).OBJ文件 .OBJ文件是必须生成的一个目标代码文件,当源程序中无语法错误时,则在当前工作盘上自动存入一个.OBJ文件,供下一步连接用。 若源程序有语法错误时,会出现错误信息提示: 源程序文件行 错误信息代码 错误说明信息 最后信息提示: ×× Warning errors (警告错误) ×× Severe errors (严重错误) 若严重错误总数不为0,则.OBJ文件没有生成,需回到编辑状态下修改源程序直到无错为止。 (2).LST文件(列表文件) .LST文件对调试程序有帮助,它是将源程序中各语句及其对应的目标代码和符号表以清单方式列出,如果需要,在屏幕显示的第二个提问的冒号后输入文件名即可,如果不需要,直接按回车键。 (3).CRF文件(交叉引用文件) 交叉引用.CRF文件给出了源程序中定义的符号引用情况,按字母顺序排列。.CRF文件不可显示,须用CREF.EXE系统程序将.CRF文件转换成为.REF文件后方可显示输出。 若按后一种格式输入,系统会依次出现四个提示信息,比第一种格式多了一项源程序文件名的输入。应答方式与第一种格式相同。 三、 连接目标程序 汇编后生成的.OBJ文件,其所有目标代码的地址都是浮动的偏移地址,机器不能直接运行。必须用连接程序(LINK.EXE)对其进行连接装配定位,产生.EXE可执行文件,方可运行。 在系统提示符下键入:LINK <源程序文件名> 或 LINK 屏幕上出现以下提示信息: Microsoft(R) Macro assemble Version 5.00 Copyright(C) Microsoft Corp 1981-1985,1987 ALL rights reserved Run file [ List File [nul.map]: Libraries [.lib]: 连接后,可生成两种文件:.EXE和.MAP (1).EXE文件(可执行文件) 若采用方括号中的默认值,直接按回车键,否则需重新输入一文件名。 若连接过程中无错误,则自动在当前工作盘生成.EXE文件。若有错误,则会给出错误信息提示,这时必须重新修改源程序,再汇编、连接。 (2).MAP(连接映像文件) (3).LIB库文件 连接程序询问是否使用某种库文件,不需使用库文件直接按回车键。 (4)若要连接多个模块目标程序,可用“+”把它们连接起来。 如:LINK files1+files2+files3 若直接键入:LINK会依次出现四个提示信息,应答方式应与LINK<源程序文件>相同,仅增加了一项输出,询问被连接的目标文件名字:Object Modeules[.OBJ]: 格式:LINK 四、 运行程序 经过汇编、连接后生成的.EXE文件,可在DOS系统直接运行,只要键入相应的文件名即可。 如:C:\\MASM><文件名> DOS的COMMAND.COM模块将该程序装配到内存,并设置和分配启动地址。也可在DEBUG调试程序下运行。如何用DEBUG程序来运行和调试程序将在DEBUG调试程序中详细讨论。 五、 DEBUG调试程序 DEBUG.EXE程序是专门为分析、研制和开发汇编语言程序而设计的一种调试工具,具有跟踪程序执行、观察中间运行结果、显示和修改寄存器或存储单元内容等多种功能。它能使程序设计人员或用户触及到机器内部,因此可以说它是80X86CPU的心灵窗口,也是我们学习汇编语言必须掌握的调试工具。 1)DEBUG程序使用 在DOS提示符下键入命令: C>DEBUG [盘符:][路径][文件名.EXE][参数1][参数2] 这时屏幕上出现DEBUG的提示符“-”,表示系统在DEBUG管理之下,此时可以用DEBUG进行程序调试。若所有选项省略,仅把DEBUG装入内存,可对当前内存中的内容进行调试,或者再用N和L命令,从指定盘上装入要调试的程序;若命令行中有文件名,则DOS把DEBUG程序调入内存后,再由DEBUG将指定的文件名装入内存。 2)DEBUG的常用命令 (1)汇编命令 A 格式:A[起始地址] 功能:将输入源程序的指令汇编成目标代码并从指定地址单元开始存放。若缺省起始地址,则从当前CS:100地址开始存放。A命令按行汇编,主要是用于小段程序的汇编或对目标程序的修改。 (2)反汇编命令 U 格式1:U[起始地址] 格式2:U[起始地址][结束地址|字节数] 功能:格式1从指定起始地址处开始将32个字节的目标代码转换成汇编指令形式,缺省起始地址,则从当前地址CS:IP开始。 格式2将指定范围的内存单元中的目标代码转换成汇编指令。 (3)显示、修改寄存器命令 R 格式:R[寄存器名] 功能:若给出寄存器名,则显示该寄存器的内容并可进行修改。缺省寄存器名,则按以下格式显示所有寄存器的内容及当前值(不能修改)。 AX=0000 BX=0004 CX=0020 DX=0000 SP=0080 BP=0000 SI=0000 DI=0000 DS=3000 ES=23A0 CS=138E IP=0000 NV UP DI PL NZ NA PO NC 138E:0000 MOV AX,1234 -R AX ;输入命令 AX 0014 ;显示AX的内容 : ;供修改,不修改按回车。 若对标志寄存器进行修改,输入:-RF 屏幕显示如下信息,分别表示OF、DF、IF、SF、ZF、AF、PF、CF的状态。 NV UP DI PL NZ NA PO NC 不修改按回车键。要修改需个别输入一个或多个此标志的相反值,再按回车键。R命令只能显示、修改16位寄存器。 (4)显示存储单元命令 D 格式1:D[起始地址] 格式2:D[起始地址][结束地址|字节数] 功能:格式1从起始地址开始按十六进制显示80H个单元的内容,每行16个单元,共8行,每行右边显示16个单元的ASCII码,不可显示的ASCII码则显示“·”。格式2显示指定范围内存储单元的内容,其他显示方式与格式1一样。如果缺省起始地址或地址范围,则从当前的地址开始按格式1显示。 例如: -D 200 ;表示从DS:0200H开始显示128个单元内容 -D 100 120 ;表示显示DS:0100-DS:0120单元的内容 说明:在DEBUG中,地址表示方式有如下形式: 段寄存器名:相对地址,如:DS:100 段基值:偏移地址(相对地址),如:23A0:1500 (5)修改存储单元命令 E 格式1:E[起始地址] [内容表] 格式2:E[地址] 功能:格式1按内容表的内容修改从起始地址开始的多个存储单元内容,即用内容表指定的内容来代替存储单元当前内容。 例如:—E DS:0100 'VAR' 12 34 表示从DS:0100 为起始单元的连续五个字节单元内容依次被修改为 'V'、'A'、'R'、12H、34H。 格式2是逐个修改指定地址单元的当前内容。 如:—E DS:0010 156F:0010 41.5F 其中156F:0010单元原来的值是41H,5FH为输入的修改值。若只修改一个单元的内容,这时按回车键即可;若还想继续修改下一个单元内容,此时应按空格键,就显示下一个单元的内容,需修改就键入新的内容,不修改再按空格跳过,如此重复直到修改完毕,按回车键返回DEBUG“-”提示符。如果在修改过程中,将空格键换成按“-”键,则表示可以修改前一个单元的内容。 (6)运行命令 G 格式:G[=起始地址][第一断点地址[第二断点地址……]] 功能:CPU从指定起始地址开始执行,依次在第一、第二等断点处中断。若缺省起始地址,则从当前CS:IP指示地址开始执行一条指令。最多可设置10个断点。 (7)跟踪命令 T 格式:T[起始地址][正整数] 功能:从指定地址开始执行‘正整数’条指令,若缺省‘正整数’,表示执行一条指令,若两项都缺省,表示从当前CS:IP指示地址开始执行一条指令。 (8)指定文件命令 N 格式:N<文件名或扩展名> 功能:指定即将调入内存或从内存写入磁盘的文件名。该命令应该用在L命令和W命令之前。 (9)装入命令 L 格式1:L[起始地址][盘符号][扇区号][扇区数] 格式2:L[起始地址] 功能:格式1根据盘符号,将指定扇区的内容装入到指定起始地址的存储区中。 格式2将N命令指出的文件装入到指定起始地址的存储区中,若省略起始地址,则装入到CS:100处或按原来文件定位约定装入到相应位置。 (10)写磁盘命令 W 格式1:W<起始地址>[驱动器号]<起始扇区><扇区数> 格式2:W[起始地址] 功能:格式1把指定地址开始的内容数据写到磁盘上指定的扇区中。 格式2将起始地址的BX×10000H+CX个字节内容存放到由N命令指定的文件中。在格式2的W命令之前,除用N命令指定存盘的文件名外,还必须将要写的字节数用R命令送入BX和CX中。 (11)退出命令 Q 格式:Q 功能:退出DEBUG,返回到操作系统。 以上介绍的是DEBUG常用命令,其他命令请参考有关书籍。下载本文