Assembler in C++
-
In der MSDN steht, dass man den ASM Code einfach in __asm { ... } einfügen muss... funkt. aber nicht. ???
#include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { __asm { Flaeche dw ? Laenge db 50 Breite db 60 mov al, Laenge mul Breite mov Flaeche, ax } return 0; }
error C2400: Inline-Assembler: Syntaxfehler in 'Opcode'; 'dw' gefunden
error C2400: Inline-Assembler: Syntaxfehler in 'Opcode'; 'db' gefunden
error C2400: Inline-Assembler: Syntaxfehler in 'Opcode'; 'db' gefunden
error C2443: Operanden unterschiedlicher Größe
error C2443: Operanden unterschiedlicher Größe
-
sieht so aus als ob man keine daten mit inline asm definieren kann.
versuch aber mal so:int flaeche(short l,short b) { __asm { xor eax,eax xor ebx,ebx mov ax,l mov bx,b mul bx }; };
sollte funktionieren
-
ist mir auch schon aufgefallen... eigentlich komisch
wollte deshalb vor __asm {...} die variablen als DWORD deklarieren.
funkt aber nicht, da der typ DWORD nicht erkannt wird.
welche header-datei muss ich dafür einbinden?
-
windows.h bzw. windef.h
-
btw. DWORD == unsigned long
-
db/dw/dd sind im grunde überflüssig. falls du daten deklarieren willst, kannst du dieses auch in C++ machen - static.
falls du opcodes einfügen willst, die der assembler nicht kennst, kannst du emit benutzen.
ganz nebenbei gesagt funktioniert dein code ohnehin nicht richtig.
-
hab die windows.h und jetzt sogar die windef.h eingebunden.
trotzdem wird DWORD nicht erkannt!?
oder muss ich DWORD selbst über die typedef definieren?
-
Was sollte an dem Code denn nicht funktionieren?
-
smartina schrieb:
Was sollte an dem Code denn nicht funktionieren?
fehler von mir. er müsste an sich funktionieren, wenn die variablen korrekt definiert sind.
-
ok, also das mit dem DWORD erkennt der compiler (oder linker?) auf jeden fall immer noch nicht! was soll ich tun?
-
smartina schrieb:
ok, also das mit dem DWORD erkennt der compiler (oder linker?) auf jeden fall immer noch nicht! was soll ich tun?
unsigned long verwenden.
Kann aber eigentlich nicht sein; in windows.h ist DWORD mit Sicherheit included.
Moritz
-
kann mich eigentlich nur audacia anschliessen, aber wenn nicht klappt definier dir halt dein eigenes DWORD:
typedef unsigned long DWORD;
(ist auch so in der windef.h drin)