Hausübung 13 Aufgabe 2

no55oriw
Neuling
Neuling
Beiträge: 8
Registriert: 4. Dez 2011 11:56

Hausübung 13 Aufgabe 2

Beitrag von no55oriw »

Hallo,
ich wollte den code gern mal ausprobieren, aber es geht auf clientssh1 und ssh2 nicht und auch ältere Assembler-Programme gehen nicht mehr.
Ich würde zu Übungszwecken auch gern weiterhin Assembler ausprobieren dürfen.

Woran liegt es?

Gruß
Stephan

arne.lottmann
Mausschubser
Mausschubser
Beiträge: 99
Registriert: 4. Okt 2010 16:25

Re: Hausübung 13 Aufgabe 2

Beitrag von arne.lottmann »

"Geht nicht mehr" ist eine der absolut beliebtesten Fehlermeldungen ;). Kann dir theoretisch keiner sagen, der nicht an deinem Account sitzt.

Glücklicherweise ist die Antwort auf diese spezielle Frage einfach zu beantworten: Auf den SSH-Rechnern läuft ein 64bit-System, während es in GdI3 immer um 32bit-Assembler geht. Das einzige, was du ändern musst, ist der gcc-Befehl zum Kompilieren der .o zur ausführbaren Datei:

Code: Alles auswählen

$ gcc -o "MyFile" -m32 "MyFile.o"
wobei bewirkt, dass das Programm für die i386-Architektur (sprich 32bit) kompiliert wird. Ausführen geht dann wie gewohnt.

Beim nächsten Problem: Detailliertere Fehlermeldung bitte :). Z.B. die Ausgabe vom Programm posten, etc.

mw1039
Computerversteher
Computerversteher
Beiträge: 346
Registriert: 12. Apr 2011 12:18

Re: Hausübung 13 Aufgabe 2

Beitrag von mw1039 »

Ursache ist, dass die Rechner im Laufe des Semesters durch die RBG auf 64-Bit umgestellt wurden. Wir hatten darauf eingewirkt, dass die Rechner noch ausreichend lange auf 32-Bit bleiben. Aber wahrscheinlich klappt es ja auch mit arne.lottmann's Tipp.

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

Re: Hausübung 13 Aufgabe 2

Beitrag von danny »

Bei uns funktioniert nichtmal ein absolutes Minimalbeispiel (Coderahmen aus der Hausübung ergänzt um einen fldl-Befehl):

Code: Alles auswählen

.data
intout: .string "Ergebnis %f\n"
a:	.float 2.3
.text
.globl main
main:
	fldl a

	fstpl (%esp)
	pushl $intout
	call printf
# Exit
movl $1, %eax
int $0x80
compiliert/gelinkt mittels:

Code: Alles auswählen

yasm -f elf32 -p gas gdi3hue13.asm
gcc gdi3hue13.o -m32 -o gdi3hue13
Die Ausgabe ist dann allerdings:

Code: Alles auswählen

$ ./gdi3hue13 
Ergebnis 0.000000

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

Re: Hausübung 13 Aufgabe 2

Beitrag von danny »

Wir haben jetzt noch ein bisschen rumgespielt und herausgefunden, dass trotz Angabe von elf32 und m32 64-Bit Zahlen benutzt werden.
Ändert man also den Datentyp der Zahlen von .float nach .double funktioniert es.

no55oriw
Neuling
Neuling
Beiträge: 8
Registriert: 4. Dez 2011 11:56

Re: Hausübung 13 Aufgabe 2

Beitrag von no55oriw »

Das Problem mit alten und neuen Dateien tritt nur in Zusammenhang mit den Floating-Point Befehlen auf.

Alte Assembler-Programme ohne Floating-Point Befehle funktionieren wie gehabt und lassen sich compilieren.

Sobald aber auch nur ein Floating-Point Befehl vorhanden ist, gibt es schon beim "yasm" eine Fehlermeldung!!!!
:evil:

Ich hab auch mal .float auf .double geändert und immer noch ein Problem schon beim yasm. Auch bei alten Programmen. :x

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

Re: Hausübung 13 Aufgabe 2

Beitrag von danny »

Hast du auch "l"s am Ende der Befehle? Also fldl anstatt fld?

simon.r
Mausschubser
Mausschubser
Beiträge: 59
Registriert: 4. Okt 2010 16:13

Re: Hausübung 13 Aufgabe 2

Beitrag von simon.r »

Eventuell muss man bei yasm noch ein "-mx86" angeben? Obwohl es bei uns auf dem clientssh auch ohne läuft...

no55oriw
Neuling
Neuling
Beiträge: 8
Registriert: 4. Dez 2011 11:56

Re: Hausübung 13 Aufgabe 2

Beitrag von no55oriw »

ich arbeite ohne l und es hat auch früher funktioniert

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

Re: Hausübung 13 Aufgabe 2

Beitrag von danny »

Die Beispiele auf den Folien sind auch ohne "l", allerdings scheint das aufgrund der 64-Bit Rechner nicht mehr zu funktionieren. Eventuell gibt es ja einen Datentyp wie .half, der wieder 32-Bit Kompatibilität liefert? Müsste man mal recherchieren...

simon.r
Mausschubser
Mausschubser
Beiträge: 59
Registriert: 4. Okt 2010 16:13

Re: Hausübung 13 Aufgabe 2

Beitrag von simon.r »

Anscheint steht "l" für Double und "s" für Float...

no55oriw
Neuling
Neuling
Beiträge: 8
Registriert: 4. Dez 2011 11:56

Re: Hausübung 13 Aufgabe 2

Beitrag von no55oriw »

ja mit dem "s" funktioniert es jetzt. also nicht mehr "fld a" sondern "flds a", steht wohl für short beim 64bit-system????

Alle Variablen vom Typ .float müssen jetzt neuerdings mit s geladen werden, z.B.: flds a , fadds b usw.
beim fadd %st(1) wird es z.B. nicht gebraucht, ist aber sicher klar warum ;)

Matt
Erstie
Erstie
Beiträge: 18
Registriert: 20. Dez 2011 19:22

Re: Hausübung 13 Aufgabe 2

Beitrag von Matt »

no55oriw hat geschrieben:ja mit dem "s" funktioniert es jetzt. also nicht mehr "fld a" sondern "flds a", steht wohl für short beim 64bit-system????
"s" steht für single-precision und ist somit genau das, was du als float kennst.

Antworten

Zurück zu „Archiv“