inline assembler mit Borland compiller
-
Hallo,
ich verwende den Borland compiller Version 5.5
Den habe ich auf C:\Borland installiert.
Nun habe ich folgendes kleines Programm geschrieben:#include <iostream> using namespace std; int main() { int a=5; //integer var. a=5 int b=6; //integer var. b=6 int c; //integer var. c asm add c, a //Benutze asm... asm add c, b //Benutze asm... cout<<c<<endl<<endl; //Ausgabe... system("pause"); //warten... return 0; }
ich der Eingabeaufforderung von Win habe ich dann folgendes Eingegeben:
bcc32.exe -Ic:\borland\bcc55\include -Lc:\borland\bcc55\lib c:\borland\code\asm.cpp
(Habe das Programm als asm.cpp im Ordner "Code" abgespeichert)
Nun drück' ich Enter und erhalte folgenden Fehler:Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland c:\borland\code\asm.cpp: Warning W8002 c:\borland\code\asm.cpp 10: Restarting compile using assembly in function main() Turbo Assembler Version 5.3 Copyright (c) 1988, 2000 Inprise Corporation Assembling file: asm.ASM **Error** asm.ASM(31) Illegal memory reference **Error** asm.ASM(32) Illegal memory reference Error messages: 2 Warning messages: None Passes: 1
Wo liegt der Fehler? ich verstehe das nicht, wenn ich da statt a,b oder c z.B. ax hinschreibe geht es, nun möchte ich aber in meinem Programm die C++-Variablen (a,b,c) im asm verwenden.
Ich weiß, dass ich das auch ohne asm machen könnte, aber dies war als Übung gedach, aber nun komme ich nicht weiter.Grüße...
-
So habs jetzt doch hinbekommen..... muss man da die Register verwenden?
#include <iostream> using namespace std; int main() { int a=5; //integer var. a=5 int b=6; //integer var. b=6 int c; //integer var. c asm { mov ecx, a //Benutze asm... mov eax, b add ecx, eax mov c, ecx } cout<<c<<endl<<endl; //Ausgabe... system("pause"); //warten... return 0; }
So gehts jedenfalls
Gruß
-
Hi,
'add' geht auf jeden Fall auch mit Speicheradressen.
Was ist denn, wenbn du c=0 setzt. Vielleicht reserviert der Kompiler sonst keinen Platz, weil c nicht gebraucht wird.
Oder muss die Syntax vielleicht soadd [a], b
heissen?
Also die Adressen von a als Source?Probier mal aus.
-
also, folgendes geht nicht:
#include <iostream> using namespace std; int main() { int a=5; //integer var. a=5 int b=6; //integer var. b=6 int c=0; //integer var. c=0 //asm... asm add [c], a asm add [c], b cout<<c<<endl<<endl; //Ausgabe... system("pause"); //warten... return 0; }
Da kommt diese Fehlermeldung:
C:\Borland\BCC55\Bin>bcc32 -Ic:\borland\bcc55\include -Lc:\borland\bcc55\lib -nc:\borland\code c:\borland\code\asm.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
c:\borland\code\asm.cpp:
Warning W8002 c:\borland\code\asm.cpp 11: Restarting compile using assembly in function main()
Turbo Assembler Version 5.3 Copyright (c) 1988, 2000 Inprise CorporationAssembling file: c:\borland\code\asm.ASM to C:\BORLAND\CODE\asm.obj
**Error** c:\borland\code\asm.ASM(33) Illegal memory reference
**Error** c:\borland\code\asm.ASM(34) Illegal memory reference
Error messages: 2
Warning messages: None
Passes: 1dann kann ich wohl nur die Register (z.B. eax) mit dem add-Befehl verwenden?
Gruß