N
Also nicht dass ich ein MASM-Profi waere, oder den Kram benutzen taete, aber augenscheinlich ist das, was der C++-Compiler da erstellt hat, schlicht Mist und syntaktisch falsch. KA, was der CL alles an Muell und Pseudo-Assembler schluckt - das macht es in MASM-Syntax noch lange nicht richtiger.
zB. die Fehler in Zeile 14 u. 16, bzw. 30 u. 36: Das sind AFAIK ungueltige Label-Name (bzw. hier Variablennamen).
Oder Zeile 15: Org kann - genau wie andere Daten oder Code (betrifft auch Zeilen 14, 16 und ggF. das include) - nicht ausserhalb eines Segments stehen.
Probier's mal hiermit (ungetestet) :
; Listing generated by Microsoft (R) Optimizing Compiler Version 14.00.50727.42
TITLE d:\Projects\hello\hello\main.c
.686P
.XMM
include listing.inc
.model flat
INCLUDELIB OLDNAMES
EXTRN @__security_check_cookie@4:PROC
EXTRN __imp__printf:PROC
EXTRN __imp__system:PROC
_DATA SEGMENT
SG_5 DB 'Hello World', 0aH, 00H
ORG $+3
SG_6 DB 'PAUSE', 00H
_DATA ENDS
PUBLIC _main
; Function compile flags: /Odtp
; File d:\projects\hello\hello\main.c
_TEXT SEGMENT
_main PROC
; 5 : {
push ebp
mov ebp, esp
; 6 : printf("Hello World\n");
push OFFSET SG_5
call DWORD PTR __imp__printf
add esp, 4
; 7 : system("PAUSE");
push OFFSET SG_6
call DWORD PTR __imp__system
add esp, 4
; 8 : }
xor eax, eax
pop ebp
ret 0
_main ENDP
_TEXT ENDS
END
@Ike: Wie meinen? Wenn dir dein Compiler zu schlecht optimiert, such' dir einen besseren. Im fertigen Assembleroutput deines Compilers zu Optimierungszwecken rum zu pfuschen ... bringts nicht so.