Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7365
  • 博文数量: 5
  • 博客积分: 180
  • 博客等级: 入伍新兵
  • 技术积分: 60
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-01 19:37
文章分类
文章存档

2011年(1)

2008年(4)

我的朋友
最近访客

分类: WINDOWS

2008-11-07 17:24:57

框架一:

.386
.MODEL Flat, STDCALL
.DATA
    <Your initialized data>
    ......
.DATA?
   <Your uninitialized data>
   ......
.CONST
   <Your constants>
   ......
.CODE
   <label>
    <Your code>
   .....
    end <label>

 

框架二:

.386
.model flat, stdcall
.data
.code
start:
end start

 

一..386:汇编语言伪指令,告诉MASM我们要用80386指令集。还可以使用 .486.586 但最安全的还是使用.386

 

二.. model flatstdcall:指定内存模式的伪指令,告诉MASM 使用的内存寻址模式,WIN32 只有一种内存模式,即 FLAT 模式,意思是"平坦"的内存模式,再没有64K的段大小限制,所有的 WIN32 的应用程序运行在一个连续、平坦、巨大的 4GB 的空间中。stdcall(可选)告诉MASM我们所用的参数传递约定。STDCALL 告诉编译器参数的传递约定。参数的传递约定是指参数传达时的顺序(从左到右或从右到左)和由谁恢复堆栈指针(调用者或被调用者)。在Win16下有两种约定:C PASCALC 约定规定参数传递顺序是从右到左,即最右边的参数最先压栈,由调用者恢复堆栈指针。

 

三..data?:未初始化变量部分。

 

四..data:初始化变量部分。

 

五..CONST 其中包括常量定义。这些常量在程序运行过程中是不能更改的。

 

六..CODE 代码"分段"

 

七.程序执行从start开始,end为结束。

 

八.应用程序并不需要以上所有的三个"分段",可以根据需要进行定义。

 

九.

用来唯一标识您的代码范围的标签,两个标签必须相同,应用程序的所有可执行代码必须在两个标签之间。

 

十.退出 Windows,则必须调用函数 ExitProcess。

 

十一.函数原型定义:

ExitProcess proto uExitCodeDWORD

定义格式:

FunctionName PROTO [ParameterName]DataType[ParameterName]DataType,……

即函数名后加伪指令PROTO(原型),后面是数据类型链表。

 

十二.调用函数(用callinvoke

例:call ExitProcess

或:invoke ExitProcess

 

十三.调用方法callinvoke的区别。

Call:当忘记把一个DWORD类型参数压入堆栈时,编译器和链接器不会报错,但在程序运行时将引起崩溃。

Invokeinvoke的调用方法比call 安全,即invoke调用会帮忙检查参数是否压栈。Invoke

是一个有参类型检查的调用语句。(推荐使用)

 

十四.Invoke调用语法

格式:INVOKE expression [arguments]

1expression 既可以是一个函数名也可以是一个函数指针。参数由逗号隔开。大多数API函数的原型放在头文件中。

2.头文件在文件夹MASM32/include下, 这些头文件的扩展名为INC,函数名和 DLL 中的函数名相同。

例:KERNEL32.LIB 引出的函数 ExitProcess的函数原形声明于kernel.inc中。

调用语句:invoke ExitProcess0

 

阅读(573) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~