本节课主要是编译连接一段写好的代码:
程序运行如下:
代码:
.386
.model flat,stdcall
option casemap:none
include C:\masm32\include\windows.inc
include C:\masm32\include\user32.inc
includelib C:\masm32\lib\user32.lib
include C:\masm32\include\kernel32.inc
includelib C:\masm32\lib\kernel32.lib
.data
szCaptiondb'我的第一个汇编程序',0
szText db'Hello World!',0
.code
start:
invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
invoke ExitProcess,0
end start
一、编译、链接程序
切换到源程序目录(当然你也可以在命令行显示加上你的源程序的路径)
编译: Ml /c /coff 1.asm
连接: Link /subsystem:windows 1.obj
当然你还可以用MASM32可视化来操作,我的系统是win7的,用MASM32先编译直接就给我报了个:error RC1110:could not open rsrc.rc
郁闷,然后就直接:Rebulid ALl ,这样就一切OK.不知道为什么。
二、模式定义
.386
.model flat,stdcall
option casemap:none
.386语句是汇编语言的伪指令,告诉编译器使用的是386指令集。比如还有.8086,.186,.286,.386/.386p,.
486/.486p等等。后面带p的表示程序中可以使用特仅指令,由于我们写的是Win32程序,不会用到特仅指令,所
以定义.386就够了,如果要编写驱动程序的话,就需要用到特仅指令,这时就要定义成.386p。
model语句的格式
.model 内存模式[,语言模式][,其他模式]
内存模式的定义影响最后生成的可执行文件,可执行文件的规模从小到大,可以有很多种类型
模 式 | 内 存 使 用 方 式 |
tiny small medium compact large huge flat | 用来建立 .com文件,所有的代码、数据和堆栈都在同一个64 KB段内 建立代码和数据分别用一个64 KB段的 .exe文件 代码段可以有多个64 KB段,数据段只有一个64 KB段 代码段只有一个64 KB段,数据段可以有多个64 KB段 代码段和数据段都可以有多个64 KB段 同large,并且数据段中的一个数组也可以超过64 KB Win32程序使用的模式,代码和数据段使用同一个4 GB段 |
Stdcall是函数调用约定:参数从右向左压栈,由被调用函数平衡堆栈
option casemap:none,程序中的大小写敏感
三、段的定义
.386
.model flat,stdcall
option casemap:none
<一些include语句>
.data
<一些字符串、变量定义>
.code
<代码>
<开始标号>
<其他语句>
end 开始标号
四、程序的入口与结束
.code
start:
end start
五、什么是API函数
API(Application Programming Interface,应用程序编程接口)
API函数包含在Windows系统目录下的动态连接库文件中(如User32.dll,GDI32.dll,Shell32.dll等等)。.
我们在软件开发的过程中,经常会使用到很API函数,比如MessageBox就是一个API函数,这个API函数
的功能就是弹出一个对话框。
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。