我有这个ASM功能,需要4个参数。前两个参数按值传递,后两个参数通过引用传递。所以我正在使用它:
PUSH EBP
MOV EBP, ESP
SUB ESP, 20
MOV EAX, [EBP+8]
MOV EBX, [EBP+12]
LEA ECX, [EBP+16]
LEA EDX, [EBP+20]
PUSH EDX
PUSH ECX
PUSH EBX
PUSH EAX
CALL Function
LEAVE
RETN 20
(请注意,我使用VC的__asm
语句在C ++中使用此代码。)
但是在搜索使用LEA
将参数作为指针传递时(又通过引用)我发现:
[...] Note there are NO brackets in this line. Putting the square brackets around something means "get the contents of", so you were effectively defeating the LEA op. [...]
我希望通过引用传递EBP+16
和EBP+20
处的两个参数,但如果不能使用括号,我该怎么办呢?如果我不放它们,那么编译器会抛出错误(C2424
)。
提前致谢。
答案 0 :(得分:1)
尝试
MOV ECX, EBP+16
MOV EDX, EBP+20
答案 1 :(得分:1)
lea
有一种类型的操作,因此使用使编译器感到高兴的语法(例如,fasm
总是需要括号,而masm
要求它不在标签参数周围)。
请注意:
ebx
; push dword [ebp+xxx]
指令。