Presentation is loading. Please wait.

Presentation is loading. Please wait.

汇编语言程序设计 吴 向 军 中山大学计算机科学系 2003.03.20.

Similar presentations


Presentation on theme: "汇编语言程序设计 吴 向 军 中山大学计算机科学系 2003.03.20."— Presentation transcript:

1 汇编语言程序设计 吴 向 军 中山大学计算机科学系

2 附录1 汇编语言编程和调试工具 1.1、汇编语言编程工具 1.1.1、宏汇编MASM系统
附录1 汇编语言编程和调试工具 1.1、汇编语言编程工具  学习汇编语言的目的就是要用汇编语言编程来解决实际问题,下面介绍二种常用的汇编语言编程环境:宏汇编MASM 6.11和Turbo Assember 5.0。 1.1.1、宏汇编MASM系统  在宏汇编MASM系统中,可用二种方法来处理源程序:命令行和集成环境。 一、命令行命令 1、编写源程序  可用计算机系统中各种能编辑文本文件的编辑器来编辑汇编源程序。常用的编辑器有:EDIT、Word、记事本、写字板、WPS等。源文件的后缀为:.ASM。 2、汇编程序  当源程序编写好后,可用MASM命令来汇编该源程序。如果源程序没有语法错误,那么,将生成目标文件(.OBJ文件),为最终生成可执行文件作准备,但如果源程序有错误,汇编程序将显示出错误位置和原因,也可用列表文件(.LST文件)来查看出错位置和原因。  下面给出一些使用该命令的实例情况。

3 附录1 汇编语言编程和调试工具 例1.1:查看MASM命令的功能 …>masm /?(*) ……
附录1 汇编语言编程和调试工具 例1.1:查看MASM命令的功能 …>masm /?(*)  ……  /Zi Generate symbolic information for CodeView  /Zd Generate line-number information  其中:选项/Zi和/Zd是经常被引用的二个选项,因为它们与符号跟踪有关。 例1.2:用MASM命令汇编源程序 …>masm test  Invoking: ML.EXE /I. /Zm /c test.asm  Assembling: test.asm  如果MASM命令显示了类似如上的处理结果,那么,表示源文件TEST.ASM已成功汇编,并已生成了其目标文件TEST.OBJ。 (*) 用户输入的命令用“下划线”来表示,系统显示的内容没有“下划线”。

4 附录1 汇编语言编程和调试工具 例1.3:用MASM命令汇编源程序 …>masm test ……
附录1 汇编语言编程和调试工具 例1.3:用MASM命令汇编源程序 …>masm test  ……  Invoking: ML.EXE /I. /Zm /c test.asm  Assembling: test.asm  test.asm(10): error A2070: invalid instruction operands  如果MASM命令显示了类似如上的处理结果,那么,表示源文件有错,没有生成其目标文件。在本例中,显示第10行有语法错:非法的指令操作数。这时,要用编辑器阅读源程序的第10行,看看输入指令时是否有误。  假如源程序有许多错误,很难记住全部出错位置,那么,可用列表文件来辅助查错。

5 附录1 汇编语言编程和调试工具 例1.4:在汇编源程序的同时,生成其列表文件。 …>masm test, ,test ……
附录1 汇编语言编程和调试工具 例1.4:在汇编源程序的同时,生成其列表文件。 …>masm test, ,test  ……  Assembling: test.asm  test.asm(10): error A2070: invalid instruction operands  列表文件TEST.LST是一个文本文件,可用编辑器直接阅读,并可看出其错误的位置和原因。下面是一个列表文件的实例。

6 附录1 汇编语言编程和调试工具 …>edit test.lst
附录1 汇编语言编程和调试工具 …>edit test.lst Microsoft (R) Macro Assembler Version /26/00 18:42:57 test.asm Page 1 - 1 .model small .486 data  .radix 7 0000 2A 08 0F  w2 db 60,11,18 A  w1 dw 10T, 1001B code  .startup  mov dl, 7777h test.asm(10): error A2070: invalid instruction operands B C2  mov ax, dx F A4 C2 01  shld dx, ax, 1 0016 D1 D0  rcl ax, 1  .exit 0  end 在此后面还有其它内容,但它们对查错没有帮助,所以,在此省略。

7 附录1 汇编语言编程和调试工具 3、连接程序 当由源文件汇编成功后,即可用连接程序(LINK.EXE)生成其可执行文件。
附录1 汇编语言编程和调试工具 3、连接程序  当由源文件汇编成功后,即可用连接程序(LINK.EXE)生成其可执行文件。 例1.5:查看连接程序(LINK.EXE)的具体选项。 …>link /? LINK <objs>,<exefile>,<mapfile>,<libs>,<deffile> Valid options are: /? /ALIGNMENT /BATCH /CODEVIEW …… /STACK /TINY /WARNFIXUP

8 附录1 汇编语言编程和调试工具 例1.6:用连接程序生成执行文件。 方法1: …>link test ……
附录1 汇编语言编程和调试工具 例1.6:用连接程序生成执行文件。 方法1: …>link test …… Run File [test.exe]: List File [nul.map]: Libraries [.lib]: Definitions File [nul.def]: LINK : warning L4021: no stack segment  这种方法需要确认连接过程中的各种文件名,如果使用文件名的默认值,那么直接按“回车”键即可。在上面四个文件名中,最重要二个文件名是:执行文件名和库文件名。一般情况下,无需更换最终生成的执行文件名;如果在连接过程中需要其它的库文件,则在显示第三行提示时,输入所需要的库文件名。  最后一行显示一个警告信息,提出本程序没有定义堆栈段,该警告信息可以不必理会,因为该执行文件是可运行的,在操作系统装入时会自动为其添加一个默认的堆栈段。

9 附录1 汇编语言编程和调试工具 方法2: 在文件名后面加上分号“;”,默认使用各类文件的缺省值。 …>link test; ……
附录1 汇编语言编程和调试工具 方法2:  在文件名后面加上分号“;”,默认使用各类文件的缺省值。 …>link test; …… LINK : warning L4021: no stack segment 4、运行程序  当要运行所生成文件时,可直接输入其文件名即可。 …>test 5、符号调试程序  当程序的运行结果不是预期结果时,就需要调试程序,找出错误的语句或逻辑关系。MASM系统提供了可用于源程序一级的调试工具CV(CodeView)。有关CV的使用参见“调试工具”中CodeView的介绍。 例1.7:用符号调试工具CV来调试程序TEST.ASM所生成可执行文件。 …>masm /Zi /Zd test ;假设其没有语法错 …>link /Co test …>cv test.exe

10 附录1 汇编语言编程和调试工具 二、编程集成环境PWB
附录1 汇编语言编程和调试工具 二、编程集成环境PWB  PWB(Programmer's WorkBench)是MASM 6.11提供的编程集成环境,在此环境下,程序员可直接编写源程序、汇编、连接和运行。  在汇编源程序时,如果有错误,系统将列举出所有出错位置和出错原因。还可用Shife+F3和Shife+F4来定位前一个错误和后一个错误;  在连接时,可指定堆栈的大小、附加的库文件、符号跟踪等选项;  在运行时,可设置命令行参数、直接运行、按调试方式运行、用DOS命令来运行等。 例1.8:查看PWB的启动方式 …>pwb /?  通常情况下,在PWB后面跟一个将要编辑的源文件名。假如要编辑源文件TEST.ASM,那么,可直接输入下面命令: …>pwb test.asm

11 附录1 汇编语言编程和调试工具 1、编辑源文件  PWB的编辑功能与许多编辑器的功能类似,有:建立新文件、保存文件、另存为、光标移动功能、块操作、插入/删除操作、恢复操作、查找/替换操作、设置编辑器的功能键和各类颜色等。要想了解更全面的编辑功能,可查看菜单:File、Edit、Search和Options的前四个菜单项。  在画面1.1(Options菜单中的“Colors…”)中,可选择各类窗口、菜单和文本等对象的背景色和前景色。比如:当要改变源程序的显示颜色时,可先在左边的列表框中选择“Text”列表项,然后再选择其背景色和前景色。

12 附录1 汇编语言编程和调试工具

13 附录1 汇编语言编程和调试工具  在连接时,如果需要某个库文件,那么,可选用Options菜单中的“Link Options”菜单项来设置,该菜单项的显示画面如画面1.2所示  在该画面上还可为程序设置一个缺省的堆栈段,其大小也可由用户自行决定。

14 附录1 汇编语言编程和调试工具 当生成执行文件需要多个模块连接时,就需要建立一个工程文件(.MAK)。建立工程文件的步骤和画面如下:
附录1 汇编语言编程和调试工具  当生成执行文件需要多个模块连接时,就需要建立一个工程文件(.MAK)。建立工程文件的步骤和画面如下: (1)、输入工程文件名,其默认的后缀为.MAK。输入画面如画面1.3所示  在画面1.3中还可选择工程目标文件的类型,该类型有:EXE、COM、LIB、Windows的EXE或DLL等二十几种。当然,对每种类型又有一些不同的要求,在此不在进一步展开叙述了。通常情况下,不必选择目标文件类型,其缺省类型就是DOS EXE。

15 附录1 汇编语言编程和调试工具 (2)、工程文件的编辑
附录1 汇编语言编程和调试工具 (2)、工程文件的编辑  在画面1.3中输入工程文件名,并且按“OK”按钮时,系统将进入画面1.4,在该画面中可向当前工程中添加源程序,也可把某源程序从当前工程中删除。

16 附录1 汇编语言编程和调试工具  若输入的文件名不在工程文件中时,可把该源文件添加到工程文件中,若在,也可将其从工程文件中删除。当所需要的源文件都添加到当前工程文件中时,可按“Save List”来保存该工程文件。此后就可用打开工程文件的方式来连接该工程中的文件。  如果需要修改工程文件的话,则可先用Project菜单中的“Open Project”菜单项打开工程文件,再用“Edit Project”菜单项来激活画面1.4进行编辑。 (3)、运行程序  在运行程序时,可设置命令行参数、直接运行、按调试方式运行、用DOS命令来运行等。通常情况下,在编写程序的初期,一般都用“调试方式”来运行程序。当选用这种方式时,系统会自动进入CV(CodeView)的调试环境。有关CV的使用参见“调试工具”中CodeView的介绍。

17 附录1 汇编语言编程和调试工具 (4)、符号调试的设置步骤
附录1 汇编语言编程和调试工具 (4)、符号调试的设置步骤  编写程序很难做到:编辑、汇编、连接、运行一次完成,除非程序的功能非常简单。当运行的结果不符合要求时,就需要跟踪程序的运行。  常用的调试手段有二种:执行代码的调试和符号调试。  前者是在没有任何源程序信息的情况下进行的调试,其工作难度大、效率低,后者是源程序一级上进行的调试,其目标代码的执行过程就象是源程序的执行,这种调试手段效率高、调试难度低,也是目前最流行的调试手段(在各种编程环境下都有类似的调试工具)。 一般来说,跟踪程序执行的工作又称为调试程序,即找出程序中不正常的逻辑关系和语句。

18 附录1 汇编语言编程和调试工具  为了能进行符号调试,需要告诉汇编程序和连接程序保留源程序中的各种符号信息。为此,可通过下面三步来设置一些命令选项。 (1)、设置生成选项  选择Options菜单中的“Build Options”菜单项,显示出画面1.5,并选择其中的“Use Debug Options”选项。

19 附录1 汇编语言编程和调试工具 (2)、设置汇编命令的选项
附录1 汇编语言编程和调试工具 (2)、设置汇编命令的选项  选择Options菜单中的“Project Templates”→“Customize Project Template”菜单项,显示出画面1.6。  在该画面的“Build Rule List”列表框中选择“macro AFLAGS_D “””,并把它修改为“macro AFLAGS_D “/Zi /Zd””。

20 附录1 汇编语言编程和调试工具 (3)、设置连接命令的选项
附录1 汇编语言编程和调试工具 (3)、设置连接命令的选项  选择Options菜单中的“Link Options”菜单项,与画面1.2所对应的是同一个画面,在此所要的部分画面如画面1.7所示,并选择“CodeView”选项。  经过上面三步设置后,在PWB环境下,用Run菜单中的“Debug”菜单项就可进行符号调试了。

21 附录1 汇编语言编程和调试工具 三、MASM的安装
附录1 汇编语言编程和调试工具 三、MASM的安装  宏汇编系统MASM 6.11共有5张软盘:Disk1~Disk5。在Disk1中运行Setup.exe文件即启动系统的安装过程。其安装过程与许多系统的安装大同小异,只有用户根据屏幕提示作适当的选择即可,所以,在此省略系统安装具体步骤的描述。

22 附录1 汇编语言编程和调试工具 1.1.2、Turbo Assember
附录1 汇编语言编程和调试工具 1.1.2、Turbo Assember  Turbo Assenmer系统是Borland C++程序设计系统的一部分,可有选择地安装它。该汇编系统有三个主要文件:TASM.EXE、TLINK.EXE、TD.EXE和TD32.EXE,其中:TD.EXE是16位程序的调试器,它只能显示16位寄存器,而TD32.EXE是32位程序的调试器。有关它们的显示画面请参见画面2.2和2.3。  Turbo Assenmer系统在汇编语言程序设计方面主要采用命令行的形式,当用其它文本编辑器编写好源程序(后缀为:.ASM)后,即可用TASM和TLINK文件来处理它。 一、汇编源程序 TASM.EXE 16-bit real-mode assembler TASMX.EXE 16-bit protected-mode assembler TASM32.EXE 32-bit protected-mode assembler

23 附录1 汇编语言编程和调试工具 例1.9 查看TASM的功能选项 …>tasm /? ……
附录1 汇编语言编程和调试工具 例1.9 查看TASM的功能选项 …>tasm /? …… /zi,/zd,/zn Debug info: zi=full, zd=line numbers only, zn=none 例1.10 汇编已有源程序TEST.ASM …>tasm test  假如源文件TEST.ASM有语法错的话,可用下面命令来生成其列表文件TEST.LST。 …>tasm test,,test …>type test.lst | more  假如源文件没有语法错,那么可用TLINK.EXE连接它,以生成可执行文件。

24 附录1 汇编语言编程和调试工具 二、连接程序 例1.11 查看TLINK的功能选项 …>tlink /? ……
附录1 汇编语言编程和调试工具 二、连接程序 例1.11 查看TLINK的功能选项 …>tlink /? …… /n Ignore default libraries  /f  Inhibit optimizing far calls to near /v Full symbolic debug information  /Gx Goodies 例1.12 连接汇编得到的目标文件TEST.OBJ …>tlink test 三、符号调试程序  当程序的运行结果不是预期结果时,就需要调试程序,找出错误的语句或逻辑关系。Turbo Assember系统提供了可用于源程序一级的调试工具TD/TD32(Turbo Debuger)。有关TD的使用参见“调试工具”中Turbo Debuger的介绍。

25 附录1 汇编语言编程和调试工具 例1.13:用符号调试工具TD来调试程序TEST.ASM所生成可执行文件。
附录1 汇编语言编程和调试工具 例1.13:用符号调试工具TD来调试程序TEST.ASM所生成可执行文件。 …>tasm /Zi /Zd test ;假设其没有语法错 …>tlink /v test …>td test.exe

26 附录1 汇编语言编程和调试工具 1.2、调试工具 1.2.1、DEBUG 启动DEBUG的一般命令如下: DEBUG 文件名 [参数表]
附录1 汇编语言编程和调试工具 1.2、调试工具 1.2.1、DEBUG  启动DEBUG的一般命令如下:   DEBUG 文件名 [参数表] 其中:文件名指定被调试的文件,其包括名和后缀,参数表是被调试文件运行时所需要的参数。  被调试的文件可以是系统中的任何文件,但通常它们的后缀为.EXE或.COM。  当DEBUG启动成功后,将显示连接符“-”,这时,可输入各种DEBUG命令。DEBUG中标志位的符号表示如表1所示,其所有命令及其含义如表2所示。 表1 DEBUG中标志位的符号表示 标志名称 溢出 OF 方向 DF 中断 IF 负号 SF ZF 辅助进位 AF 奇偶 PF 进位 CF 置位状态 OV DN EI NG ZR AC PE CY 复位状态 NV UP DI PL NZ NA PO NC

27 附录1 汇编语言编程和调试工具 关于参数的几点说明: 进制:在DEBUG中输入或显示的数据都是十六进制形式
附录1 汇编语言编程和调试工具  关于参数的几点说明: 进制:在DEBUG中输入或显示的数据都是十六进制形式 分隔:命令和参数、参数和参数之间要用空格、逗号或制表符等分隔 地址:用“段值:偏移量”的形式来表示地址,也可用段寄存器来代表“段值” 例如:1000:0,ds:10,es:200,cs:30等 表2 DEBUG命令及其含义 命令格式 功能说明 A [地址] 输入汇编指令 C [范围] 起始地址 对由“范围”指定的区域与“起始地址”指定的同大小区域进行比较,显示不相同的单元 D [范围] 显示指定范围内的内存单元内容 E 地址 字节值表 用值表中的值替换从“地址”开始的内存单元内容 F 范围 字节值表 用指定的字节值表来填充内存区域

28 附录1 汇编语言编程和调试工具 命令格式 功能说明 G [=起始地址] [断点地址] 从起点(或当前地点)开始执行,到终点结束
附录1 汇编语言编程和调试工具 命令格式 功能说明 G [=起始地址] [断点地址] 从起点(或当前地点)开始执行,到终点结束 H 数值1 数值2 显示二个十六进制数值之和、差 I 端口地址 从端口输入 L [地址 [驱动器号 扇区 扇区数]] 从磁盘读 M 范围 地址 把“范围”内的字节值传送到从“地址”开始的单元 N 文件标识符 [文件标识符…] 指定文件名,为读/写文件做准备 O 端口地址 字节值 向端口输出 P [=地址] [指令数] 按执行过程,但不进入子程序调用或软中断 Q 退出DEBUG,不保存正在调试的文件 R [寄存器名] 显示和修改寄存器内容 S 范围 字节值表 在内存区域内搜索指定的字节值表。如果找到,显示起始地址,否则,什么也不显示 T [=地址] [指令数] 跟踪执行,从起点(或当前地点)执行若干条指令 U [范围] 反汇编,显示机器码所对应的汇编指令 W [地址 [驱动器号 扇区 扇区数]] 向磁盘写内容,(BX、CX)为写入字节数

29 附录1 汇编语言编程和调试工具 范围:表示地址范围,它有二种表示方式:“地址1 地址2”和“地址1 长度”。
附录1 汇编语言编程和调试工具 范围:表示地址范围,它有二种表示方式:“地址1 地址2”和“地址1 长度”。     其中:“地址1”表示起始地址,要用“段值:偏移量”来表达;        “地址2”表示终止地址,只用“偏移量”来表示;        “长度”用字母’L’开头的数值来表示。 例如:100:50 100——段值为100,偏移量从50到100的内存区域;    100:50 L100——段值为100,偏移量从50开始的100个字节区域。 端口地址:二位十六进制数值 字节值:二位十六进制数值 字节值表:由若干个字节值组成,也可以是用引号括起来的字符串 驱动器号:0—驱动器A、1—驱动器B、2—驱动器C、3—驱动器D等

30 附录1 汇编语言编程和调试工具 关于使用命令的几点说明: 1、在提示符“-”下才能输入命令,在按“回车”键后,该命令才开始执行
附录1 汇编语言编程和调试工具 关于使用命令的几点说明: 1、在提示符“-”下才能输入命令,在按“回车”键后,该命令才开始执行 2、命令是单个字母,命令和参数的大小写可混合输入 3、可用F1、F2、F3、Ins、Del、左移键、右移键等编辑键来编辑本行命令 4、当命令出现语法错误时,将在出错位置显示“^ Error” 5、可用^C或^Break来终止当前命令的执行,还可用^S来暂停屏幕显示(当连续不断地显示信息时) 例2.1:启动DEBUG,并装入test.exe文件(假设该文件已存在)。 解: 方法1:…\>debug test.exe 方法2:…\>debug     -n test.exe     -l

31 附录1 汇编语言编程和调试工具 例2.2:比较以DS为段值,偏移量从10到50的内存区域与从地址100:20开始的内存区域。
附录1 汇编语言编程和调试工具 例2.2:比较以DS为段值,偏移量从10到50的内存区域与从地址100:20开始的内存区域。 -C DS: :20 或 -C DS:10 L41 100:20 例2.3:显示以DS为段值,偏移量从10到50内存区域的单元内容,然后用’abc’来填充它。 -D DS:10 50 或 -D DS:10 L41 -F DS:10 50 ‘abc’ 例2.4:显示十六进制1234与3421之和、差。 -H 例2.5:把数据段区域DS:0-40内的内容传送给从附加段ES:10开始的内存中。 -M DS:0 40 ES:10 例2.6:在数据段区域DS:0-40内查找是否有字符串’CIH’。 -S DS:0 40 ‘CIH’

32 附录1 汇编语言编程和调试工具 1.2.2、CodeView
附录1 汇编语言编程和调试工具 1.2.2、CodeView  CodeView是一个简单、直观的全屏幕调试工具,它可调试多种语言的源程序所生成的执行代码。CodeView的调试窗口如画面2.1所示。  画面的左上窗口是调试器的主窗口,其显示被调试的源程序或执行代码,左下窗口是命令窗口,用户可输入各种DEBUG命令,右窗口是显示寄存器窗口,它可显示16位和32位寄存器的内容。当然还有其它窗口,如:内存窗口、查看内容窗口(Watch)和程序输出窗口(View)等。 F2:显示/隐含的寄存器组窗口 F3:以不同的显示方式显示当前执行的程序 F4:显示程序的输出屏幕 F5:执行到下一个逻辑断点,或到程序尾 F6:依次进入当前屏幕所显示的窗口 F7:与F5功能相同 F8:单步执行指令,并进入被调用的子程序 F9:在源程序行中设置/取消断点,用鼠标左键双击之也可 F10:单步执行指令,但不进入被调用的子程序

33 附录1 汇编语言编程和调试工具 1.2.2、CodeView
附录1 汇编语言编程和调试工具 1.2.2、CodeView  CodeView是一个简单、直观的全屏幕调试工具,它可调试多种语言的源程序所生成的执行代码。CodeView的调试窗口如画面2.1所示。  画面的左上窗口是调试器的主窗口,其显示被调试的源程序或执行代码,左下窗口是命令窗口,用户可输入各种DEBUG命令,右窗口是显示寄存器窗口,它可显示16位和32位寄存器的内容。当然还有其它窗口,如:内存窗口、查看内容窗口(Watch)和程序输出窗口(View)等。 F2:显示/隐含的寄存器组窗口 F3:以不同的显示方式显示当前执行的程序 F4:显示程序的输出屏幕 F5:执行到下一个逻辑断点,或到程序尾 F6:依次进入当前屏幕所显示的窗口 F7:与F5功能相同 F8:单步执行指令,并进入被调用的子程序 F9:在源程序行中设置/取消断点,用鼠标左键双击之也可 F10:单步执行指令,但不进入被调用的子程序

34 附录1 汇编语言编程和调试工具

35 附录1 汇编语言编程和调试工具 1.2.3、Turbo Debuger
附录1 汇编语言编程和调试工具 1.2.3、Turbo Debuger  Turbo Debuger的主要窗口和调试功能键与CV非常类似,也可以单步执行、设置断点、显示寄存器内容和查看内存内容等。具体操作由读者在实际的调试过程中掌握、体会。  画面2.2和2.3是Turbo Assember系统中16位和32位调试器的主要显示画面。

36 附录1 汇编语言编程和调试工具

37 谢 谢 计算机科学系 2003年03月20日


Download ppt "汇编语言程序设计 吴 向 军 中山大学计算机科学系 2003.03.20."

Similar presentations


Ads by Google