汇编语言程序设计

上传人:jkl****17 文档编号:178682994 上传时间:2022-12-29 格式:DOC 页数:10 大小:68.50KB
收藏 版权申诉 举报 下载
汇编语言程序设计_第1页
第1页 / 共10页
汇编语言程序设计_第2页
第2页 / 共10页
汇编语言程序设计_第3页
第3页 / 共10页
资源描述:

《汇编语言程序设计》由会员分享,可在线阅读,更多相关《汇编语言程序设计(10页珍藏版)》请在装配图网上搜索。

1、本文由xingfeng110120贡献汇编语言程序设计(双语)上机指导 汇编语言程序设计(双语)上机指导 . 1 实验 1 建立 windows 环境下 32 位汇编语言开发环境 . 2 实验 2 Instruction Format and Addressing Mode . 5 实验 3 Data Operation Programming . 7 实验 4 Branching and Loop Programming. 9 实验 5 Procedure Programming . 12 实验 6 Input/Output Programming . 15 实验 7 Macro Desig

2、n . 17 实验 8 Mixed Programming . 19 调试程序 Windbg . 32 宏汇编命令 ML 和连接命令 LINK 常用参数速查 . 37 输入输出宏命令 . 40实验 1 建立 windows 环境下 32 位汇编语言开发环境实验目的:建立windows环境下32位汇编语言开发环境,并熟悉 它的使用方法。 实验要求: (1)建立windows环境下32位汇编语言开发环境; (2)熟悉自己建立的开发环境的使用方法; 实验内容: (1) 定制masm32集成开发环境,使之符合教学要求。 (2)分别建立汇编,连接,和汇编&;连接批处理命 令,能够生成包含调试信息的目标文

3、件,列表文件,以及能够进 行调试的可执行WIN32控制台程序。 (3)建立32位汇编语言框架程序。 (4)在自己建立的开发环境下汇编,连接,运行 教材中的fig3-1。 实验步骤: 1、定制开发环境masm32 修改文件msm32binbuildc.bat中的内容,使得执行 ProjectConsole Assemble &; Link后能够汇编连接可调试的32 位控制台应用程序,同时生成列表文件。 汇编命令改为: masm32binml /c /coff /Fl /Zi “%1.asm” 连接命令改为: masm32binlink /debug “%1.obj”2、在定制后的masm32开发

4、环境中运行教材中的例题fig3-1. 3、利用教材提供的80x86/software在命令行方式下运行例题 fig3-1. 4、建立适合在定制开发环境下使用的32位应用程序框架 参考: .386 ;必须是第一条非注释语句,说明这 是一个 32 位 应用程序 .model flat, stdcall ;定义程序的存储模式(32 位应用程序中必须采用 flat) include masm32includeio32.inc ;可选, 如果在程序中使用作者自定义的宏命 令需要这一句 .stack 4096 ;定义堆栈段 .data .code start: ret end start ;定义数据段 ;

5、数据定义 ;定义代码段 ;程序起始点 ;程序代码 ;程序结束点,返回 WINDOWS ;子程序代码 ;汇编结束5、在自己建立的开发环境下实现教材中P59. Programming Exercises 3.3中第3题。 实验要求:完成实验报告。在实验报告中完成下列内容: (1) 写出你自己的32位应用程序框架,并说明如何汇编,连接 生成可执行文件。 (2) 写出实验步骤5中程序的完整源代码。实验 2 Instruction Format and Addressing Mode 实验目的:熟悉汇编语言指令格式,掌握常用数据定义伪指令, 理解各种寻址方式的应用。掌握调试工具Windbg.exe的使用

6、。 实验要求:(1) 通过调试程序理解常用数据定义伪指令的作用。 (2)通过调试程序理解各种寻址方式的应用。 (3)熟练掌握调试工具Windbg的使用方法。 实验内容:(1)上机汇编连接 fig3-1,生成并观察列表文件; 用调试工具 Windbg 单步执行程序,观察寄存器和内存的变化。 (2)编写程序完成教材中 P72. Exercises3.5。用 Windbg 观察 内存的分配情况。 实验步骤: 1、 上机汇编连接 fig3.1(1) 查看列表文件。根据列表文件画出数据段中数据的分 配情况。 (2) 用 Windbg 调试 fig3-1。用 memory 窗口察看 prompt1 开始的

7、内存空间,并记录下来。 (3) 对比源程序中的数据定义,列表文件的数据分配和在 Windbg 中记录的数据,理解数据定义伪指令的作用。 2、 用 Windbg 调试 fig3-1,用 Disassembly 窗口察看指令的机器码。3、 4、用 Windbg 单步执行 fig3-1,观察每一条指令的执行结果。 上机编写完整的源程序加入教材中 P72. Exercises3.5 中的数据定义,汇编连接后,用 Windbg 观察内存分配的情况。 实验要求:完成实验报告,回答下面的问题: 1、 要使程序能在 windbg 中调试,执行汇编和连接命令时,需要使用什么参数? 2、 Fig3-1.exe 中

8、执行指令 input string, 40 时,用户如果输入”123”, 该指令的执行结果是什么?atod string 指令执 行后的结果是什么? 3、 写出 P72. Exercises3.5 中 1,3,5,7,10,12,15,17,23,32 定义的内存空间的值。 4、 写出下列指令的寻址方式和机器码:(1) add eax, number1 (2) mov number1, eax (3) mov eax, 100 (4) mov ebx, offset number1 add eax, ebx实验 3 Data Operation Programming 实验目的:熟练掌握基本的

9、数据传送指令,算术运算指令和位操 作指令在编程中的应用。 实验要求:按照要求编写程序,调试运行。 实验内容: 1、 完成教材 P107. Programming Exercises 4.2 中第 2 题。 Writea complete 80x86 assembly language program to prompt for values of x,y,and z and display the value of expression 2(-x+y-1)+z. Allow for 32-bit integer values. 2、 完成教材 P117. Programming Exercis

10、es 4.3 中第 3 题。Suppose that someone has a certain number of coins(pennies, nickels,dimes,quarters,fifty-cent pieces, and dollar coins) and wants to know the total value of the coins, as well as how many coins there are. Write a program to help. 3、 完成教材 P129. Programming Exercises 4.4 中第 4 题和第 5题。 a)

11、Write a complete 80x86 assembly language program to prompt for four pairs of grades and weighting factors. Each weighting factor indicates how many times the corresponding grade is to be counted in the sum. The weighted sum is:WeightedSum=Grade1*Weight1+ Grade2*Weight2+ Grade3*Weight3+ Grade4*Weight

12、4 and the sum of the weight is: SumWeights=Weight1+Weight2+Weight3+Weight4. Display the weighted sum, the sum of the weights and the weighted average(WeightedSum/SumofWeights). b) Write a complete 80x86 assembly language program to prompt for four grades , and then display the sum and the average of

13、 the grades in ddddd format. 4、 编写代码实现下面的功能:无符号两位十进制字符串转换为对应的二进制数存入 AL 5、 编写代码实现下面的功能:将 AL 中的数值(0-99)转换为无符号十进制数字符串。 6、 编写代码实现下面的功能: 将两位的十六进制字符串 (0-9)转换为对应的二进制数存入 AL 7、 编写代码实现下面的功能:将 AL 中的数值转换为对应的两位十六进制字符串。 实验要求:提交试验内容 1-3 源程序,完成实验报告。实验报告 中要求写出实现实验内容 4,5,6,7 的关键代码。实验 4 Branching and Loop Programming

14、实验目的:熟练掌握分支和循环结构的设计方法,熟悉跳转和循 环指令的使用方法。 实验要求:按照要求编写程序,调试运行。 实验内容: 1、 if then lowerCount+1; else if(chA) and (chZ) then upperCount+1 else otherCount+1; endif endif 其中 ch 调用 ReadChar 输入, lowerCount, upperCount 和 otherCount 的值用 WriteUDecByte 显示。 2、 编写程序从键盘输入一系列有符号数,找出其中的最大数 编写程序实现下面的算法:和最小数,显示运行结果。建议算法如

15、下: 显示 “First number?”; 调用 ReadSDecDword 输入双字有符号数; minimum:=number; maximum:=number; while(显示 “Another number?(Y or N)”)loop if (输入 Y) then 调用 ReadSDecDword 输入双字有符号数; if(numbermaximum) then maximum:=number; endif endwhile 3-6 题中任选一题: 3、编写程序将 EAX 的内容转换为二进制字符串 4、编写程序将 EAX 的内容转换为十六进制字符串 5、编写程序将 EAX 的内容转

16、换为无符号十进制字符串 6、编写程序将 EAX 的内容转换为有符号十进制字符串,负数字符串以“-“引导。 7-10 题中任选一题: 7、编写程序将二进制字符串表示的数据存入 EAX 寄存器 8、编写程序将十六进制字符串表示的数据存入 EAX 寄存器 9、 编写程序将十进制字符串表示的无符号数据存入 EAX 寄存器 10、编写程序将十进制字符串表示的有符号数据存入 EAX 寄存 器 实验要求:提交实验内容 1,2 的源程序,完成实验报告,实验 报告中给出 3-6 题中任一题的关键代码,7-10 题中任意一题的 关键代码。实验 5 Procedure Programming 实验目的:理解堆栈的工

17、作原理,熟练掌握子程序的设计方法, 熟悉子程序相关指令的使用方法。 实验要求:按照要求编写程序,调试运行。 实验内容: 1、 上机调试下面的代码,单步执行,观察 ESP 寄存器和 EIP寄存器内容的变化情况。观察 esp 指示的内存单元的内容。画 出堆栈的变化过程,标注 ESP 寄存器的变化情况。 .386 ;必须是第一条非注释语句,说明这 是一个 32 位 应用程序 .model flat, stdcall ;定义程序的存储模式(32 位应用程序中必须采用 flat) .code start: push 100 call subproc;程序代码 pop eax ret ;程序结束点,返回

18、WINDOWS ;定义代码段 ;程序起始点subproc procret subproc endp end start ;汇编结束2、编写完整的 32 位应用程序:设计子程序完成下面的功能, 在 主程序中先调用 ReadUDec 输入数据,然后调用自己编写的子程 序,将输入的数据转换为对应的可显示字符串的形式,最后调用 WriteString 显示转换后的字符串。要求完成的子程序可以在(1) (4)中任选一题, (5)(8)中任选一题。 (1)编写子程序将 EAX 的内容转换为二进制字符串 (2)编写子程序将双字补码转换为十六进制字符串 (3)编写子程序将 EAX 的内容转换为无符号十进制字符

19、串 (4)编写子程序将双字补码转换为有符号十进制字符串,负数 字符串以“-“引导。 (5)编写子程序将二进制字符串表示的数据存入 EAX 寄存器 (6) 编写子程序将十六进制字符串表示的数据存入 EAX 寄存器 (7) 编写子程序将十进制字符串表示的无符号数据存入 EAX 寄 存器 (8) 编写子程序将十进制字符串表示的有符号数据存入 EAX 寄 存器 3、利用多模块设计方法实现上面程序的功能,建立子程序库, 并编写主程序调用子程序库中的函数。 提示: (1) 编写子程序模块完成上题中的子程序功能,汇编生成目标文件。 (2)将子程序目标文件组成库文件: masm32binlib 目标文件名 /

20、out:库文件名 或者masm32binlink -lib 目标文件名 /out:库文件名 (3)编 写 主 程 序 模 块 : 用 extern 声 明 外 部 子 程 序 , 用 includelib 包含前面生成的库文件,在主程序中先调用 ReadUDec 输入数据,然后调用自己编写的子程序,将 输入的数据转换为对应的可显示字符串的形式, 最后调 用 WriteString 显示转换后的字符串。 汇编连接生成可执 行文件。 实验要求:提交实验内容 3 的源程序,并在实验报告中说明子程 序库的开发过程,以及可执行程序的执行结果;实验报告中给出 实验内容 3 中子程序源代码(可以在(1)(4

21、)中任选一题, (5)(8)中任选一题。 )实验 6 Input/Output Programming 实验目的: 熟练掌握实现实模式和保护模式下键盘输入和屏幕显 示功能的程序设计方法。 实验要求:按照要求编写程序,调试运行。 实验内容: 1、编写实模式应用程序:利用 IN/OUT 指令读写 CMOS 时钟, 显示当前的日期和时间。 2、编写实模式应用程序:利用 IN/OUT 指令编写简单的音乐程 序。运行时,当用户按下按键 1-7,分别演奏音调 dou,re,mi, fa,so,la,si 3、编写完整的 16 位应用程序:设计子程序完成下面的功能, 在 主程序中先调用输入字符串的子程序,

22、将字符串中所有英文字符 变为大写,其他字符不变。最后调用输出字符串的子程序,显示 原始字符串和转换后的字符串。 (1) 编写实模式子程序利用系统调用完成键盘输入一个字符。 (2) 编写实模式子程序利用系统调用完成屏幕显示一个字符。 (3) 编写实模式子程序利用系统调用完成键盘输入一个字符 串。 (4) 编写实模式子程序利用系统调用完成屏幕显示一个字符 串。4、编写完整的 32 位应用程序:设计子程序完成下面的功能, 在 主程序中先调用输入字符串的子程序, 将字符串中的字符逆序排 序生成新的字符串。最后调用输出字符串的子程序,显示原始字 符串和转换后的字符串。 编写保护模式子程序利用系统调用完成

23、 键盘输入一个字符。 (1) 编写保护模式子程序利用系统调用完成键盘输入一 个字符。 (2) 编写保护模式子程序利用系统调用完成屏幕显示一 个字符。 (3) 编写保护模式子程序利用系统调用完成键盘输入一 个字符串。 (4) 编写保护模式子程序利用系统调用完成屏幕显示一 个字符串。 实验要求:提交第 2 题源程序;在实验报告中给出第 3(3)和 (4)题和第 4(3)和(4)题的关键代码。实验 7 Macro Design 实验目的:熟练宏的使用方法。 实验要求:按照要求编写程序,调试运行。 实验内容: 1、编写完整的 32 位应用程序:先定义下面的宏,然后在程序中 调用宏,生成列表文件。根据列

24、表文件写出宏扩展后的结果。 (1) 定义 Move32 宏接收两个内存操作数,把源操作数 送到目的操作数。 (2) 定义 Mult32 宏接收两个内存操作数, 将他们相乘产 生一个 32 位的乘积。 2、 编写一个 ReadUdec 的宏,从标准输入上读取一个 8 位,16 位或 32 位的无符号整数,并在给定的参数中返回。使用条 件操作符允许宏能够处理不同大小的输入参数。写一个程序 调用宏并传递不同尺寸的操作数。 3、 编写一个 WriteUdec 的宏,通过调用显示无符号数的功能在标准输出上显示一个无符号数。传递给宏的参数可以是一 个字节、字或双字,在宏内使用条件操作符以便能适应不同 尺寸

25、的参数。写一个程序调用宏,并传递给宏不同尺寸的参 数。 实验要求:提交 1,2,3 源程序,在实验报告中写出它们的宏定义方法和宏调用方法。实验 8 Mixed Programming 实验目的:熟练掌握汇编语言与 VC的混合编程的方法。 实验要求:按照要求编写程序,调试运行。 实验内容: 1. 编写一个 C+程序通过调用汇编子程序实现的功能。 提示: C 程序中输入两个整数, 在 然后调用汇编子程序对这两个 数求积,在主程序中打印计算结果。编程并上机调试通过。 2. 编写程序,在汇编程序中初始化 varA12、varB6,调用 C 语言的子程序求积并打印计算结果。编程并上机调试通过。 3. 将

26、排序子程序改写成 C 语言的嵌入式汇编函数;然后编写一 个 C 语言主程序,提供待排序的数据和显示排序后的结果。 4. 将排序子程序改写成可供 C 语言调用的模块;然后编写一个 C 语言主程序,提供待排序的数据和显示排序后的结果。 5. 编写识别 CPU 的汇编语言过程,供 Visual C+6.0 调用的形 式,然后编写一个 Visual C+主程序,并上机调试通过。 实验要求:完成实验报告,在实验报告中写出 1,3,4 的关键代 码,并写出运行结果附录: Windows 环境下 32 位汇编语言开发环境的建立 在Windows环境下进行汇编语言程序设计之前,首先需要搭建一 个汇编语言的开发

27、环境。现在汇编语言开发工具包常见的是 MASM,TASM和NASM。MASM是微软开发的宏汇编工具,适合在 Windows环境下进行程序设计,性能稳定,持续升级;NASM的语 法与MASM略有不同,它可以在不同的环境下使用,LINUX或 Windows。 鉴于目前汇编语言程序设计教学中更多的选择了MASM, 本文将介绍基于MASM的32位汇编开发环境的几种搭建方法。 其他 汇编工具的具体内容可参考相关的手册。汇编语言的开发分为源代码编辑,汇编和连接三个步骤,在必要 的时候还需要对程序进行调试。 因此汇编语言开发环境中应包含 编辑软件,汇编软件,连接软件和调试软件。如果将这些软件集 成在一起就是

28、构成一个集成开发环境。一、命令行环境 首先下载一个MASM615开发工具包。在许多汇编网站和汇编教材 的配套光盘中都提供了该工具包。根据提示,进行安装。然后就 可以用它来开发汇编程序。(1)源代码编辑汇编源程序是纯文本文件,其扩展名为.asm,可以用任何一种文 本编辑软件来编写汇编原代码。比如EditPlus,UltraEdit, NotePad,Word, VC等,注意文件保存的时候必须以纯文本 格式保存,并取.asm后缀名。 (2)汇编 源文件不能直接被机器执行, 需要运行汇编软件对它进行汇编生 成目标文件,后缀为.obj.,这是一个二进制文件。如果出现语法 错误,汇编程序会产生错误报告,

29、程序员可以根据这些错误报告 对源程序进行重新编辑,重新汇编,直到没有语法错误为止。 MASM汇编器的命令是ml.exe, 其命令行格式为: Ml /option 源文件 /link option 生成32位应用程序时,常用的命令行是: ML /coff /c /Fl /Zi filename; 例如,要汇编test.asm源文件,生成coff格式的目标文件,列表 文件和调试信息,可以使用命令行: ML /coff /c /Fl /Zi test.asm; 为了避免每次汇编源文件的时候都要输入许多参数, 可以建立一 个批处理文件。例如批处理文件mlbat.batecho offif exist

30、%1.obj del %1.objif exist %1.exe del %1.exepathml /c /coff /Fl/Zi %1.asmif errorlevel 1 goto errasm :errasm echo _ echo Assembly Error goto TheEnd:TheEndpause有了这个批处理文件以后,如果汇编test.asm,就可以用命令: mlbat test 在建立自己批处理文件的时候,可以根据需要设定参数,指定路 径。 (3)连接 目标文件仍然不能执行,还需要运行连接程序,将目标文件和库 文件连接起来,才能生成最后可以执行的.exe文件。 生成可执行

31、文件的工具叫做连接器。 在前面提到的汇编语言开发 工具包中都包含有连接器link.需要注意的是,连接器有两种:一种是16位连接器(Segmented Executable Linker),用于生 成DOS程序,一种是32位连接器,可以生成Win32PE文件 (Incremental Linker),如果要生成32位应用程序需要使用后 者。在MASM8和VC中提供有32位连接程序。一般来说,在开发工 具包中用link16和link32分别表示16位和32位连接软件。 连接器的命令行用法为: LINK option filename 生成windows控制台程序的常用命令是: LINK /subs

32、ystem: console /DEBUG filename 生成windows程序的常用命令是: LINK /subsystem: windows /DEBUG filename 参数/DEBUG是为方便调试而设置的。 例如,将前面生成的目标文件test.obj连接生成控制台程序 test.exe所用的命令行是: LINK /subsystem:console /DEBUG test.obj为了避免每次连接的时候都要输入许多参数, 同样也可以建立一 个批处理文件。例如批处理文件linkbat.batecho offif not exist “%1.obj” goto errlinkpathL

33、ink /SUBSYSTEM:CONSOLE /OPT:NOREF /DEBUG %1.obj if errorlevel 1 goto errlink :errlink echo _ echo link Error goto TheEnd:TheEndpause此时,对test.obj连接,可以用命令: linkbat test 在建立自己批处理文件的时候,可以根据需要设定参数,指定路 径。 如果建立一个类似VC里build的命令,就可以执行一个命令对原 程序进行汇编和连接。 下面的批处理文件buildc.bat执行的就是 先汇编再连接的功能: REM buildc.batecho offi

34、f exist %1.obj del %1.obj if exist %1.exe del %1.exepathml /c /coff %1.asm if errorlevel 1 goto errasmpathLink /SUBSYSTEM:CONSOLE /OPT:NOREF %1.obj if errorlevel 1 goto errlink dir %1.* goto TheEnd:errlink echo _ echo Link error goto TheEnd:errasm echo _ echo Assembly Error goto TheEnd:TheEndpause执行

35、命令:buildc test 就会对test.asm进行汇编, 并生成windows控制台程序test.exe. (4)调试 生成的.exe文件执行后完成的功能如果与预想的功能不相符, 说 明程序编写出现了逻辑错误,程序员需要对原程序进行检查,找 出错误。检查逻辑错误可以阅读原程序,通过分析逻辑算法找出 错误;也可以在程序中适当的位置添加输出语句,显示中间结果 来发现错误,还可以利用调试软件,跟踪程序的执行,动态调试 程序从而发现错误。 调试器有两大类,用户模式和内核模式。用户模式的调试器用于 调试用户模式的应用程序,工作在Ring3级,如vc自带的调试器 和Windbg; 内核模式的调试器则

36、可以调试操作系统内核, 处于CPU 和操作系统之间,工作在Ring0级,如SoftICE, OLLYDBG, trw2000。关于调试器的使用方法,将在另外的文章中讨论。二、集成开发环境 开发一个汇编程序需要经过上述四步才能生成正确的可执行文 件。程序员可以下载安装汇编语言开发工具包,然后就可以进行程序开发。如果需要更加方便的执行汇编和连接的步骤,建议自 己建立批处理文件,避免每次命令行输入许多参数。也可以使用 集成开发环境将上述步骤放在一个界面下方便的完成。WINDOWS 环境下常用的集成开发环境有MASM32和Visual C+,VisualAsm, PASS32,GASM。下面介绍MAS

37、M32和Visual C+的在开发汇编语言 程序时的用法。 1、 MASM32MASM32是Windows环境下的窗口应用程序,集成了微软的MASM工 具,包含丰富的库函数和宏文件以及相应的联机帮助,用户界面 友好,可以很方便的进行WINDOWS下汇编程序的开发,基本不需 要进行额外的设置。 下载安装MASM32之后,将Qeditor图标拖到桌面上以方便以后的 使用。 单击Qeditor图标启动MASM32,在主窗口中输入源代码,选择 File/Save保存文件。 然后再选择Project菜单下的命令进行汇编 和连接。该菜单中主要使用的命令有: Assemble ASM file:汇编生成32

38、位应用程序,对应的批处理文 件是masm32binassembl.bat. Link OBJ file : masm32binlnk.bat ASSEMBLE &; link : BUILD.BAT BLDALL:BUILDALL.BAT Link OBJ file : masm32binlnkC.batASSEMBLE &; link : BUILDC.BAT BLDALL:BUILDALLC.BAT 这些批处理文件的内容都与前面所讲的汇编和连接批处理的内 容类似,读者可以根据需要修改这些命令。 MASM32将编辑,汇编和连接很好的结合在一起,对于windows图 形界面的变成也非常方便,它

39、提供了一个资源编辑器。窗口应用 程序可以在该环境中直接运行, 但是控制台程序则需要启动命令 行方式窗口运行。 2、 Visual C+ 6.0VC是微软开发的C+ 6.0的集成开发环境,在安装了MASM615之 后,也可以用作汇编语言程序开发的集成环境。有两种方法可以 用VC来开发汇编程序。 方法1: 启动VC+后,从菜单中选择“File”-New 在New对话框的标签中选择Projects,再选中Win32 Console Application,在Location中选择路径,并在Projectname中输入 名字,例如test。VC在指定的路径自动建立test文件夹。 单击OK,在接下来的

40、对话框中选择An Empty project,单击 Finish。 在左面的列表窗口的下面选择FileView标签,列出当前project 中的文件,现在没有文件在projects中。 单击新建按钮,在右侧的编辑窗口中输入汇编源程序,存盘到test目录下,命名为test.asm。 在左侧的窗口右击SourceFiles,出现的快捷菜单中,选择Add files to projects,在文件选择对话框里选择文件test.asm, OK,这时,在Source Files下出现test.asm的名字。右击该文件 名, 出现快捷菜单, 选择setting三, 在对话框右边的Commands 内输入m

41、l /c /coff test.asm,Outputs内输入test.obj,单击Ok, 将ML.exe和ml.err复制到windows目录。按F7,自动编译生成 test.exe. 编译和连接信息显示在Output视图中。 接下来可以直接在VC环境 中运行和调试该程序。 方法2: 打开VC+。点取File-New命令,新建一个Workspace,命名如 testmak,右击工作区名字,选择加入新工程命令,在工作区中加 入一个makefile工程。该工程文件与工作区在同一个文件夹中。 建立一个make文件testmak.mak加入工程中:LINK32=link.exe LINK32_FLAG

42、S=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsyst

43、em:console /incremental:yes /pdb:testmak.pdb /debug /machine:I386 /out:.testmak.exe /pdbtype:sept LINK32_OBJS= .testmak.obj .testmak.exe : $(LINK32_OBJS) $(LINK32) $(LINK32_FLAGS) $(LINK32_OBJS) SOURCE=.testmak.asm InputPath=.testmak.asm .testmak.obj : $(SOURCE) tempfile.bat ml /c /coff /Zi testmak.

44、asm OPTIONS- DIRECTORIES,在Executable中加入路径C:MASM615,在Include中加入C:MASM615INCLUDE ;在 library的路径中加入C: MASM615LIB 。 如果一切正常, 下面就可以选build命令F7, 生成你的可执行文件 了。如果没有错误单击执行按钮,可以看见执行的结果。在VC中开发汇编程序建立工程时的设置工作稍显繁琐, 但是一旦 设置好后, 开发的四个步骤一气呵成, 在进行多模块设计的时候, 这是一个很好的选择。 (附注:本文中的示例程序都与testmak.asm一样。)调试程序 Windbg WinDbg 是微软开发的免

45、费源码级图形界面调试工具,可以 调试 Win32 应用程序,服务器应用程序调试和 Kernel 模式驱 动调试。本文介绍 Windbg 在调试 Win32 应用程序时的常用命 令。 1、 Windbg 的启动Windbg 可以从命令行启动,启动命令格式为: windbg -a -g -h -i -k platform port speed -ltext -m -p id -e event -spipe -v -w name -y path -z crashfile filename.ext arguments 在 WindowsXP/2000 操作系统下, 可以直接双击 Windbg 图标 启

46、动。 2、 打开应用程序被调试的应用程序在汇编和连接时应加入调试信息。 汇编时使用 参数/Zi;连接程序使用参数/debug。 开始调试一个应用程序时,首先选择 File 菜单下的 Open Executable 命令, 在对话框中选择可执行文件。 出现 Command 窗口, 点击工具栏按钮 再次点击按钮 后, Command 窗口中显示一组信息, 在后,在 Command 窗口后出现 Source 窗口。3、显示存储单元 显示存储单元的按钮是 。点击该按钮后,出现对话框在 Address Expression 编辑框中填入要察看的地址信息。 地址信息有两种常用的输入方式: (1)指定内存单

47、元地址 例如:在 Address Expression 中填入 0x0040103f,点击 按钮 OK 后出现指定地址开始的内存单元的内容:其中 0x0040103F 至 0x004010BF 是 Windbg 显示以十六进制 表示的单元地址, 中间用十六进制表示每个字节, 右边用 ASClI 字符表示每个字节。 (2) 通过变量名表示 例如:在 Address Expression 中填入&;b_var1,点击按钮OK 后出现 b_var1 开始的内存单元的内容:其中 0x00404000 地址是变量 b_var1 所在的单元。 随着程序的执行,相应内存单元的内容会相应变化。 4、 显示寄存

48、器内容 ,点击该按钮后,出现窗口显示寄存器内容的按钮是其中 EFL 是标志寄存器内容,对应每一位判断标志位的值。EA 是内存寻址方式指示的有效地址。 随着程序的执行,寄存器的内容会相应变化。 5、 运行程序 。从应用程序入口地址开始执行程序,遇到运行程序按钮是 断点停止。 6.单步执行程序,单步执行程序有两种类型: (1) Stepinto 单步执行命令,当遇到子程序调用指令时,进入子程序内部逐条 执行指令。 (2) Step over 单步执行命令,当遇到子程序调用指令时,不进入子程序内部逐 条执行指令,而把调用子程序当作一条指令执行。 7.反汇编命令 U(Unassemble) 该命令执行

49、后,出现窗口:窗口中的内容从左至右依次是:地址,机器码,指令。随着程序 的执行,反汇编窗口也随之变化。 8、Watch 窗口 点击按钮 后出现空白的 Watch 窗口:在左边的一列中输入变量的名字,右边显示变量的值:随着程序的执行,变量的值会相应变化。 11 退出 Windbg选择 File 菜单中的 Exit 命令,可以退出 Windbg。宏汇编命令 ML 和连接命令 LINK 常用参数速查 宏汇编命令 ML.EXE 的命令行格式如下: ML /参数选项 文件列表 /LINK 连接参数选项 ML 允许汇编和连接多个程序形成一个可执行文件;它的常用 参数选项如下,注意参数是大小写敏感的): /

50、AT允许 tiny 存储模式(创建一个 COM 文件) /c只汇编源程序,不进行自动连接(这里是小写的字母 c) /Fl 文件名创建一个汇编列表文件(扩展名 LST) /Fr 文件名创建一个可在 PWB 下浏览的.SBR 源浏览文 件 /Fo 文件名根据指定的文件名生成模块文件,而不是采 用缺省名 /Fe 文件名根据指定的文件名生成可执行文件,而不是 采用缺省名 /Fm 文件名创建一个连接映象文件(扩展名 MAP) /I 路径名设置需要包含进(INCLUDE)源程序的文件 的所在路径 /Sg在生成的列表文件中,列出由汇编程序产生的指令 /Sn在创建列表文件时不产生符号表 /Zi生成模块文件时,

51、加入调试程序 CodeView 需要的信息 /Zs只进行句法检查,不产生任何代码 /LINK传递给连接程序 LINK 的参数 /nologo展开版权信息 /Bl 连接器名字 使用其它连接器 /Sa 列表文件最大限度展开源码 /Sc 在创建列表文件时加入时间信息 /Cp 区分用户自定义标识符的大小写 /Sf 生成第一次汇编列表 /Cu 所有标识符转换为大写 /Sl设置行宽 /Cx保留 PUBLIC 和 EXTERN 变量的大小写 /Sn 展开符号表列表 /coff生成 COFF 格式的文件 /Ta 文件名 汇编不是以 ASM 为扩展名的源文件 /WX 警告信息被看作错误信息 /W 设置警告级别

52、/Zd 在调试信息中加入行号 /Zf 所有符号成为公有符号 /G 指定语言类型 /Zi 加入符号调试信息 /I 设置 INCLUDE 路径连接命令 LINK.EXE 的命令行格式如下: LINK /参数选项 文件列表 LINK 连接一个或多个程序形成一个可执行文件;它的常用参数 选项如下, /COMMENT:注释信息加入注释信息 /DEBUG加入调试信息 /DEBUGTYPE:CV|COFF指定调试信息类型 /DEFAULTLIB:library指定默认库文件 /DLL创建 DLL 文件 /DRIVER:UPONLY|WDM创建驱动程序 /ENTRY:标号设置程序入口 /EXPORT:symb

53、ol定义可以被其他模块使用的符号 /INCREMENTAL:YES|NO是否为增式连接器 /LIBPATH:dir指定库文件的路径 /MAP:filename 映像文件 /OUT:filename定义生成文件名/SUBSYSTEM:NATIVE|WINDOWS|CONSOLE|WINDOWSCE|P OSIX指定操作系统类型输入输出宏命令 本表中所列出的宏命令是作者自己定义的输入输出宏, 它们 的定义在文件 io16.inc 和 io32.inc 中。 如果在实模式的应用程 序中,加入 INCLUDE io16.inc 才可以使用这些宏;如果在保护 模式的 32 位应用程序中,加入 INCLU

54、DE io32.inc 才可以使用这 些宏。宏命令 ReadBinByte格式 ReadBinByte b_var功能 读入二进制字节数据存放 到字节类型参数 b_var 中ReadBinWordReadBinWord w_var读入二进制字数据存放到 字类型参数 w_var 中 读入二进制双字数据存放 到双字类型参数 d_var 中ReadBinDwordReadBinDword d_varReadHexByteReadHexByte d_var读入十六进制双字数据存 放到双字类型参数 d_var 中ReadHexWordReadHexWord w_var读入十六进制字数据存放 到字类型参数

55、 w_var 中ReadHexDwordReadHexDword b_var读入十六进制字节数据存 放到字节类型参数 b_var 中ReadUDecByteReadUDecByte b_var读入无符号十进制字节数 据存放到字节类型参数 b_varReadUDecWordReadUDecWord w_var读入无符号十进制字数据 存放到字类型参数 w_varReadUDecDwordReadUDecDword d_var读入无符号十进制双字数 据存放到双字类型参数 d_varReadSDecByteReadSDecByte b_var读入有符号十进制字节数 据存放到字节类型参数 b_varRe

56、adSDecWordReadSDecWord w_var读入有符号十进制字数据 存放到字类型参数 w_varReadSDecDwordReadSDecDword d_var读入有符号十进制双字数 据存放到双字类型参数 d_varReadCharReadChar char读入字符, ASCII 码存 其放到字节类型参数 char ReadString ReadString buffer 读入字符串,字符串输入 以回车结束,输入的字符 串存放到 buffer 指向的 内存空间。 WriteString WriteString string 显示以 0 结尾的字符串 string.字符串的长度 不超

57、过 128。 WriteBinByte WriteBinByte b_var WriteBinWord WriteBinWord w_var WriteBinDword WriteBinDword d_var WriteHexByte WriteHexByte b_var WriteHexWord WriteHexWord w_var WriteHexDword WriteHexDword d_var WriteUDecByte WriteUDecByte b_var 显示二进制字节数据 b_var 显示二进制字数据 w_var 显示二进制双字数据 d_var 显示十六进制字节数据 b_var

58、 显示十六进制字数据 w_var 显示十六进制双字数据 d_var 显示无符号十进制字节数 据 b_varWriteUDecWordWriteUDecWord w_var显示无符号十进制字数据 w_varWriteUDecDword WriteUDecDword 显示无符号十进制双字数 d_var WriteSDecByte WriteSDecByte b_var WriteSDecWord WriteSDecWord w_var 据 d_var 显示有符号十进制字节数 据 b_var 显示有符号十进制字数据 w_varWriteSDecDword WriteSDecDword 显示有符号十进制双字数 d_var WriteChar WriteChar char 据 d_var 显示字符 char

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!