Win32汇编语言学习笔记>>第二课:编写第一个Win32汇编程序
2013-01-01 12:33
531 查看
本节课主要是编译连接一段写好的代码:
程序运行如下:
代码:
.386
.modelflat,stdcall
optioncasemap:none
includeC:\masm32\include\windows.inc
includeC:\masm32\include\user32.inc
includelibC:\masm32\lib\user32.lib
includeC:\masm32\include\kernel32.inc
includelibC:\masm32\lib\kernel32.lib
.data
szCaption db '我的第一个汇编程序',0
szTextdb 'HelloWorld!',0
.code
start:
invokeMessageBox,NULL,offsetszText,offsetszCaption,MB_OK
invokeExitProcess,0
endstart
一、编译、链接程序
切换到源程序目录(当然你也可以在命令行显示加上你的源程序的路径)
二、模式定义
.model内存模式[,语言模式][,其他模式]
内存模式的定义影响最后生成的可执行文件,可执行文件的规模从小到大,可以有很多种类型
三、段的定义
.386
.modelflat,stdcall
optioncasemap:none
<一些include语句>
.data
<一些字符串、变量定义>
.code
<代码>
<开始标号>
<其他语句>
end开始标号
四、程序的入口与结束
.code
start:
endstart
五、什么是API函数
API(ApplicationProgrammingInterface,应用程序编程接口)
API函数包含在Windows系统目录下的动态连接库文件中(如User32.dll,GDI32.dll,Shell32.dll等等)。.
我们在软件开发的过程中,经常会使用到很API函数,比如MessageBox就是一个API函数,这个API函数
的功能就是弹出一个对话框。
程序运行如下:
代码:
一、编译、链接程序
切换到源程序目录(当然你也可以在命令行显示加上你的源程序的路径)
编译:Ml/c/coff1.asm
连接:Link/subsystem:windows1.obj
当然你还可以用MASM32可视化来操作,我的系统是win7的,用MASM32先编译直接就给我报了个:errorRC1110:couldnotopenrsrc.rc
郁闷,然后就直接:RebulidALl,这样就一切OK.不知道为什么。
二、模式定义
.386
.modelflat,stdcall
optioncasemap:none
.386语句是汇编语言的伪指令,告诉编译器使用的是386指令集。比如还有.8086,.186,.286,.386/.386p,.
486/.486p等等。后面带p的表示程序中可以使用特仅指令,由于我们写的是Win32程序,不会用到特仅指令,所
以定义.386就够了,如果要编写驱动程序的话,就需要用到特仅指令,这时就要定义成.386p。
model语句的格式
.model内存模式[,语言模式][,其他模式]
内存模式的定义影响最后生成的可执行文件,可执行文件的规模从小到大,可以有很多种类型
模式 | 内存使用方式 |
tiny small medium compact large huge flat | 用来建立.com文件,所有的代码、数据和堆栈都在同一个64KB段内 建立代码和数据分别用一个64KB段的.exe文件 代码段可以有多个64KB段,数据段只有一个64KB段 代码段只有一个64KB段,数据段可以有多个64KB段 代码段和数据段都可以有多个64KB段 同large,并且数据段中的一个数组也可以超过64KB Win32程序使用的模式,代码和数据段使用同一个4GB段 |
Stdcall是函数调用约定:参数从右向左压栈,由被调用函数平衡堆栈
optioncasemap:none,程序中的大小写敏感
三、段的定义
.386
.modelflat,stdcall
optioncasemap:none
<一些include语句>
.data
<一些字符串、变量定义>
.code
<代码>
<开始标号>
<其他语句>
end开始标号
四、程序的入口与结束
.code
start:
endstart
五、什么是API函数
API(ApplicationProgrammingInterface,应用程序编程接口)
API函数包含在Windows系统目录下的动态连接库文件中(如User32.dll,GDI32.dll,Shell32.dll等等)。.
我们在软件开发的过程中,经常会使用到很API函数,比如MessageBox就是一个API函数,这个API函数
的功能就是弹出一个对话框。
相关文章推荐
- Jack's第一个Win32汇编程序HelloWorld
- win32汇编 屏幕截图保存BMP 学习笔记<第四篇>之生成BMP文件
- 【Virtual C++ 3D游戏开发】前置知识 三 <Win32窗口程序剖析>
- Win32汇编语言学习笔记>>第四课:进制
- VC6.0配置汇编环境并编写第一个Hello World程序
- 用Visual Studio 2008编写Win32汇编程序
- Linux汇编教程02:编写第一个汇编程序
- 谁能跟我编写一个程序(C语言)题目是编写一个函数计算sum(n)=1+2+3+。。。+n(n&gt;=1)
- win32汇编 屏幕截图保存BMP 学习笔记<第三篇>之odbg调试
- <<深入浅出MFC>>笔记1——Win32基本程序观念
- struts2入门-第一个例子==》第一个struts2实例——HelloWorld==》Struts2.0搭建和简单实例==>写一个Steuts2的经典入门案例,做了一个登陆程序作为入门例子
- 我的第一个Win32汇编程序 HelloWorld
- <<展现C#>> 前言(补充) 和第三章 第一个C#程序(修订)
- 一个正整数有可能可以表示为n(n>=2)个连续的正整数之和,如:15=1+2+3+4+5,15=4+5+6,15=7+8 请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。
- 第一个汇编程序学习"Hello world!"
- 我的第一个win32汇编程序
- LED实验&&I/O口实验--将 P0 作为输出口,连接 8 个 LED,编写程序,使 LED 循环点亮。(LED1 亮,其余灭->ED2 亮,其余灭……,如此循环 5 次后,进行全灭-全亮
- "hello,world!"win32汇编小程序
- 汇编-&gt;十进制到十六进制数转换的程序实现
- 编写高质量代码之改善C++程序语法篇3<内存管理 >