Variable kopieren
-
OS = Operation System = Betriebssystem
Ich Tippe mal darauf das ihr Linux verwendet.
-
genau..
Ich habe UNIX-Ubuntu
-
genau..
Ich habe UNIX-Ubuntu
-
Ich nehme zusaetzlich an, ihr programmiert fuer x86...
Weisst du, wie du mit deinem Assembler statisch Speicher reservieren ("Variablen anlegen") kannst?
Dann gibt es beim x86 schoene String-Befehle. Die koenntest du dir mal naeher anschauen:
"rep" (wiederholt solange ZF=1 und (e)cx !=0 ) in Kombination mit
movs[b/w/d] (kopiert byte/word/dword von ds:(e)si nach es:(e)di und inkrementiert/dekrementiert (e)si/(e)di entsprechend.
scas[b/w/d] (vergleicht al/(e)ax mit b/w/d bei es:(e)di und inc/dec (e)di entsprechend)
-
Student123 schrieb:
Nun, Ein- und Ausgabe ist kein Problem(bis auf die Kleinbuchstaben). Aber wie funktioniert es mit dem kopieren und ersetzen?
Kann mir da jemand weiterhelfen?
Liebe Grüße,
Student
kopieren und ersetzen ist auch kein Problem, man liest aus dem Speicher, testet die Bedingung und schreibt die manipulierten Daten in den Speicher oder die Ausgabe zurück. Im Gegensatz zur Ein- und Ausgabe braucht man hier keinen Interrupt, aber Kenntnisse zum Thema Speicheraddressierung. Das ist aber nicht trivial, also einfach nochmal anschauen, was Prof schon erklärte, und abwarten, was wohl noch drankommt.
Ein gutes Nachschlagewerk für bestimmte Routinen und Anfängerfragen ist das Assemblerbuch von Backer.
( http://www.amazon.de/Assembler-Maschinennahes-Programmieren-Anfang-Windows-Programmierung/dp/3499612240/)Das Buch ist zwar hauptsächlich für 16bit-Dos geschrieben, aber das ist weitgehend egal.
-
Hallo,
entschuldigt bitte meine späte Antwort, ich hatte aber die letzte Zeit keinen Internetzugang. Danke für eure Beiträge. Jedoch verstehe ich immer noch nicht besonders viel..
Also wenn ich es beispielsweise in C machen müsste, würde ich es so machen, dass ich den String in eine Variable speichere. Anschließend würde ich sie in eine andere Variable kopieren, die Länge des Strings in eine dritte Variable speichern, die dritte Variable in eine for-Schleife packen und diese so lange laufen lassen, bis die Schleife bei der zweiten Variable(mit der Länge des Strings als integer) angekommen ist. Dabei würde ich jede einzelne Stelle mit dem Buchstaben x vergleichen, wenn dieser Vergleich auf "true" ist, würde ich sie mit einem u ersetzen.
Anschließend natürlich noch die Ausgabe..
Ich kann mir vorstellen, dass das Prinzip beim Assembler dasselbe ist. Nur ist der Code so ein Problem..
Würde mich freuen, wenn ihr mir da etwas auf die Sprünge helfen würdet.
Liebe Grüße..
-
Das Asm-Einführungsbuch vom Bartlett hilft sicher auch ein wenig auf die Sprünge:
http://savannah.nongnu.org/projects/pgubook/
-
Hey, danke dir für den Link. Den werde ich mir auch mal angucken. Mein Prof hat so Videos online gestellt, die sogenennaten "Online-Vorlesungen". Die gucke ich mir auch an..
Was mir aber gut weiterhelfen würde, wäre z.b. der progrmamcode zum obigen problem. das war nämlich die klausuraufgabe vom letzten jahr, die mti 2/3 (!) der klausur bewertet wurde.
ich weiß, ich nerve aber bald stehen klausuren vor der tür...
-
Hey,
ich habe es nun mal selbst probiert. Nach langem Grübeln habe ich mir gedacht, dass man doch einfach fürs Kopieren den mov-Befehl nutzen kann.
daher habe ich folgendes probiert:
movw LABEL1, LABEL2
Nun, ich bekomm aber folgende Fehlermeldung:
Error: too many memory references for `mov'
Kann mir jemand weiterhelfen?
-
mov kann als Operanden keine 2 Speicherzugriffe haben. Es gibt:
(s)reg, (s)reg
reg/mem, imm
mem, reg
reg, mem
(Intel-Reihenfolge)
Ansonsten habe ich zu meinem vorherigen Beitrag nichts hinzuzufuegen.