Fehler im codeFrame

x539
Windoof-User
Windoof-User
Beiträge: 30
Registriert: 24. Nov 2010 15:52

Fehler im codeFrame

Beitrag von x539 »

ich habe im code frame einen fehler entdeckt

ich gehe jetzt mal davon aus das es ok ist wenn ich den Patch hier poste

Code: Alles auswählen

diff --git a/toRoman_frame.asm b/toRoman_frame.asm
--- a/toRoman_frame.asm
+++ b/toRoman_frame.asm
@@ -18,7 +18,7 @@ main:
 # <-------------HIER IHR CODE---------------->
 # <-------------Ihr Ergebnis muss fuer die Ausgabe am Ende der Berechnung in %eax stehen------->

-	movl $LAENGE,%edx	# <-- LAENGE ersetzen durch Laenge des Ausgabestrings
+	movl LAENGE,%edx	# <-- LAENGE ersetzen durch Laenge des Ausgabestrings
     movl $STRING,%ecx	# <-- STRING ersetzen durch den Ergebnisstring
     movl $1,%ebx		#
     movl $4,%eax		# Ausgabe
„Reality is that which, when you stop believing in it, doesn't go away.“ Philip K. Dick

Benutzeravatar
zimpfer
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 144
Registriert: 15. Mär 2009 01:07

Re: Fehler im codeFrame

Beitrag von zimpfer »

Das hängt von der Implementierung ab.

Ich habe hier $LAENGE gewählt, da ich im .comm-Bereich eine feste Anzahl Bytes für das Ergebnis reserviert habe

mike
Erstie
Erstie
Beiträge: 16
Registriert: 6. Nov 2011 13:59

Re: Fehler im codeFrame

Beitrag von mike »

Hi,

bitte gib mal ein Codebeispiel an, bei dem ich mit

Code: Alles auswählen

movl $LAENGE, %edx
auch wirklich die Zahl in edx stehen habe. Ich habe es nicht hinbekommen.


Gruß
Mike

Benutzeravatar
zimpfer
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 144
Registriert: 15. Mär 2009 01:07

Re: Fehler im codeFrame

Beitrag von zimpfer »

mike hat geschrieben:Hi,

bitte gib mal ein Codebeispiel an, bei dem ich mit

Code: Alles auswählen

movl $LAENGE, %edx
auch wirklich die Zahl in edx stehen habe. Ich habe es nicht hinbekommen.


Gruß
Mike

movl $10, %edx

mike
Erstie
Erstie
Beiträge: 16
Registriert: 6. Nov 2011 13:59

Re: Fehler im codeFrame

Beitrag von mike »

Hi,

das war nicht meine Frage. Sondern in LAENGE steht 10. Wie bekomme ich den Wert davon in ein register indem ich $LEANGE benutze.
Grund ist, dass im Code-Konstrukt explizit

Code: Alles auswählen

movl $LAENGE, %edx
steht und ich keinen Weg habe, das so erfolgreich zu machen.

Benutzeravatar
zimpfer
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 144
Registriert: 15. Mär 2009 01:07

Re: Fehler im codeFrame

Beitrag von zimpfer »

Das ist ein System Call (sys_write), bei dem in edx die Länge des auszugebenden Strings und in ecx die Startadresse des Strings stehen muss:

http://bluemaster.iu.hio.no/edu/dark/li ... calls.html

danny
Mausschubser
Mausschubser
Beiträge: 51
Registriert: 17. Okt 2010 22:32

Re: Fehler im codeFrame

Beitrag von danny »

Ich habe das CodeFrame einfach verändert, denn ich denke es ist ja nicht Sinn der Sache sich sklavisch an dieses Gerüst zu halten, sondern es sollte nur zur Orientierung dienen. Hoffe ich zumindest mal :wink:

mike
Erstie
Erstie
Beiträge: 16
Registriert: 6. Nov 2011 13:59

Re: Fehler im codeFrame

Beitrag von mike »

Hi,

ich glaube ihr versteht mich falsch. Ich weis was es macht und was die Funktion braucht.
Meine Frage ist folgende:

Wir haben folgenden vorgegebenen Code:

Code: Alles auswählen

movl $LAENGE,%edx	# <-- LAENGE ersetzen durch Laenge des Ausgabestrings 
    movl $STRING,%ecx	# <-- STRING ersetzen durch den Ergebnisstring
    movl $1,%ebx		# 
    movl $4,%eax		# Ausgabe
    int $0x80			#
Das funktioniert aber nicht, weil nicht die echte Laenge sondern nur seine Addresse in edx geladen wird. Was muss ich also tun, ohne obigen Code zu ändern, damit in edx tatsächlich die Länge steht.


Gruß
Mike

radio_controlled
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 107
Registriert: 8. Okt 2010 20:31

Re: Fehler im codeFrame

Beitrag von radio_controlled »

Es ist wohl so gemeint, das LAENGE ersetzt werden soll
Oder du legst im .data segment eine variable an, die LAENGE heißt, dann geht es auch. Ich habe es nur geändert, weil es so mit der namensgebung nicht einheitlich aussieht und was soll da ein großgeschriebenes LAENGE im code??

Diese Variable ist dann natürlich im Speicher und in keinem Register, falls du sie benutzt solltest du daran denken

Bei STRING gilt natürlich dasselbe

Benutzeravatar
zimpfer
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 144
Registriert: 15. Mär 2009 01:07

Re: Fehler im codeFrame

Beitrag von zimpfer »

mike hat geschrieben:Hi,

ich glaube ihr versteht mich falsch. Ich weis was es macht und was die Funktion braucht.
Meine Frage ist folgende:

Wir haben folgenden vorgegebenen Code:

Code: Alles auswählen

movl $LAENGE,%edx	# <-- LAENGE ersetzen durch Laenge des Ausgabestrings 
    movl $STRING,%ecx	# <-- STRING ersetzen durch den Ergebnisstring
    movl $1,%ebx		# 
    movl $4,%eax		# Ausgabe
    int $0x80			#
Das funktioniert aber nicht, weil nicht die echte Laenge sondern nur seine Addresse in edx geladen wird. Was muss ich also tun, ohne obigen Code zu ändern, damit in edx tatsächlich die Länge steht.


Gruß
Mike

Achso, da hab ich dich falsch verstanden.
Die Antwort zu der Frage steht in meinem 1. Post in diesem Thread.
Ich habe für das Ergebnis eine feste Anzahl an Bytes reserviert im .comm-Bereich, sodass ich $LAENGE ersetzen kann dur $100.
radio_controlled hat geschrieben:Es ist wohl so gemeint, das LAENGE ersetzt werden soll
Oder du legst im .data segment eine variable an, die LAENGE heißt, dann geht es auch. Ich habe es nur geändert, weil es so mit der namensgebung nicht einheitlich aussieht und was soll da ein großgeschriebenes LAENGE im code??

Diese Variable ist dann natürlich im Speicher und in keinem Register, falls du sie benutzt solltest du daran denken

Bei STRING gilt natürlich dasselbe
es ist großgeschrieben, um zu betonen, dass es ersetzt werden soll

mike
Erstie
Erstie
Beiträge: 16
Registriert: 6. Nov 2011 13:59

Re: Fehler im codeFrame

Beitrag von mike »

Hi,

jetzt hab ich verstanden was du gemacht hast :D

Du deklarierst keine Variable "LAENGE" sondern schreibst den Wert $100 direkt in %edx rein.

Code: Alles auswählen

movl $100, %edx
Dann ist es verstanden^^


Gruß
Mike

Antworten

Zurück zu „Archiv“