yasm

hstr
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 128
Registriert: 14. Apr 2011 22:52

yasm

Beitrag von hstr »

Hi,
ich hab eben versucht das Beispielprogramm aus Vorlesung_4.pdf (Seite 50) per SSH auf clientssh1.rbg.informatik.tu-darmstadt.de und clientssh3.rbg.informatik.tu-darmstadt.de zum laufen zu bringen.
Aber wenn ich "yasm dateiname" eingebe, erhalte ich folgenden Fehler:
test1:1: warning: no non-local label before `.data'
test1:2: error: instruction expected after label
test1:2: warning: no non-local label before `.string'
test1:3: error: instruction expected after label
test1:4: error: instruction expected after label
test1:6: error: instruction expected after label
test1:8: error: instruction expected after label
test1:8: warning: ignoring unrecognized character `#'
test1:8: warning: ignoring unrecognized character `M-d'
test1:9: error: instruction expected after label
test1:9: warning: ignoring unrecognized character `#'
test1:10: error: instruction expected after label
test1:10: warning: ignoring unrecognized character `#'
test1:11: error: instruction expected after label
test1:11: warning: ignoring unrecognized character `#'
test1:14: error: instruction expected after label
test1:15: error: instruction expected after label
test1:16: error: instruction expected after label
test1:20: error: instruction expected after label
test1:20: warning: ignoring unrecognized character `#'
test1:21: error: instruction expected after label
test1:22: error: undefined symbol `printf' (first use)
test1:22: error: (Each undefined symbol is reported only once.)
test1:23: error: instruction expected after label
test1:23: warning: ignoring unrecognized character `#'
test1:24: error: undefined symbol `0x80' (first use)

Den selben Fehler erhalte ich überigens auch, wenn ich yasm auf einem 32bit Linuxsystem hier auf meinem Rechner ausführe.

Was mache ich falsch? :(

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

Re: yasm

Beitrag von mw1039 »

Hi,

mittlerweile sind das erste Praktikum und die zweite Hausuebung im Moodle hochgeladen. In beiden sind auch Kompilationsanweisungen enthalten, die zumindest bei mir funktioniert haben. Hast du die Zeilen schonmal ausprobiert? Grundsaetzlich solltest du es nur auf clientssh1 oder clientssh2 probieren.

Gruss,
Michael

neoatlant
Mausschubser
Mausschubser
Beiträge: 58
Registriert: 14. Okt 2010 22:16

Re: yasm

Beitrag von neoatlant »

Funktioniert bei mir auch, eine Frage noch, darf man wie bei printf, funktionen aus der C Library im Praktikum verwenden ?

hstr
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 128
Registriert: 14. Apr 2011 22:52

Re: yasm

Beitrag von hstr »

Hi,
also ich hab es jetzt mit den Befehlen aus Praktikum1.pdf
yasm -f elf -p gas Datei.asm
gcc -melf_i386 -o Datei Datei.o
./Datei
geschafft das die Datei durch yasm und gcc läuft, aber wenn ich ./Datei aufrufe
passiert gar nichts, es sollte aber doch irgendwas per intout ausgegeben werden?

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

Re: yasm

Beitrag von zimpfer »

Welche Datei hast du assembliert? Das Beispiel von Seite 50 aus dem 4. Foliensatz?

Dann hast du es wahrscheinlich direkt kopiert aus der PDF und es ist ein Leerzeichen in intout zwischen dem "\" und dem "n" ganz hinten, welches nicht da sein soll...

hstr
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 128
Registriert: 14. Apr 2011 22:52

Re: yasm

Beitrag von hstr »

zimpfer hat geschrieben:Welche Datei hast du assembliert? Das Beispiel von Seite 50 aus dem 4. Foliensatz?

Dann hast du es wahrscheinlich direkt kopiert aus der PDF und es ist ein Leerzeichen in intout zwischen dem "\" und dem "n" ganz hinten, welches nicht da sein soll...
Genau das war der Fehler, vielen Dank!

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

Re: yasm

Beitrag von mw1039 »

neoatlant hat geschrieben:Funktioniert bei mir auch, eine Frage noch, darf man wie bei printf, funktionen aus der C Library im Praktikum verwenden ?
Es darf nur printf (und spaeter bspw. scanf) benutzt werden. Ansonsten koennte man saemtliche Probleme in C loesen und einbinden.

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

Re: yasm

Beitrag von danny »

Weil es so gut in den Thread passt: Folgende Befehle scheinen auf den schwarzen Poolrechnern 32bit Assembler erfolgreich zu einer ausführbaren Datei zu machen:

Code: Alles auswählen

yasm -f elf32 -p gas Datei.asm
ld -melf_i386 -o Datei Datei.o
PS: allerdings habe ich noch nicht ausporbiert, ob man bei Benutzung von z. B. printf dann noch die C-Library per Hand mit reinlinken muss

Benedikt W.
Erstie
Erstie
Beiträge: 14
Registriert: 4. Okt 2010 21:18

Re: yasm

Beitrag von Benedikt W. »

Hi,
ich habe mich über ssh angemeldet und kann die Befehle:
yasm -f elf -p gas Datei.asm
gcc -melf_i386 -o Datei Datei.o
ohne Probleme ausführen. Wenn ich allerdings das Programm mit ./Datei ausführen will bekomme ich immer einen Fehler. Hatte jemand schonmal dieses Problem und kann mir helfen?
Schonmal Danke

Sascha-Thorsten
Mausschubser
Mausschubser
Beiträge: 51
Registriert: 4. Okt 2010 09:20

Re: yasm

Beitrag von Sascha-Thorsten »

Hallo liebe Kommilitonen,

wenn ich die funktion strcat aufrufen will, wie muss ich das anstellen?
Mein erster Ansatz war:

pushl $string1
pushl $string2
call strcat

Wo ist dann er der zusammengefügte String zu finden?

Danke im Vorraus

Benutzeravatar
Bug
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 161
Registriert: 12. Okt 2011 10:28

Re: yasm

Beitrag von Bug »

An die Windows-Nutzer (die es hier ja hoffentlich auch gibt) hätte ich eine kleine Frage zum Thema vsyasm.

Ich hab dank eines Eintrags im Archiv Yasm fürs Visual Studio installiert und passend eingerichtet bekommen. Debugger, Register-Ansicht & Co sind auch echt praktisch, nur kann ich dummerweise keine c-Funktionen aufrufen. So lange "call printf" im code steht, bekomme ich immer nur "error LNK2001: Nicht aufgelöstes externes Symbol "printf"." :x

Ich hab da inzwischen alle möglichen Anleitungen und Einstellungen ausprobiert und langsam gehen mir echt die Ideen aus, was man da noch machen kann. Falls also jemand eine Idee hat, würde ich mich sehr freuen.
Ophasen-Leitung Winter 2014/15, Sommer 2015, Sommer 2016 & Winter 2016/17
TGdI Tutor WiSe 14/15, 13/14 und 12/13
GdI II Betreuung Praktika SoSe 13
CMS Tutor SoSe 13

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

Re: yasm

Beitrag von zimpfer »

Bug hat geschrieben:An die Windows-Nutzer (die es hier ja hoffentlich auch gibt) hätte ich eine kleine Frage zum Thema vsyasm.

Ich hab dank eines Eintrags im Archiv Yasm fürs Visual Studio installiert und passend eingerichtet bekommen. Debugger, Register-Ansicht & Co sind auch echt praktisch, nur kann ich dummerweise keine c-Funktionen aufrufen. So lange "call printf" im code steht, bekomme ich immer nur "error LNK2001: Nicht aufgelöstes externes Symbol "printf"." :x

Ich hab da inzwischen alle möglichen Anleitungen und Einstellungen ausprobiert und langsam gehen mir echt die Ideen aus, was man da noch machen kann. Falls also jemand eine Idee hat, würde ich mich sehr freuen.
Probier mal stattdessen _printf (mit Unterstrich), dann müsste es unter Windows gehen

Sascha-Thorsten hat geschrieben:Hallo liebe Kommilitonen,

wenn ich die funktion strcat aufrufen will, wie muss ich das anstellen?
Mein erster Ansatz war:

pushl $string1
pushl $string2
call strcat

Wo ist dann er der zusammengefügte String zu finden?

Danke im Vorraus
http://home.htw-berlin.de/~junghans/cref/MAN/strcat.htm

John_Silver
Windoof-User
Windoof-User
Beiträge: 41
Registriert: 18. Okt 2009 23:27

Re: yasm

Beitrag von John_Silver »

Bug hat geschrieben:An die Windows-Nutzer (die es hier ja hoffentlich auch gibt) hätte ich eine kleine Frage zum Thema vsyasm.

Ich hab dank eines Eintrags im Archiv Yasm fürs Visual Studio installiert und passend eingerichtet bekommen. Debugger, Register-Ansicht & Co sind auch echt praktisch, nur kann ich dummerweise keine c-Funktionen aufrufen. So lange "call printf" im code steht, bekomme ich immer nur "error LNK2001: Nicht aufgelöstes externes Symbol "printf"." :x

Ich hab da inzwischen alle möglichen Anleitungen und Einstellungen ausprobiert und langsam gehen mir echt die Ideen aus, was man da noch machen kann. Falls also jemand eine Idee hat, würde ich mich sehr freuen.
Welche Visual Studio nutzt du? Wie hast du es zum laufen bekommen? Wenn ich die Beispielprogramme kompilieren lassen will, bekomme ich nur Fehler ausgegeben.

Code: Alles auswählen

Warning	1	warning : no non-local label before `.data'	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\test.asm	1	1	yasm_bla
Error	2	error : instruction expected after label	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\test.asm	2	1	yasm_bla
Warning	3	warning : no non-local label before `.string'	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\test.asm	2	1	yasm_bla
Error	4	error : instruction expected after label	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\test.asm	5	1	yasm_bla
Error	5	error : instruction expected after label	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\Wert fuer die Berechnung	yasm_bla
Warning	6	warning : ignoring unrecognized character `#'	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\Wert fuer die Berechnung	yasm_bla
Error	7	error : instruction expected after label	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\Wert im %eax ausgeben	yasm_bla
Error	8	error : instruction expected after label	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\Wert im %eax ausgeben	yasm_bla
Error	9	error : undefined symbol `printf' (first use)	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\Wert im %eax ausgeben	yasm_bla
Error	10	error : (Each undefined symbol is reported only once.)	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\Wert im %eax ausgeben	yasm_bla
Error	11	error : instruction expected after label	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\Exit	yasm_bla
Error	12	error : undefined symbol `0x80' (first use)	C:\Users\nutzer\Documents\Visual Studio 2010\Projects\yasm_bla\yasm_bla\Exit	yasm_bla
Error	13	error MSB3721: The command ""C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\"vsyasm.exe -Xvc -f Win32 -o "Debug\\" -rnasm -pnasm   test.asm" exited with code 1.	C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\vsyasm.targets	45	6	yasm_bla

Mirlix_
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 188
Registriert: 3. Mär 2006 14:57

Re: yasm

Beitrag von Mirlix_ »

Ich bin gerade am schreiben einer Einleitung in x86 asm und nutze dafuer auch yasm, es fehlt noch einiges, aber ein Installations und Debugging Anleitung ist schon vorhanden, evt hilft es einigen hier. Es werden bestimmt noch massig Rechtschreibfehler etc drinne sein. Wenn ihr wirklich schlimmer Fehler findet die das Verstaendniss stoeren schickt mir dieses bitte der PM und ich verbessere sie dann.

http://felix-kerger.de/downloads/yasm.pdf
"If you want more effective programmers, you will discover that they should not waste their time debugging, they should not introduce the bugs to start with." Edsger W. Dijkstra

Benutzeravatar
Bug
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 161
Registriert: 12. Okt 2011 10:28

Re: yasm

Beitrag von Bug »

John_Silver hat geschrieben:Welche Visual Studio nutzt du? Wie hast du es zum laufen bekommen? Wenn ich die Beispielprogramme kompilieren lassen will, bekomme ich nur Fehler ausgegeben.
Ich benutze Visual Studio 2010 Professional (aus der MSDNAA). Meine Lösung, die ich inzwischen gefunden habe (und die vielleicht nicht ganz sauber ist), ist, dass ich ein Visual C++ Projekt mit erstellten Grunddateien rings herum verwende, und einfach die eigentliche Datei, die eine _main enthält, ausschließe und stattdessen eine asm-Datei mit _main-Entrypoint habe.
Im Wesentlichen habe ich es so gemacht, wie in der Anleitung beschrieben, dazu habe ich noch bei den Einstellungen von YASM Assembler in der Rubrik Symbols sozusagen Alias-Namen gesetzt, damit der Code sowohl unter Windows als auch unter Linux ohne große Änderungen ausführbar ist.

Bild
Ophasen-Leitung Winter 2014/15, Sommer 2015, Sommer 2016 & Winter 2016/17
TGdI Tutor WiSe 14/15, 13/14 und 12/13
GdI II Betreuung Praktika SoSe 13
CMS Tutor SoSe 13

Antworten

Zurück zu „Archiv“