nicht ausführbarer ausführbarer Assemblercode

Benutzeravatar
Abrax
Mausschubser
Mausschubser
Beiträge: 44
Registriert: 22. Nov 2004 18:23

nicht ausführbarer ausführbarer Assemblercode

Beitrag von Abrax »

Hallo!
Ich habe heute von meinem Tutor eine Abgabe der letzten Woche (Hausübung 2) bewertet bekommen. Null Punkte für den Programmierteil, was mich irgendwie verwundert. Das alles mit dem Argument "Code nicht kompilierbar/ausführbar". In der Tat ist der Code aber mit Hilfe des in diesem Forums vorgestellten Bash-Files "ldyasm" durchaus ausführbar (und es kommt das richtige Ergebnis raus), aber mit den Befehlen "yasm...", "gcc..." kommt der Fehler: "SomeFile.asm:4: syntax error". Der Code sieht ungefähr so aus:

Code: Alles auswählen

01:
02: .data
03:
04: intout1:
05: .string "Some string"
06: intout2:
07: .string "Some more string"
Wo ist denn da der Fehler für gcc und warum läuft das ganze doch noch mittels ldyasm-Skript?

Ich danke für jede Erklärung.
Um ein tadelloses Mitglied einer Schafherde sein zu können, muß man vor allem ein Schaf sein.

Albert Einstein

spaci76
Mausschubser
Mausschubser
Beiträge: 52
Registriert: 9. Mai 2009 18:27

Re: nicht ausführbarer ausführbarer Assemblercode

Beitrag von spaci76 »

liegt es eventuell an dem Umbruch??

Benutzeravatar
Abrax
Mausschubser
Mausschubser
Beiträge: 44
Registriert: 22. Nov 2004 18:23

Re: nicht ausführbarer ausführbarer Assemblercode

Beitrag von Abrax »

Nein, es liegt nicht am Umbruch. Habe es gerade ausprobiert alles in einer Zeile ändert nichts an der Fehlermeldung...
Um ein tadelloses Mitglied einer Schafherde sein zu können, muß man vor allem ein Schaf sein.

Albert Einstein

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

Re: nicht ausführbarer ausführbarer Assemblercode

Beitrag von mw1039 »

Im Grunde braucht ihr kein Skript. Ihr koennt auch einfach die Zeilen aus der Aufgabenstellung jeweils mit && hintereinander haengen.
Z.B.
yasm -f elf -p gas Datei.asm && gcc -melf_i386 -o Datei Datei.o && ./Datei
Das kann man dann in der Konsole mit der Pfeiltaste nach oben immer wieder zurueckholen.

Das Skript ist leider nicht von uns und dementsprechend nicht supportet. Was da jetzt genau schiefgegangen ist, weiss ich nicht.

Benutzeravatar
Abrax
Mausschubser
Mausschubser
Beiträge: 44
Registriert: 22. Nov 2004 18:23

Re: nicht ausführbarer ausführbarer Assemblercode

Beitrag von Abrax »

Ja ok, das Skript wird nicht supportet is klar, das verlange ich auch nicht. Aber wie bekomme ich den Fehler denn jetzt weg? Was ist denn der Fehler im obigen Code? Immerhin habe ich soweit alles so gemacht wie es sein sollte/darf. Ich war auf einem "weißen" Rechner eingelogt, habe die Datei mit KWrite über X-Session geschrieben und ihn auf dem Uniserver ausgeführt, was wie gesagt mit dem einen Befehl klappt mit dem anderen nicht.
Könnte es vielleicht an den Parametern des gcc-Befehls liegen?
Ich muss ja irgendwie in der Lage sein lauffähigen Code zu produzieren. Wenn das aus völlig unbekannten Gründen nicht klappt und sogar schon in den ersten Zeilen an einem Label, das so eigentlich kein Fehlerpotential birgt, dann kann ich ja gleich aufhören... Bin da schon ganz schön down, weil ich den Fehler einfach nicht finden kann...
Um ein tadelloses Mitglied einer Schafherde sein zu können, muß man vor allem ein Schaf sein.

Albert Einstein

spaci76
Mausschubser
Mausschubser
Beiträge: 52
Registriert: 9. Mai 2009 18:27

Re: nicht ausführbarer ausführbarer Assemblercode

Beitrag von spaci76 »

da die Aufgabe gelaufen ist kannst du den Code nicht mir mal schicken oder ihn hier veröffentlichen?

Benutzeravatar
Abrax
Mausschubser
Mausschubser
Beiträge: 44
Registriert: 22. Nov 2004 18:23

Re: nicht ausführbarer ausführbarer Assemblercode

Beitrag von Abrax »

Gute Idee ;)
Hier ist der Code:
(Aber wie gesagt: mit ldyasm-Skript funktioniert es, mit yasm-gcc-Befehlen kommt ein Syntaxfehler in Zeile 4...)

Code: Alles auswählen


.data

intout1: 
	.string "Eingegebener Wert: %d\n"
intout2: 
	.string "Das hoechstwertige Bit des eingegebenen Wertes ist %d. Der eingegebene Wert war %d\n"
intout3: 
	.string "%d\n" # wird egtl. nicht mehr benoetigt...
intout4: 
	.string "Der eingegebene Wert war eine Null und enthaelt daher keine binaere eins!\n"

.text
.globl main

main:

# Wert(e) fuer die Berechnung:

#movl	$13, %eax	# 13 = 0b1101
#movl	$133, %eax	# 133 = 0b10000101 - sollte 7 ergeben
movl	$16777349, %eax	# 16777349 = 0b0001 0000 0000 0000 0000 1000 0101 - sollte 24 ergeben
#movl	$1, %eax	# 1 = 0b0001 - sollte 0 ergeben
#movl	$-1, %eax	# -1 = k.A. - sollte 0 ergeben
#movl	$0, %eax	# sollte den oberen String ausgeben




# Hier der eigene Code 

mov	$31, %cl	# Zaehlervariable (%cl ist in %ecx enthalten, wird aber fuer den shift benoetigt)

# Vergleich auf 0 um eine Endlosschleife zu umgehen
cmpl	$0, %eax
je	.L2

.L1:
movl	$1, %ebx	# Kontrollert eins zum shiften und bitweise Vergleich in %ebx
sall	%cl, %ebx	# Linksshift von 1 um Zaehlvariable (anfangs 31. sodass %cl = 2^31)

andl	%eax, %ebx	# Bitweise Verkleich auf Stelle %ecx
cmpl	$1, %ebx	# Vergleich auf 1 <= %ebx, Sprung bei Erfolg (Terminierungsbedingung):
jge	.L3		# Sprung auf Druck und Exit
decl	%ecx		# Sonst: vermindere Zaehler
jmp	.L1		# Springe zurueck zum Algorithmus

.L2:
pushl	$intout4	# Bereitstellen und Ausgeben des Strings fuer Wert = 0
call	printf
jmp	.L4		# Sprung zum Ende, es ist keine Berechnung noetig/moeglich

.L3:

# eingegebenen Wert im %eax ausgeben
pushl	%eax		# Hier enthaelt %eax den eingegebenen Wert
pushl	$intout1

# Ausgeben des hoechstwertigsten Bits:
pushl	%eax		# Das ist der Wert, den wir eingegeben haben
imull	$0, %eax	# Ausgaberegister (Akkumulator) nullen
movl	%ecx, %eax	# Das errechnete hoechste gesetzte Bit verschieben
pushl	%eax		# Das Ergebnis auf den Stack schieben
pushl	$intout2	# 
call	printf

# Exit
.L4:
movl	$1, %eax
int	$0x80
Um ein tadelloses Mitglied einer Schafherde sein zu können, muß man vor allem ein Schaf sein.

Albert Einstein

Benutzeravatar
Abrax
Mausschubser
Mausschubser
Beiträge: 44
Registriert: 22. Nov 2004 18:23

Re: nicht ausführbarer ausführbarer Assemblercode

Beitrag von Abrax »

Mit folgendem Befehl ist der Code bei mir ausführbar:

Code: Alles auswählen

yasm -f elf -p gas name.asm && gcc -m32 -melf_i386 -o name name.o && ./name
Um ein tadelloses Mitglied einer Schafherde sein zu können, muß man vor allem ein Schaf sein.

Albert Einstein

Antworten

Zurück zu „Archiv“