|
本帖最后由 wl1383838438 于 2020-4-26 17:49 编辑
.386;.386是告诉编译器我们使用得是80386得指令集,以为在32位得寄存器如eax ebx等,也可以选择.486 586p
;等指令 386p 586p是指特权指令
.model flat, stdcall;model是告诉编译器该程序得得模式,在win32汇编中你只能使用一个模式即flat
;模式 以为对于win32程序来说,内存在一个连续的4gb带下得段 无所谓大小得模式,
; 在stdcall告诉了编译器得调用凡是,stdcall制定了参数是从右边到左边得压入堆栈的,
;model
option casemap :none ; 指明了大小写得敏感
include windows.inc ;include指明了包含我们使用得那些头文件
include user32.inc
include kernel32.inc
includelib user32.lib;指向了我们需要使用得那些动态链接库
includelib kernel32.lib
.data;定义初始化得变量,定义了预定义得变量而.data?则定义了为初始化得变量,2者得区别在于
;.data?在定义变量是并不会占用.exe得大小,而是在程序执行时动态分配,所在在开始不指定初始值
;得数据时可以放在.data?中,
szCaption db '我的第一个汇编程序',0
szText db 'Hello World!',0
.data?;定义未初始化得变量
.const
;程序入口
.code ; 指明了接下来是代码段,我们写的代码都是放在这里后面得start制定了程序开始执行得语句
;程序中得exitprocess是不标准的win32 api 函数也就是退出线程,退出程序
start:和后面得end start是成对使用得
invoke MessageBox,NULL,addr szText,offset szCaption,MB_OK
invoke ExitProcess,0
end start;结束状态 |
上一篇: 硬编码复习笔记下一篇: 也是今天看见几位前辈的经历,突然有感而发。
|