Win32汇编基本编程框架
Win32汇编编程框架如下;
.386
.model flat,stdcall
option casemap:none
<一些include语句>
.stack [堆栈段的大小]
.data
<一些初始化过的变量定义>
.data?
<一些没有初始化过的变量定义>
.const
<一些常量定义>
.code
<代码>
<开始标号>
<其它语句>
end 开始标号
开头几句解释如下;
指令集
.386 语句是汇编语句的伪指令,类似指令有:.8086 、 .186 、.286 、.386/.386p 、 .486/.486p 和 .586/.586p 用于告诉编译器在本程序中使用的指令集。
后面带p的伪指令则表示程序中可以使用特权指令,如:mov cr0,eax 这一类指令必须在特权极0上运行。
如果我们要写的程序是VxD等驱动程序,中间要用到特权指令,那么必须定义.386p ,在应用程序级别的Win32编程中,程序都是运行在优先级3上,不会用到特权指令,只需定义 .386就够了。
如果程序要用到80486处理器 或 Pentium处理器的指令,则必须定义 .486 或 .586。
如果使用了MMX指令,除了定义 .586之外,还要 .mmx伪指令。
其它一些简单程序,.386就可以了。
.model 语句 模式定义
.model 内存模式 [,语言模式] [,其它模式] (用中括号括起来的是可选)
内存模式的定义影响最后生成的可执行文件,执行文件的规模从小到大,可以很多类型。
语言模式即子程序调用方式,它指出了调用子程序或Win32 API时参数传递的次序和堆栈平衡的方法。
_ stdcall调用——是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式(倒序压入),被调用函数 自身在返回前清空堆栈。Win32 API 都采用这种调用方式。
_cdecl 调用 ——是C/C++的缺省调用方式,参数从右到左的压栈方式,调用者 清空堆栈。 所以产生的可执行文件大小会比调用_stdcall函数大。
option 语句
option casemap:none 的意义是告诉编译器程序中变量名和子程序名是否对大小写敏感。 none 对大小写敏感。
Win32 API的函数名称本质是区分大小写的,所以必须指定这个选项。
下面是最基本Win32汇编示例;
要先保存为.asm文件才能构建;.asm文件保存在masm32目录下,非bin目录下,masm32环境自己处理;
程序啥也不干,调用 ExitProcess 直接退出;
.386
.model flat,stdcall
option casemap:noneinclude s:\masm32\include\windows.inc
include s:\masm32\include\kernel32.inc
includelib s:\masm32\lib\kernel32.lib.data
.code
start:
invoke ExitProcess,0
end start
.model flat,stdcall
这句如果把逗号半角写成全角,将出现错误:
error A2119: language type must be specified
invoke ExitProcess,0
这句如果把逗号半角写成全角,将出现错误:
error A2044: invalid character in file
option casemap:none
这句如果把冒号半角写成全角,将出现如下面多个错误:
windows.inc(156) : error A2004: symbol type conflict : bool
A2004错误见此:
https://blog.csdn.net/bcbobo21cn/article/details/108494279
Win32汇编基本编程框架相关推荐
- Win32汇编数组编程图解
1 声明并初始化数组 .386 .model flat, stdcall option casemap :noneinclude S:\masm32\include\windows.inc inclu ...
- 新版WIN32汇编开发环境介绍及RadAsm简明教程
写在前面的话: 在准备做教程的时候去查资料,关于WIN32下汇编方面的,本来想找些现成的拿到教程里用下,但发现貌似只有一篇,是2005年时jhkdiy写的,而且翻来翻去发现所有图片也都失效了.所以准备 ...
- Win32汇编学习——windows汇编语法(小甲鱼教程)
Win32汇编学习--windows汇编语法(小甲鱼教程) 1)指令集 .386 语句是汇编语句的伪指令,类似指令有:.8086 . .186 ..286 ..386/.386p . .486/ ...
- 网络与服务器编程框架库 acl_3.0.13 发布
2019独角兽企业重金招聘Python工程师标准>>> acl 3.0.13 版本 (项目主页:https://sourceforge.net/projects/acl/,技术文章主 ...
- 选择“Win32汇编”的三大理由?
选择Win32汇编的理由是什么呢? 在DOS时代,学习汇编就是学习系统底层编程的代名词,仅要成为一名入门级的汇编程序员,就需要学习从CPU结构.CPU工作方式.各种硬件的编程方法到DOS工作方式等范围 ...
- win32汇编实现拼接SQL语句
字符串合并,在汇编语言,一般是用loop循环和cx寄存器,自己编程实现: 如果是win32汇编,可以使用movsb指令: 一般开发应用程序都会碰到拼接SQL语句,在C#这些语言用字符串连接的加号就可以 ...
- Win32汇编扩展教程
Win32汇编扩展教程 第一课 Win32 扩展消息框示例 在罗哥云琳的Win32消息框示例基础上,做一个扩展例子. 首先弹出消息框,2个按钮,YESNO; 点击NO,程序结束:点击YES,弹出第二个 ...
- 网络与服务器编程框架库 acl_3.0.12 发布
2019独角兽企业重金招聘Python工程师标准>>> acl 3.0.12 版本 (项目主页:https://sourceforge.net/projects/acl/, 技术文 ...
- C指针原理(23)-win32汇编及.NET调试
2018-12-28 20:36:07 在WINDOWS系统能用到汇编的机会不多,基本都可以用C或C++代劳,更何况现在MICROSOFT的Visual Studio 系列工具非常强大,WINDOWS ...
最新文章
- 百万级访问量网站的技术准备工作[转帖]
- 基于linux操作系统Mysql的基本操作(一)
- 关于使用REST API
- Jackson 框架使用说明,轻易转换JSON【转】
- 如何将目录下几百个lib加入到vs项目属性下的链接器
- sum() over()函数使用
- fir.im分发平台 二维码合并
- 【被网上巨坑了】 win10+php5.6-ts-vc11-x64配置imagick的经历
- Java PC端微信、支付宝扫码支付(一)
- 广义线性模型的计算机应用技术学院,SPSS数据分析—广义线性模型
- 安卓手机解锁密码忘了如何解锁
- java-php-net-python-税务申报系统ssh计算机毕业设计程序
- Windows中软件的安装
- halcon变量,图像与C++的一些转换(未完待续)
- 苏亚星显示没有登录的服务器,VOD直播工具使用 直播站管理工具的使用 苏亚星VOD点播(直播)系统.doc...
- 自制PCB双面板绝佳方法
- CDH /HDP 何去何从?
- 输入半径,计算圆的面积
- c语言与python的语法区别_来自python的C语言(基本语法),从,Python,看,基础,篇
- 操作简单,易上手的三款在线ps处理工具
热门文章
- @Value获取值和@ConfigurationProperties获取值比较||配置文件注入值数据校验
- 赋值运算符||位运算符||三元运算符
- JDK、J2EE、J2SE、J2ME的区别
- Python 技术篇-httpClient库连接服务器发送请求解析响应实例演示,No module named ‘httplib‘问题解决方法
- fitype拟合多参数函数和遗传算法拟合多参数函数
- 解决MPLAB X IDE的文件注释出现乱码的问题
- 【生活】1024,快乐
- [YTU]_2877(结构体---职工信息结构体)
- flipdim--按指定维数翻转矩阵
- buildPyramid函数