Windows汇编程序设计基础.PPT

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Windows汇编程序设计基础

第十章 Windows 汇编语言程序设计基础 10.1 Windows汇编环境 10.2 Windows下的子程序设计与函数调用 10.3 使用VC编译调试汇编程序 10.1 Windows汇编环境 10.1.1 Windows下的MASM与LINK 10.1.2 Windows汇编源程序的格式 10.1.1 Windows下的MASM与LINK MASM汇编器 LINK连接器 汇编连接步骤 1. MASM汇编器 MASM汇编器的命令行用法为: ml [/选项] 汇编程序源文件 [/link 链接选项] 2. LINK链接器 LINK编译器的命令行用法为: link [选项] [文件列表] 3. 汇编链接步骤 以一个源程序文件hello.asm为例,对它进行汇编链接,最后运行。 用MASM汇编一个程序的方法为 ml /c /coff hello.asm 用LINK链接生成可执行文件的方法为: link /subsystem:console hello.obj 可以简化为: ml /coff hello.asm /link /subsystem:console 10.1.2 Windows汇编源程序的格式 1.一个显示字符串的汇编程序 举例 hello.asm(教材P311) 等同于下面的C程序 #include stdio.h int main( ) { printf(Hello World!\n); return 0; } 2. 程序格式 (1)模式定义 程序的第一部分是有关模式定义的3条语句: .386 .model flat, stdcall option casemap:none 这些语句定义了程序使用的指令集、工作模式。 ①指令集 .386语句是汇编语言的伪指令,说明使用的指令集是哪一种CPU的。 如果用汇编语言编写的是驱动程序或者驱动程序的一个小模块,而且驱动程序在特权级0上运行,就需要使用.386p,后面带p的伪指令表示程序中可以使用特权指令。 在编程中如果使用了MMX指令,除了定义.586之外,还要加上一句.mmx伪指令: .586 .mmx ②工作模式 .model语句用来定义程序工作的模式,它的格式是: .model 内存模式[,调用规则][,其他模式] 在DOS的可执行程序中,可用到.com文件和.exe文件。 在Windows环境下,可执行程序只有一种内存模式,即Flat(平坦)模式 。 ②工作模式(续) 在DOS下的汇编语言程序中,常常有这样的程序片段: MOV AX, DATA MOV DS, AX 其作用是给数据段寄存器DS赋值。 在编程时,必须考虑这些DS,ES,SS等段寄存器是否正确设置。 在Windows汇编语言程序中,则不必考虑这些问题。在程序中,不需要也不应该给CS,DS,ES,SS等段寄存器赋值。 ③option语句 option语句有许多选项,这里介绍一种: option casemap:none 这条语句说明程序中的变量和子程序名是否对大小写敏感。 由于Windows API函数中的函数名称是区分大小写的,所以应该指定这个选项“casemap: none” (2)includelib语句 汇编程序中也需要调用一些外部模块(子程序/函数)来完成部分功能。 例如:使用下面语句通知链接程序使用 msvcrt.lib includelib msvcrt.lib 若要使用使用其他库文件,只需重复编写 Includelib 库文件名 (3)函数声明语句 格式: 函数名称 PROTO [调用规则]:[第一个参数类型][,:后续参数类型] (4)include语句 语法: include 文件名 例如: include kernel32.inc include user32.inc 以后程序中用到user32.dll和kernel32.dll中的函数时,不需要事先声明就可以直接使用。 (5)数据和代码部分 程序中的数据部分和代码部分是分开定义的, 分别以.data 和.code 开始,以end结束。 end语句一般是整个程序的最后一条语句,end 语句后面跟的是起始标号,指出了程序执行的第 一条指令的位置 。 (6)跨行的语句 当源程序的某一语句过长,不利于书写和阅读时,可以用反斜杠(\)作为换行符,将这条语句分为几行来写。 3. 一个Win

文档评论(0)

zhuwo + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档