Kein Problem.
Gutes x86-Assembler-Tutorial?
-
-
-
Öhm... Ich habe da noch ein Problem...
Das hier:
funktioniert leider nicht... Liegt das eventuell daran, dass die Adresse von "Daten" als absolut angesehen wird und ich den Code an eine dynamische Position im RAM lade? Wie könnte ich das zum Laufen bringen?
Gruß
Jonathan -
Klappt .data vor .code auch nicht?
-
Nein... Ich bekomme immer einen Fehler mit "Schreiben von Adresse 00000010"...
-
Ach so, es geht um PIC-Programmierung... Sorry, da bin ich DAU pur.
-
Zitat von p. specht;884444
Ach so, es geht um PIC-Programmierung... Sorry, da bin ich DAU pur.
Hä? Wer hat das denn behauptet??? (meinst Du vllt. den Beitrag "Ach, ein PIC-ler"?)
Ich möchte hier "einfach" nur auf einem PC programmieren - x86 Assembler eben - und es scheitert am Ausführen in XProfan...
Gruß
Jonathan -
-
Oder über Register:
mov eax, 123
mov Daten, eaxOder mit lea:
lea edx, Daten
mov eax, 123
mov [edx], eax -
Eure drei Beispiele steigen leider alle mit einer Meldung "Schreiben von Adresse xxxxxxxx" aus...
Aber ich habe jetzt eine Lösung gefunden:Code
Alles anzeigen.model flat, stdcall .code PUSHF PUSH eax PUSH ebx CALL Dummy dd 0 Dummy: POP eax MOV [eax], 11 MOV [eax+1], 22 MOV [eax+2], 33 MOV [eax+3], 44 POP ebx POP eax POPF RET 0 END
Ist zwar Getrickse hoch zehn, geht aber...
Danke für's "Mitraten"
Gruß Jonathan -
Sag das doch, dass du Bytes kopieren willst.
Das geht üblicherweise so:lea edx, Daten
mov al, 11
mov [edx], al
mov al, 22
mov [edx+1], al
mov al, 33
mov [edx+2], al
mov al, 44
mov [edx+3], alIch würds so mit deiner Technik nicht verwenden. Ohne Daten-Section artet das bei größeren Sachen ruckzuck im Chaos aus. übrigens hab ich selber bislang noch nie pushf benutzen müssen...
-
Zitat von Frabbing;884500
Sag das doch, dass du Bytes kopieren willst.
Das geht üblicherweise so:
Ja, üblicherweise... Aber es ist ja eigentlich nicht üblich, Code irgendwo in den RAM zu laden und diesen dann anzuspringen... Gibt leider den selben Fehler wie immer. Ich glaube, die Adresse wird vom Anfang des XProfan-Speichers aus gerechnet - und wenn der Code dann irgendwo anders steht kracht's natürlich :|. Deshalb muss ich wohl bei meinem Getrickse bleiben...
Gruß
Jonathan -
Da hast du es mit dem XProfan-Inline-Assembler XPIA aber leichter.
-
Zitat von Frabbing;884546
Da hast du es mit dem XProfan-Inline-Assembler XPIA aber leichter.
Ja - sobald Weihnachten vor der Tür steht... (XProfan X2 - *freu* :D)
Gruß
Jonathan -
XPIA funkt aber schon ab XProfan 8...
-
... solange nämlich XProfan mit Compiler ProfComp.exe kommt, geht der Freeware-Preprocessor XPIA auch und erlaubt mit den Befehlen AsmStart und AsmEnd Inline-Assemblercode in XProfan-Texten. Compiler JWasm samt Linker wird mit XPIA gleich mitinstalliert, dessen Letztversion samt diversen Source-Beispielen gibt es stets hier.
-
Genau. :019:
-
Auf dass es anderen nicht so ergehe wie mir, nämlich über eine Woche lang nach der Bedeutung des Befehls 'm2m' zu suchen, der in vielen Assemblercode-Beispielen vorkommt aber in keinem Intel-Handbuch, hier die Erklärung (gefunden in masm32.chm) aus dieser Quelle:
Codem2m var2, var1 ; Speicherstelle var1 nach var2 kopieren: Kopiert ein DWORD (DoubleWord, also 4 Byte) aus einer Speicherstelle in eine andere Speicherstelle im Memory. Da die Hardware von x86 Prozessoren das nicht unterstützt, handelt es sich um ein Makro, das ähnlich wie MOV anzuwenden ist, wobei aber beide Argumente Registerstellen bzw. Variablenbezeichner sein dürfen. Die aktuelle Version von M2M 'pusht' den Wert von var 1 auf den Stack und 'popt' ihn nach var2.
-
Hättest mal fragen sollen.
m2m =
Push register
Pop Register -
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!