;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;模式和源程序格式定义段
;
.386 ;伪指令.386,用于告诉编译器本程序中使用的指令集,如果后面带有字母p, 则表示程序中可以使用特权指令
;
.model flat, stdcall ;用于定程序的工作模式,使用方法位:
; .model 内存模式[,语言模式][,其他模式]
;flat 位WIN32程序是用的内存模式,代码和数据段使用同一个4GB段
;如果定义了 .model flat, MASM自动为各段寄存器做如下定义:
;ASSUME cs:FLAT, ds:FLAT, ss:FLAT, es:FLAT, fs:ERROR, gs:ERROR, 也就是说CS、DS、SS、ES默认使用平坦模式,
;而FS、GS默认不使用。如果需要使用它们,只需在使用前声明一下即可:
;ASSUME fs:nothing, gs:nothing 或者 fs:FLAT, gs:FLAT
; stdcall 为语言模式,表示:
; 1. 参数从右向左压入堆栈
; 2. 由被调用函数负责清理堆栈
option casemap:none ;这个选项定义了程序中的变量和子程序名是否对大小写敏感。由于Win32 API 名称区分大小写,所以必须制定这个选项。
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;Include
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;data segment
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
szCaption db "A message Bos", 0
szMessage db "Hello world!",0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;stack
;在Win32 程序中不必定义堆栈段,系统会自动分配堆栈空间
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;code segment
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
start:
invoke MessageBox, NULL, offset szMessage, offset szCaption, MB_OK
invoke ExitProcess, NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
Win32 MASM汇编程序基本结构
最新推荐文章于 2021-12-15 14:53:18 发布