Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly MASM组装:如何制作程序?_Assembly_Visual Studio 2012_Masm - Fatal编程技术网

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
。请看,我通过突出显示一些关键字和重新制定一些语法来改进问题。