R
Mein Instinkt sagr mir, dass Du es nicht ganz richtig verstanden hast.
Unterscheide ganz strikt zwischen Windows und Linux! Wenn Du Dir nicht ganz sicher bist, ob eine Information im Netz auf dein Betriebssystem ausgerichtet ist, dann vergiss sie ganz schnell wieder. Wenn Du eine Frage stellst, dann gib immer genau das Betriebssystem an (z.B. "Win7 64-bit")
Unterscheide ganz strikt zwischen 64-bit und 32-bit. Auch hier sind die Unterschiede gewaltig. Es ist möglich, dass Du auf einem 64-bit-System ein 32-bit-Programm erstellst und laufen lässt. Wenn Du eine Frage stellst, dann gib immer genau die Zielgröße an (z.B. "64-bit Programm").
Der Stack-Pointer muss genau vor dem Call auf 16 ausgerichtet sein. In der Funktion kommt er dann wegen der gestackten Rücksprungadresse nicht mehr ausgerichtet an, aber das weiß die Funktion.
Wenn Du eine eigene Funktion aufrufst, dann kannst Du es machen, wie Du willst. Die Ausrichtung ist nur eine "calling convention", also eine Empfehlung.
Bei einem 64-bit-Programm werden die Argumente in Registern übergeben (bei Windows andere Register als bei Linux!). Windows verlangt darüber hinaus noch sogenannten "shadow space", also rerservierten Stackspeicher von 32 Byte direkt über der Rücksprungadresse. Dieser shadow space ist irgendwie übrig geblieben bei der Umstellung von stack- auf registerorientierte Übergabe und wird meistens nicht genutzt - er wird aber wichtig bei mehr als 4 Argumenten, weil das fünfte und jedes weitere Argument hinter dem shadow space auf dem Stack landet.
Die Ausrichtung ist nicht sooo wichtig. Wenn Du Anfänger bist, dann solltest Du sie erst anfangen zu beachten, wenn Dein Programm abstürzt. Bringe erst mal Visual Studio anständig zum Laufen, das ist schwer genug.
viele grüße
ralph