Assembler Tutorial/Buch unter NetBSD

kotzkroete

/* no comment */
Hallo,
ich hab mich in letzter Zeti mal ein bisschen mit assembler befasst. Und ich hab ehrgeiz das zu lernen. Leider gibt es fuer NetBSD sehr wenig tutorials. Hauptsaechlich fuer Linux und DOS. Auf int80h.org ist zwar eine ganz gute Einfuehrung, aber leider kommt schon mein zweiten Programm ein "Segmentation fault (core dumped)". Bei ersten konnte ich das noch umgehen, in dem ich einfach nicht das elf Format genommen habe, aber bei 2. hilft das nichts mehr.
Gibt es denn nicht irgendwas zu Assembler unter NetBSD? Kann auch was kosten, aber irgendwas um Assembler unter NetBSD zu lernen waer schon schoen. Ich habe uebrigens einen x86er. Also nichts exotisches.
 
Ich hatte eher an sowas Buchartiges gedacht. Man kennt ja so programmierbuecher wie "C in 21 Tagen" oder aehnliches. Da ist das dann in verschiedene Kapitel aufgeteilt und in einem Kapitel lernt man Ein- und Ausgabe und im anderen Variablendeklaration. Gibt es nicht sowas aehnlich auch fuer assembler? Ich kanns mir ja mal anschauen, aber leider laesst sich Dokumentation immer so schlecht lesen :/
 
Ich hatte eher an sowas Buchartiges gedacht. Man kennt ja so programmierbuecher wie "C in 21 Tagen" oder aehnliches. Da ist das dann in verschiedene Kapitel aufgeteilt und in einem Kapitel lernt man Ein- und Ausgabe und im anderen Variablendeklaration. Gibt es nicht sowas aehnlich auch fuer assembler? Ich kanns mir ja mal anschauen, aber leider laesst sich Dokumentation immer so schlecht lesen :/

http://www.terrashop.info/suche.php?begriff=Assembler&typ=fulltext
 
Nujo....das ist ja nur fuer Windows. Man kann das sicher auch fuer NetBSD umschreiben, aber dafuer hab ich zu wenig Ahnung. Warum nur benutzen alle Windows? Gerade bei Assembler findet man fuer Unix Systeme ganz wenig :(
 
... was auch mit der Portabilität des Codes zu tun hat, daß man kaum Assembler unter Unix programmiert: Während das C Programm auf allen 89234798 Plattformen von NetBSD ohne Veränderungen, bzw. mit wenigen Veränderungen läuft, darfst Du ein Assembler-Programm auf jeder Plattform neu schreiben (bzw. halt sagen: dieses Proggie funzt nur auf x64-Maschinen).

Ich habe zwar schon einiges in Assembler gemacht, jedoch noch noch nie unter NetBSD (bissl eigene OS-Experimente). Welches Buch mir IMMER zur Seite steht, ist das hier:

http://www.amazon.de/Assembler-GE-P...5362657?ie=UTF8&s=books&qid=1174415933&sr=8-4

Damit kann man im Zweifel auch gleich in HEX schreiben :) .

Viel Spaß auf jeden Fall bei der etwas anderen Art der Programmierung. Melde mich, wenn ich weiteres NetBSD-Spezifisches gefunden habe.
Mit Assembler-Kenntnissen mach übrigens auch das Lesen von einigem Sourcecode (speziell im frühen Boot-Stadium) von NetBSD gleich mehr Spaß, weil man sich was drunter vorstellen kann.
 
Hallo,
ich hab mich in letzter Zeti mal ein bisschen mit assembler befasst. Und ich hab ehrgeiz das zu lernen.

Das ist schön. Ob Du's wirklich brauchst ist eine andere Frage, aber ich frickle auch gerne ;)

Hier mein Rat: http://www.bsdforen.de/showthread.php?t=16005

Fang doch am Besten damit an, einfache Probleme zu lösen, bevor Du ganze Programme in Assembler schreibst. Versuch Doch einfach mal, eine Funktion wie

Code:
int
arraysum(int *a, int *b, int len) {
  int res = 0;

  for ( ; len >= 0; --len)
    res += a[len] * b[len];

  return (res);
}

in Assembler zu schreiben. Dabei brauchst Du Dir erstmal keine Sorgen um Systemaufrufe etc. zu machen und Du kannst die im Netz verfügbare "Dokumentationen" in Form von diesen dämlichen Tutorials auch unter NetBSD verwenden. Wenn Du bis nächste Woche einen Lösungsansatz für das Problem präsentieren kannst, es aber nicht vollständig selbst lösen konntest, dann erklär ich Dir höchstpersönlich wie's geht. Viel Spass :)

Zur Erklärung: Der Funktion werden zwei Arrays gleicher Länge gefüllt mit Integer Werten übergeben. Der dritte Parameter gibt an, wie viele Integer-Werte in den Arrays gespeichert sind.
 
Das ist natuerlich eine gute Idee. Ich kann ja mal ein bisschen pseudo code schreiben (mal sehen, ob ich das hinkriege).

@Jeff: Wenn ich das richtig verstanden habe, ist das eine Befehlsreferenz? Ist das systemunabhaengig geschrieben? Immerhin gibt es ja AT&T und Intel Syntax usw....
Aber sieht schonmal interessant aus.

Ich hab mir auch ueberlegt, einfach ein Buch fuer DOS oder Linux zu kaufen, auf einem der beiden lerne und mir dann einfach die Unterschiede zu NetBSD angucke und einzele Programme umschreibe. Aber ich werd erstmal sehen, wie ich die Funktion in asm geschrieben krieg.
Danke, dass ihr mir helft.
 
befehlsreferenzen beziehen sich immer auf eine bestimmte prozessorarchitektur.
somit ist das nicht wirklich systemunabhaengig.

hast du auf jeden fall schonmal nach "nasm tutorial" gegoogelt?
ich habe dabei das hier gefunden: http://www.drpaulcarter.com/pcasm/

ein weiteres google-stichwort ist auf jeden fall auch noch "instruction set"
so nennen sich die assembler befehle in hardware-sprache.

http://www.intel.com/design/pentium/manuals/24319101.pdf
waere hier mal als beispiel zu nennen.




aaaaaaaaaaber:
du sagtest dein zweites programm wuerde schon ein seg fault schmeissen?
kannst du mal den quellcode posten?
und: wenn du mit assembler arbeiten moechtest empfehle ich dir DRINGEND dich erstmal mit der funktionsweise eines debuggers vertraut zu machen.


oh, und hier noch ein beispiel von assemblercode:
Code:
// memset(r1,0,256);
ldi     r1    #0xa000
ldi     r2    #256
ldi     r3    #0x00
ldi     r4    #0x04
MEMSETLOOP:
stai    [r1]  r3
add     r1    r1    r4
sub     r2    r2    r4
jnz     MEMSETLOOP
 
Was auch als Einstieg (allgemein) gut ist: Reiner Backer, Assembler, rororo. Ist zwar nur für DOS/Windows, aber bei € 10 kann man nicht viel falsch machen. Ansonsten: Ich gehe mal davon aus, daß Du nicht unbedingt "große" Softwareentwicklung in Assembler machen willst, sondern es geht Dir mehr darum, dein OS, den Prozessor etc. zu verstehen ? Wenn ja, ist die Assemblerprgrammierung von Mikrokontrollern (80x51-Familie, AVR etc.) vielleicht auch eine (Anfangs-) Alternative, da diese Prozessoren ja weitaus weniges komplex aufgebaut sind als ein Intel-System. Mir hat die Beschäftigung mit solchen Systemen viel beim allgemeinen Verständnis geholfen.

Gruß Frank
 
naja, das rororo-Buch ist IRC ziemlich DOS-Lastig und handelt in großen Teilen von den ganzen Dos-Interrupts? Also es ist nicht schlecht für ne erste Übersicht, aber vielleicht ist ein anderes Lehrbuch für diesen Fall hier vorzuziehen. Ist aber schon ein paar Jahre her, daß ich es gelesen habe.
 
Hast Du Dir http://www.drpaulcarter.com/pcasm/ angesehen? (geht in Richtung Vincent Vegas Tip) Es ist zwar nicht NetBSD-spezifisch, aber mir hat es von allen im angesprochenen Thread genannten Büchern am besten gefallen. Ich werd es mir auch nochmal von vorne bis hinten reinziehen, wenn ich Zeit dafür habe.

Du hast aber auch nicht gesagt, warum Du Dich mit Assembler auseinandersetzen willst; geht es Dir um den Lerneffekt, oder was ist da Dein Ziel? (oder vielleicht so eine Art latenter Coding-Masochismus ? ;) )

Spaß beiseite: Ich habs aus Neugierde und Wissensdurst gemacht, bis heute eigentlich kein ernstzunehmendes Programm in Assembler gecodet, aber manche Sachen gelernt und verstanden, die mir ansonsten wohl verschlossen geblieben wären.

Achso: und es kostet nichts ;)
 
Zuletzt bearbeitet:
Also....
@dettus: Mit "systemunabhaengig" meinte ich eigentlich mehr das Betriebssystem bzw. eigentlich den Assembler, der unter dem System verwendet wird (as hat ja eine andere Syntax als nasm z.B.). Unter as hat man ja erst die Quelle und dann das Ziel bei movl. Sowas meinte ich. Aber es muesste ja trotzdem systemabhaengig sein. Aber: Von welchem? und geht das Buch auch auf andere Assembler ein?

Das pcasm Buch ist ja auch fuer Linux. Hab das auch schonmal angelesen. Aber Linux ist eben anders als NetBSD. Ich koennte natuerlich auch auf Linux lernen und dann "umlernen", aber NetBSD macht mir mehr Spass. Ist wie mit Windows. Man will es nicht starten, wenn man was besseres hat (obwohl Linux nicht schlechter als BSD ist).

Aber der link zu der Referenz von Intel sieht schonmal, fuer mich zwar noch etwas kryptisch, gut aus, danke.

Den source kannst du dir hier ansehen:
http://www.int80h.org/bsdasm/#unix-filters
2 Anmerkungen:
1. ich habe, wir oben gesagt, ohne die option -f elf assembelt.
2. Oben auf der Seite steht noch eine include Datei, die den Ganzen I/O Kram etwas vereinfacht.


So, und jetzt mein Grund, warum ich das lernen will:
Ich will unbedingt die niedrigste Ebene der Programmierung verstehen (das waere zwar Maschinensprache, aber wie man das lernen woll, weiss ich nicht)...Ich will einfach wissen, wie es funktioniert. Grosse professionelle Programme will ich sicher nicht damit schreiben, aber es macht schon Spass, sich auf der niedrigsten Ebene mit dem Prozessor zu unterhalten.
 
pcasm ist zwar nicht ganz das was Du suchst, aber es wäre, meiner Meinung nach, ein ganz guter Einstieg. Danach könntest Du ja, mit besseren Vorkenntnissen, die Sache übertragen (die Hauptunterschiede wären wohl die Parameterübergabe und andere Syscalls).

Naja, ich wünsche Dir jedenfalls, dass Du noch fündig wirst. Ich hatte allerdings damals zu (Free)BSD keine bessere Lektüre gefunden. Mir gings aber auch in erster Linie um die Grundlagen unter einem unixoiden System an sich, da war mir dann auch Linux recht.

...Ich will einfach wissen, wie es funktioniert. Grosse professionelle Programme will ich sicher nicht damit schreiben, aber es macht schon Spass, sich auf der niedrigsten Ebene mit dem Prozessor zu unterhalten...

Macht auf jeden Fall Spaß und ist auch sehr lehrreich. :) Nur mit der AT&T-Syntax bin ich immer noch nicht warm geworden ;)
 
Hmm....ich mag die AT&T Syntax eigentlich lieber, aber was solls. Aber solange ich nicht weiss, was ich machen muss, damit nicht immer dieses dumme "Segmentation fault (core dumped)" kommt, kann ich unter NetBSD eh noch nicht viel machen. Beim Hello World Programm gehts noch, einfach das -f elf wegzunehmen, aber dannach wirds schwierig.
 
Ich würde Dir ja helfen, aber bei mir hats damals (unter FreeBSD) funktioniert...

Gibt ja noch ein paar Spezis hier, vielleicht haben die noch eine Idee. Aber selbst wenn's dann klappt: bsdasm hat mir zwar damals gut gefallen und auch geholfen, aber so ein richtiger Einstieg in die Materie ists dann ja doch nicht. Was das vermitteln von /Grundlagen/ angeht ist IMHO pcasm, oder etwas in der Art, besser geeignet.

Viel Erfolg jedenfalls!

[ot]Hab grad beim überfliegen von bsdasm festgestellt, dass ich auch nen ganzen Batzen wieder vergessen habe ;) [/ot]
 
Na gut. Dann guck ich mir das nochmal unter Linux an.

Edit: Wenn ich noch folgende section hinzufuege, kann ich das Programm uebrigens problemlos als elf assemblen:
section .note.netbsd.ident
dd 0x07,0x04,0x01
db "NetBSD",0x00,0x00
dd 200000000

Aber gehts nicht auch ohne?
 
Zuletzt bearbeitet:
okay.

ich kriege bei dem beispiel diese fehlermeldung:
Code:
% nasm -f elf hex.asm
hex.asm:1: fatal: unable to open include file `system.inc'

wenn du wirklich assembler lernen moechtest dann empfehle ich dir trotzdem erst einmal dringend einen einfacheren assembler den fuer intel zu lernen.

ich rate dir erstmal zu ein paar einfachen schritten mit dem 6502-assembler.
der befehlssatz ist noch relativ uebersichtlich. und es ist WIRKLICH nachvollziehbar was im inneren der cpu passiert wenn man da einen befehl aufruft.

schaltplaene gibt es auch genug.


sobald du dann verstanden hast was assembler ueberhaupt genau ist (leider kann man das nicht erklaeren) kannst du dich mal an einer groesseren cpu versuchen.

ich hab auch erst verstanden was assemblercode macht nachdem ich meinen ersten eigenen prozie dafuer gebaut habe.
 
wie kompliziert wird denn der Intelcpu im vergleich zu microkontrollern ?
Kann mir nur schwerlich vorstellen, das man ausser mehr "Gedächnis" auch ein mehr an Skills brauch ?:rolleyes:


gruß
.chi
 
okay.

ich kriege bei dem beispiel diese fehlermeldung:
Code:
% nasm -f elf hex.asm
hex.asm:1: fatal: unable to open include file `system.inc'
Ich habe ja gesagt, dass du noch diese include Datei brauchst. Ich haeng sie mal an.

wenn du wirklich assembler lernen moechtest dann empfehle ich dir trotzdem erst einmal dringend einen einfacheren assembler den fuer intel zu lernen.

ich rate dir erstmal zu ein paar einfachen schritten mit dem 6502-assembler.
der befehlssatz ist noch relativ uebersichtlich. und es ist WIRKLICH nachvollziehbar was im inneren der cpu passiert wenn man da einen befehl aufruft.

schaltplaene gibt es auch genug.
Aha....aber fuer sowas ein tutorial zu finden, duerfte schweirig sein, oder?
Und was genau sind schaltplaene?

sobald du dann verstanden hast was assembler ueberhaupt genau ist (leider kann man das nicht erklaeren) kannst du dich mal an einer groesseren cpu versuchen.

ich hab auch erst verstanden was assemblercode macht nachdem ich meinen ersten eigenen prozie dafuer gebaut habe.

Naja...ich weiss ja schon, was assembler ist (glaube ich zumindest).

Aber ich denke nicht, dass die Komplexitaet das Problem ist. Vielmehr, ein gutes Tutorial/Buch. Aber ich werds jetzt erstmal mit pcasm versuchen.
 
So...ich habe mich entschlossen erstmal mips assembler zu lernen. Auf einem RISC ist das sicher einfacher. Leider finde ich einfach keine gute Referenz fuer Instructions. Auf einer Seite fehlt dies, auf der anderen das. Gibt es nirgendwo eine, die KOMPLETT ist?
 
Zurück
Oben