[Newb:] VC++ Inline Assembler findet 12 Fehler in code aus nem Buch
-
Ich hab grade angefangen Assembler zu lernen und mit dem C++ Inline Assembler Code aus meinem Buch (Assembler von Joachim Rohde und Marcus Roming) abgetippt und ausgeführt.
Hier ist der Code:void assembler() { __asm { .MODEL Small .STACK 100h; .DATA; Meldung DB "Hallo Welt$"; .CODE; Start: mov ax, @data; mov ds, ax; mov dx, OFFSEt Meldung; mov ah, 09h; int 21h; mov ah 4CH; int 21h; END Start } } int main() { assembler(); return 0; }
Die Fehler:
D:\Datein Daniel\C++ programmieren\Cardgame\asm\main.cpp(5) : error C2400: Inline-Assembler: Syntaxfehler in 'Opcode'; 'MODEL' gefunden
D:\Datein Daniel\C++ programmieren\Cardgame\asm\main.cpp(6) : error C2400: Inline-Assembler: Syntaxfehler in 'Opcode'; 'STACK' gefunden
D:\Datein Daniel\C++ programmieren\Cardgame\asm\main.cpp(7) : error C2400: Inline-Assembler: Syntaxfehler in 'Opcode'; 'DATA' gefunden
D:\Datein Daniel\C++ programmieren\Cardgame\asm\main.cpp(8) : error C2400: Inline-Assembler: Syntaxfehler in 'Opcode'; 'DB' gefunden
D:\Datein Daniel\C++ programmieren\Cardgame\asm\main.cpp(9) : error C2400: Inline-Assembler: Syntaxfehler in 'Opcode'; 'CODE' gefunden
D:\Datein Daniel\C++ programmieren\Cardgame\asm\main.cpp(10) : error C2018: Zeichen '0x40' unbekannt
D:\Datein Daniel\C++ programmieren\Cardgame\asm\main.cpp(11) : error C2443: Operanden unterschiedlicher Groesse
D:\Datein Daniel\C++ programmieren\Cardgame\asm\main.cpp(13) : error C2443: Operanden unterschiedlicher Groesse
D:\Datein Daniel\C++ programmieren\Cardgame\asm\main.cpp(15) : error C2414: Ungueltige Anzahl an Operanden
D:\Datein Daniel\C++ programmieren\Cardgame\asm\main.cpp(15) : error C2400: Inline-Assembler: Syntaxfehler in 'Zweiter Operand'; 'constant' gefunden
D:\Datein Daniel\C++ programmieren\Cardgame\asm\main.cpp(16) : error C2400: Inline-Assembler: Syntaxfehler in 'Opcode'; 'constant' gefunden
D:\Datein Daniel\C++ programmieren\Cardgame\asm\main.cpp(17) : error C2400: Inline-Assembler: Syntaxfehler in 'Opcode'; 'Start' gefundenWas ist falsch, bzw. was muss ich tun ums zum laufen zu bringen?
thx im voraus
-
lol. so geht das auf gar keinen fall. den code musst du seperat mit z.B. NASM oder TASM assemblieren. Du kannst nicht einfach das ganze Assembler-Programm als Inline-Assembler schreiben.
Die ganzen Anweisungen wie
.MODEL Small
.STACK 100h;
.DATA;
Meldung DB "Hallo Welt$';
.CODE;
END StartKannst du alle nicht benutzen.
Außerdem ist das DOS-Code. Das geht erst recht nicht mit Visual C++.
alles falsch gemacht
-
Da hat mein Vorredner schon irgendwie recht, allerdings ist der Code fuer MASM/TASM.
Das sollte doch eigentlich aber auch in dem Buch erwaehnt worden sein...
-
Ja, ich wusste nur nicht, dass es da einen Unterschied gibt.
-
Mensch, musst du mir so einen Schrecken einjagen? Und ich dachte schon, ich hätte einen gravierenden Fehler gemacht, den ich übersehen hätte