MASM基本语法回顾,以及栈。

一、一些基本定义:

.386 ;表明需要使用386的CPU指令,也可以是.586等,若要使用Pentium MMX指令,在下一行添加.mmx申明。

.model flat,stdcall;flat:平坦内存模式,传参方式为WIN API模式。

.option casemap:none;源码区分大小写,因为WIN API是区分大小写的,因此这句声明是必须的。

 

.stack ;定义栈段,而在Win中栈是操作系统划分的,所以一般不定义。

.data;数据段,定义全局变量,此处定义的数据将被编译在可执行文件中。

.data?;数据段,定义全局变量,此处定义的数据不被编译,而在运行时动态存取。

.code;代码段

 

一个最简单的程序结构大致如下:

.386
.model:flat,stdcall
.option:casemap

include xxx.inc
includelib xxx.lib

.data
szTitle db ‘Title,here.’,0
szNumber dw 1,2,3,4
 
.data?
szGrid db 1024 dup(?)
.code

main:;program form here to start.
;...............
endp main

 

调用API:

1、winapi使用栈传递参数,其传递顺序为最后一个参数最先压入栈中。

2、call指令调用api。

3、使用MASM伪指令调用api:invoke 函数名 参数1,参数2,……

 

函数定义声明:

函数名 proto 参数1,参数2,……

 

子程序定义:

子程序名 proc

local 局部变量名:变量类型

……

子程序名 endp

 

标号定义:标号代表一段代码的起始位置。

标号名: 目的指令。

@@标号:当需要一个小跳转时(例如判断),可以使用@@作为标号名,在代码中使用@B向当前位置之前最近的@@标号跳转;@F向当前位置之后的最近一个@@标号跳转。

 

栈:

x86系列的栈是向下增长,栈顶在低地址处,栈底在高地址处。

转载于:https://www.cnblogs.com/nozer/articles/2310211.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值