汇编proto、proc、invoke伪指令与函数声明、函数定义、函数调用
来源:互联网 发布:数据标准咨询公司 编辑:程序博客网 时间:2024/05/20 13:12
一、proto伪指令–函数声明
功能和高级语言中的函数声明一样,在代码最前面写函数声明,在后面写函数定义
proto伪指令的格式
函数名 proto [距离] [语言] [参数1]:数据类型,[参数2]:数据类型,……代码示例:
Asm_Function_1 proto stdcall arg1:dword,arg2:dword
一些注意事项
- 32位汇编不需要指定距离
- 可以指定语言也可也不指定,直接写参数,这里的语言就是和调用约定对等的。写“C”就是cdecl调用约定,写“stdcall”就是stdcall调用约定
- proto指令、距离、语言和参数之间用空格隔开
- 在参数与参数之间用“,”隔开
- 在参数与参数对应的数据类型之间用“:”隔开
- 可以不用写参数名称,但必须要写上数据类型和“:”
二、proc伪指令–函数定义
使用proto指令用来函数声明,使用proc函数用来函数定义。使用规则和proto指令一样
代码示例:
proc stdcall arg1:dword,arg2:dword 函数体代码块...Asm_Function_1 endp
注意事项:
- 函数定义语句和proto一样,写完函数体代码之后需要以
[函数名] endp
结束函数定义 - 但proc和proto搭配使用时,proto可以省略参数名,但proc不能省略。(和C中的规则一模一样)
- 函数定义语句和proto一样,写完函数体代码之后需要以
三、invoke伪指令–函数调用
使用invoke伪指令会帮你完成参数校检和压参操作,也就是说不用写压参的push指令。直接和高级语言一样直接调用函数即可
- invoke伪指令的格式
invoke 函数名[,参数1][,参数2]…… 代码示例:
invoke Asm_Function_1,100,0x100
- 注意事项:
- 函数名称和参数,参数和参数之间都用 空格 隔开
四、测试代码
.386.MODEL FLAT, C .DATA.CODE;------------------------------------------------------;函数声明Asm_Function_1 proto stdcall :dword,:dword;------------------------------------------------------;主函数main_proc PROC ;函数调用 invoke Asm_Function_1,100,100h mov edx,eaxmain_proc ENDP;------------------------------------------------------;函数定义,实现简单功能 返回 arg1 + arg2 的值Asm_Function_1 PROC stdcall arg1:dword,arg2:dword mov eax,arg1 add eax,arg2 ret 8Asm_Function_1 endpEND
阅读全文
0 0
- 汇编proto、proc、invoke伪指令与函数声明、函数定义、函数调用
- 函数定义与声明
- C++函数声明与定义
- C++函数声明与定义
- 变量、函数声明与定义
- 函数声明与函数定义的参数
- C++ 函数声明、定义与调用的文件管理
- 分析函数调用的汇编指令
- 函数声明与调用问题
- 函数的声明与调用
- INVOKE ADDR PROC PROTO
- 函数&变量_声明、定义、调用\引用
- 函数的声明、定义和调用
- iOSBlock函数声明定义以及调用等
- “函数声明”、“函数原型”与“函数定义”辨析
- “函数声明”、“函数原型”与“函数定义”辨析
- “函数声明”、“函数原型”与“函数定义”辨析
- 变量与函数的声明与定义
- HDOJ HDU 1050 Moving Tables
- centos7下安装lua-5.3.4
- JetBrains系列IDE配置快速输入模块示例(以Android Stdio为例)
- POJ2010 二分答案
- 【学习笔记】不定长数组输入
- 汇编proto、proc、invoke伪指令与函数声明、函数定义、函数调用
- 【crontab】“bad minute”及“errors in crontab file, can't install”错误处理
- js拖动窗口
- sql 整理积累
- Intellij IDEA 2017创建第一个Struts2程序
- mysql中You can't specify target table for update in FROM clause错误
- 更深一步的理解javaScript“闭包”
- bzoj3531 [Sdoi2014]旅行(树链剖分+动态开点线段树)
- FAT32文件系统的FAT表分析(二)