lea und mov befehl
-
#include <iostream> using namespace std; char* ShowText() { char* str1 = new char[20]; strcpy(str1, "Hello World"); __asm { mov eax, str1 } } int main() { cout << "Text" << ShowText() << endl; system("pause"); return 0; }
bei mov zeigt "Hello World", bei lea eax, str1 zeigt es leider nur ein fragezeigchen an.
-
JnZn558 schrieb:
#include <iostream> using namespace std; char* ShowText() { char* str1 = new char[20]; strcpy(str1, "Hello World"); __asm { mov eax, str1 } } int main() { cout << "Text" << ShowText() << endl; system("pause"); return 0; }
bei mov zeigt "Hello World", bei lea eax, str1 zeigt es leider nur ein fragezeigchen an.
mov weiss ich adresse in eax verschieben, was tut lea denn genau?
ach sorry, ich wollte bearbeiten, aus versehen hab ich zitat geklickt
-
LEA berechnet die effektive Adresse des zweiten Operanden und speichert diese im ersten Operanden. Der erste Operand muss ein Register sein. Der zweite Operand muss eine Speichervariable sein.
-
wieso funktioniert hier lea nicht?
-
lea liefert dir die Adresse von str1.
mov liefert dir den Inhalt von str1.Du willst die Adresse von dem String "Hello World" (eigentlich von dem Speicherbereich, der mit "new char[20]" erzeugt wurde) haben. Diese Adresse ist der Inhalt der Variable str1. Deswegen funktioniert mov und nicht lea.
-
aso, jez is es ok,ich hatte vergessen, in assembler hatte ich noch gelernt, mov ax, @data, da is die adresse gemeint, hab ich in c++ auch versucht, leider soll dieser @zeichen unbekannt sein
-
JnZn558 schrieb:
aso, jez is es ok,ich hatte vergessen, in assembler hatte ich noch gelernt, mov ax, @data, da is die adresse gemeint, hab ich in c++ auch versucht, leider soll dieser @zeichen unbekannt sein
Bei @data handelt es sich aber um die Adresse deinen Data-Segments. Ich weiß jetzt nicht wie das in Bezug zur falschen Verwendung von lea steht.
lea macht genau dass, was sein Name sagt: "load effective adress". Wenn du als Operanden deinen String angibst, lädst du folgerichtig die Adresse dieses Strings.
Prinzipiell liefert dir auch "mov eax, str1" die Adresse, da es sich bei str1 um ein Label und damit eine Adresse handelt. An die einzelnen Werte kommst du über "mov al, byte ptr [str1]"
-
FrEEzE2046 schrieb:
lea macht genau dass, was sein Name sagt: "load effective adress". Wenn du als Operanden deinen String angibst, lädst du folgerichtig die Adresse dieses Strings...
So einfach ist das
Und es gibt ja "nur" etwa 10 (
) Möglichkeiten, eine effektive Adresse anzugeben