chater03

 由于前面的内容涉及基础比较多,所以个人认为还是把基础打好,就整理一下当作复习。

 

3.11 定义模式

在程序的第一部分,定义语句:

.386

        .model flat,stdcall

        option casemap:none

作用:定义了程序使用的指令集,工作模式和格式。

1.    指定使用的指令集

.386 用于告诉编译器在本程序中使用的指令集。后面带P的伪指令则表示程序中可以使用特权指令。

附:Pentium MMX开始增加了MMX指令集,除了定义 .586 外,还要加 .mmx

 

2.model语句

作用:用来定义程序工作的模式,使用方法:

.model 内存模式[,语言模式] [,其他模式]

内存模式:我们一般使用 flat Win32程序使用的模式,代码和数据段使用同一个4GB段)

语言模式:即子程序的调用方式。 Stdcall 指出了调用子程序或Win32 API参数传递的次序堆栈平衡的方法。

3.option 语句

option语句定义的选项有很多,我们在win32程序中,只需定义 option casemapnone 这个语句定义了程序中的变量和子程序名是否对大小写敏感.

 

3.1.2 段的定义

1.段的概念

Win32汇编源程序中“分段”的概念实际上是把不同类型的数据或代码归类,再放到不同属性的内存页(也就是不同的“分段”)中,这中间不涉及使用不同的段选择器。

 

2.    数据段

.data 可读可写的已定义变量 。一般存放在_DATA节区。

.data? 可读可写未定义变量。一般存放_BSS节区。

.const 数据是一些常量。如果对.const段中的数据做了写操作的指令,会引起保护错误。(.code段也是可以读)

 

3.    代码段

所有的指令都必须写在代码段中,在可执行文件中,代码段一般是放在_TEXT节区中。Win32环境中的数据段不可执行,只有代码段有可执行的属性。对于工作在特权3的应用程序来说,(.code)段是不可写的。

 

4.    堆栈段

值得一提:堆栈段的内存属性是可读可写并且可以执行。

 

3.1.3程序结束和程序入口

End [开始地址]

 

End start

31.4 注释和换行

用分号(;)注释可以在一行的头部,也可以在一行的中间。

 

3.2 调用API

 

应用程序调用系统功能的一般过程1)系统提供功能模块并约定参数的定义方法,同时约定调用的方式,应用程序按照这个约定来调用系统功能。

 

Win32的系统功能模块放在Windows的动态连接库(DLL)中,DLL是一种Windows的可执行文件,采用和.exe文件同样的PE格式

 

Win32 API 的核心由3DLL提供:

1)  KERNEL32.DLL ——系统服务功能。包括内存管理,任务管理和动态链接等。

2)  GDI32.DLL——图形设备接口。利用VGADRV之类的显示设备驱动程序完成显示文本和矩形等功能。

3)  USER32.DLL——用户接口服务。建立窗口和传送消息等。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值