ASM 函数参数处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qingshuiaishui/article/details/83714281

函数参数传递一般通过栈,在此情形下,又有两种表现形式:

1、形式1定义

fn proc
; asm code list
fn endp

2、形式2定义

fn proc arg1:DWORD,arg2:DWORD
;asm code list
fn endp

 形式2与形式1在本质上是相同的,形式2可以转换为形式1。

区别在于,形式2情形下

1)编译器会自动绑定到参量arg1,arg2,这样更方便处理多参数函数。

2)编译器能自动生成调整esp指针的ret指令,相当于stdcall调用。

相当于如下代码:

fn proc
push ebp
mov ebp,esp

;arg1 = DOWRD PTR [ebp+8]
;arg2 = DWORD PTR [ebp+12]

;mov eax,arg1
;add eax,arg2

;asm code list

leave
ret 8
fn endp

综上述,可以看出形式2在一般情况下,编码更为方便,参数说明更为清晰,可以通过invoke调用(形式1是不可以通过invoke调用的)。

猜你喜欢

转载自blog.csdn.net/qingshuiaishui/article/details/83714281
ASM
今日推荐