__cdecl, __stdcall i __fastcall są nazywane dokładnie tak samo?

Korzystam z Visual C ++ 2010 i MASM jako mojego asemblera x64.
To jest mój kod C ++:

// include directive
#include "stdafx.h"
// functions
extern "C" int Asm();
extern "C" int (convention) sum(int x, int y) { return x + y; }
// main function
int main()
{
    // print asm
    printf("Asm returned %d.\n", Asm());
    // get char, return
    _getch();
    return EXIT_SUCCESS;
}

I mój kod zespołu:

; external functions
extern sum : proc
; code segment
.code
Asm proc
    ; create shadow space
    sub rsp, 20o
    ; setup parameters
    mov ecx, 10
    mov edx, 15
    ; call
    call sum
    ; clean-up shadow space
    add rsp, 20o
    ; return
    ret
Asm endp
end

Powód, dla którego to robię, jest taki, że mogę nauczyć się różnych konwencji wywoływania. Stdcall wywołałby konwencję wywołania sumy i zmodyfikowałby kod asm, aby nazywał sumę sposobem „stdcall”. Kiedy to już zadziała, zrobię to, powiedzmy, szybko, a następnie nazywam je „szybkim”.

Ale spójrz teraz na mój kod montażowy. Kiedy używam tego kodu, bez względu na to, czy suma jest stdcall, fastcall czy cdecl, kompiluje się, wykonuje poprawnie i drukuje 25 jako sumę.

Moje pytanie: jak i dlaczego wszystkie __cdecl, __stdcall i __fastcall mogą być nazywane dokładnie tak samo?

questionAnswers(2)

yourAnswerToTheQuestion