Assembly MASM组装:如何制作程序?
我需要创建一个使用内置指令Assembly MASM组装:如何制作程序?,assembly,visual-studio-2012,masm,Assembly,Visual Studio 2012,Masm,我需要创建一个使用内置指令invoke而不是指令call的过程 因此,我需要知道我可以将原型放在哪里,我的定义,以及如何调用它?我不知道如何使用proto和通过快速调用调用调用它(除了64位模式的默认设置)。使用C库的32位平面模型独立asm代码示例: ; include C library if @Version EQ 611 ;if ml 6.11 includelib libc else
invoke
而不是指令call
的过程
因此,我需要知道我可以将原型放在哪里,我的定义,以及如何调用它?我不知道如何使用proto和通过快速调用调用调用它(除了64位模式的默认设置)。使用C库的32位平面模型独立asm代码示例:
; include C library
if @Version EQ 611 ;if ml 6.11
includelib libc
else ;else ml 7.0 or later
includelib msvcrtd
includelib oldnames
endif
.586p
.model flat,c
.data ; initialized data
var1 dd 012345678h
var2 dd 087654321h
.data? ;uninitialized data
.stack 4096
.code
example proto near c,arg1:dword,arg2:dword
main proc near
invoke example,var1,var2
xor eax,eax
ret
main endp
; argument names don't have to match proto
example proc near c,a1:dword,a2:dword
mov eax,a1
add eax,a2
ret
example endp
end
具有可变参数数(vararg)的Microsoft示例:
不知何故,MS往往会混淆它找到的所有东西,哪些汇编器支持这一点?我可以想象只有MASM?@Tommylee2k-invoke被添加到MASM 6.0(ml.exe)中,以及其他类似于“点”指令的东西,例如.if/.else/.endif/.while/.continue/.break。我不知道有任何其他汇编程序支持这一点。c附近是什么?@Advancedip-
near
意味着这是一个近(远)调用,在平面模型中,所有正常调用都是近的c
是语言类型,在这种情况下,链接器使用的任何公共符号都会有下划线前缀,因此main
将显示为链接器的\U main
。请看,我通过突出显示一些关键字和重新制定一些语法来改进问题。