----> CODERS.GER-MAG 3/97 <---- ========================================================== EDITORIAL ========================================================== Hi Coder, Musicians, GFXler und co. eigentlich muesste Mag 3-97 das kuerzestste Mag sein das wir je gemacht haben ... !!! Die Beteilung eurerseits war misserabel !!! !!! Dank geht an Melcom und Dynamite. !!! Aber dann traf ich Adok auf unserm Channel und der hat mir von seinem Diskmag HUGI erzaehlt. Ich hab mir gleich 2 Ausgaben gezogen und fand das HUGI MAG gleich unheimlich cool. Ich hab dann an Adok gemailt und gefragt ob wir ein paar Artikel aus seinen Mag veroeffentlichen koennen ... und wie ihr seht ist das mag doch noch ausreichend gross geworden. !!! Special Thanks to ADOK !!! Fuer die Zukunft will ich aber mehr beteiligung der Channeluser ... Besonders wuerde uns freuen wenn jemand einen Kurs von 3 bis 4 Teilen machen will. bis in 4-6 Wochen (falls ihr euch genug beteiligt) Die Redaktion ========================================================== Inhalt ========================================================== Lerserbriefe : Werbung : News : #Coders.ger : Wie man das Channelmag bekommen kann Legal Stuff oder Wie ich einen Artikel einsende The friendly German coders channel ?!? HARDWARE CORNER : FUN CORNER : NET CORNER : TIPS&TRICKS : Windows 95 Icons editieren mit Doppelklick ADF Filetype mit Konfigurationsmenue Internet Automatisches Datum update fuer WWW-Seiten TESTS : Packer im Test KURSE : C KURS fuer Einsteiger (Teil 2) Hugi Assembler KURS (Teil 1) Aufbau der V-FAT: Verzeichnisstruktur ========================================================== Leserbriefe ========================================================== L : Hey, Hey... Is ja wohl'n edles Teil geworden, euer CODERS.GER-MAG 2/97. Das sag ich jetzt nicht nur weil ich da ja drinnen stehe. Ne Ne... Da stehen ja auch die Links drinnen, die ich dir gesendet habe, sauber. Schade nur, das du die Informationen zu den Links, so uebernommen hast wie ich sie dir geschickt habe. Da habe ich Idio# naemlich bei unserem Link (www.hoaxarts.org), "NUR FUER SCENE MUSIKER ETWAS" geschrieben, und das stimmt halt nicht ganz... Aber das konntest du ja halt nicht wissen. Sorry, mein fehler. Aber sonst... Echt Toll... [MELCOM] Gar nicht uebel...... Bis wann koennen Artikel fuer 3/97 abgegeben werden ? [Thorsten] In dem 1. Mag von #coders.ger stand da etwas von einem "mail forward" - service. Besser bekannt als "USA.NET" (http://netaddress.usa.net) Nun, es ist nicht "nur" eine mail forward, sondern bei korrekter handhabung eine alleinige eMail-adresse, die mann mit einem eMail-PRG (Eudora oder Netscape usw.) abrufen kann. Ich gibt dir ma die Daten fuer Eudora, oder diverse andere eMail-PRGs. Postausgang (SMTP): dns01.ops.usa.net Posteingang (POP3): pop01.netaddress.usa.net POP3-Konto: den Benutzernamen (z.B. fritz) Kennwort: ****** eMail adresse: fritz@usa.net (zum bleistift) Nun kann mann seine an "name@usa.net" adressierten eMails abholen. Und wenn mann jetzt hierueber Mails verschickt, steht natuerlich auch als Absender "name@usa.net" und nicht wie zuvor als REPLY TO.... Falls Du's schon wusstest, kannste es ja vielleicht noch in eurem Mag veroeffentlichen. Es soll Leute geben, die dieses noch nicht wissen. PS.: Ich empfehle die forward adresse z.B. an, "fritz@t-kotzline.de" herauszunehmen und die fritz@usa.net adresse alleine zu benutzen. Grund: sonst holt man ja 2x die Mails ab. (glaubbich...) [MELCOM] Zum UNIX X WINDOWS Problem der letzten (2/97) : Lade dir einen neueren Mach64 XServer vom Netz deiner unterstuetzt die Rage II Chipsaetze wohl noch nicht [BJ] Was ich nun wollte ist: "Haste vielleicht ein paar geile Links zu Herstellern von Programmiersprachen?" Oder kannste ma bei deinen Leuten nachfragen? Waehre verdammt cool.... Oder wo bekommt man Tip/Tricks aus'm WEB her? Oder, kannste in eurem MAG#3 'nen aufruft starten, und fragen wer coole Links (oder so) weiss? Waehre verdammt geil, wenn Du mir helfen koenntest. Ich kann das ja auf unserer Seite beruecksichtigen. Natuerlich setzte ich auch einen Link zu #Coders.ger. Aber die Seiten sind noch nicht ganz fertig. Kannst dir aber trotzdem schoneinmal unsere Seite anschauen. (... sind aber laengst nicht fertig...) [MELCOM] :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Leserbrife , Kommentare , Fragen , Antworten ??? An : The_Coders.ger_mag@usa.net (*) BJ.DesirE@usa.net (**) bdietri@informatik.uni-kl.de :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: (*) Funktz evtl. noch nicht richtig (hat ASP gemanaged:) (**) muesste funktionieren ========================================================== NEWS - NEWS - NEWS - NEWS - NEWS - NEWS - NEWS - NEWS ========================================================== Satellite'n'stuff =================> =>Fuer alle Videocrypt-Fans VCL-Central feiert 1 Jahr online, und es gibt zur Freude aller ;) eine neue VCL-Replay-Software. Der Programmieraufwand hat sich gelohnt, Source available, zu finden unter http://alpha.nedernet.nl/~myo/ =>Voyager 1.61d ist da What's new in version 1.61d: Added the new TV3 - 0c key =>DX'ler und Multifeed'ler Regelmaessige Transponderbelegung der Satelliten von 28.5 Grad Ost bis 37.5 Grad West gibts als Mailingliste bei DXStefan mail an majordomo@area51.upsu.plym.ac.uk mit body subscribe sat-stefan-tab =>d-Box Neue Software wird von BetaDigital/DF1 fuer die d-Box angeboten: -"rotes Menue" weiterhin ueber bekannten Zugangscode erreichbar -"No TS" Anzeige bei diversen Programm entfaellt -weiterhin problemlose Decodierung diverser Programme ohne PID =>Neues von den Satelliten HotBird3 ist grad auf 28.2 Grad Ost E zu finden, erste Testsendungen sind zu empfangen --- Scene Rom 97 This is a music-scene CD and if someone desires to, he can do a song for it! The deadline is on 12.Dec.97. Who wants to do a song can enter at http://www.hoaxarts.org/melcom under the [CD-ROM] button. The CD will most probably be released at the CeBit98 in March '98. Thank you! For further infos, please eMail to [melcom@hoaxarts.org]. Please try to keep your song small in size (300-500kb). --- Crystal is BACK !!! Nun ist es soweit... Crystal geht Online. Wir suchen noch dringend gute Coder. Wer also lusten hast, der schreibt einfach an [melcom@hoaxarts.org] oder [crystal-group@usa.net]. PS: AUCH ANFAENGER SIND WILLKOMMEN!!! Wir haben Crystal nun offiziell uebernommen. Fuer naehere Infos stehe ich gern zur verfuegung. Die Crystal gruppe besteht zur zeit aus: Dynamite! von den Lost Patrols -Coder. MELCOM von Hoax Arts und Crystal -Musician, "Coder". * <------- Hier koennte dein Name stehen... ========================================================== #Coders.ger ========================================================== Wie man das Channelmag bekommen kann Wie die meisten von euch wissen hat der Channel #Coders.ger ein Homepage im WWW. (http://home.pages.de/~coders.ger) Seid ihr Vieluser dieses Channels koennt ihr euch dort in den Mailveteiler eintragen und bekommt neben dem Mag noch andere Anfragen und Informationen von Channelusern. Wenn ihr dieses aus irgendeinem Grund nicht tun wollt gibt es noch die Moeglichkeit das Mag mit Hilfe einer Mail zu abonieren. Schick eine mail an : The_Coders.ger_Mag@usa.net (*) oder Bj.DesirE@usa.net Ins Topic : "ich m”chte bitte gerne das Mag beziehen, wenn es nicht zuviel Umst„nde macht und ich wrdig genug bin dieses g”ttliche Teil zu erhalten" ;) Oder einfach "Mag her!" und in den Body die Emailaddresse an die ihr es geschickt haben wollt. Legal Stuff oder Wie ich Artikel einsende Mit erhalt dieses Mag habe ich mich verpflichtet fuer jede jemals erscheinende Ausgabe des Coders.ger Channelmags mindestens einen Beitrag zu leisten,d.h. einen Artikel zu schreiben. Diese Verpflichtung gilt ueber den Tod hinaus. Artikel an : The_Coders.ger_Mag@usa.net (*) Bj.DesirE@usa.net P.S.: Die Artikel sollten in der Form in der ihr sie uns Schickt frei kopierbar sein. (*) Funktz evtl. noch nicht richtig (hat ASP gemanaged:) The friendly German coders channel ?!? Wie Ihr euch alle erinnern k”nnt, wurde der # gegrndet, um den Zust„nden auf #coders aus dem Weg zu gehen. D.h. Elitismus, unn”tiges Deopping und Banning etc. und berhaupt sehr rde Umgangsweise, fr die es oft keine Grnde gab. Auáerdem waren wir anfangs auch sehr freundlich zu Newbies. Was aber die letzte Zeit auf #coders.ger abgeht erinnert uns SEHR an die Zust„nde auf #coders, und auch an die Geschichte auf der Homepage. Auch die anf„nglich gepriesene und praktizierte Freund- lichkeit findet man nur noch selten. So h”rt man ”fters von Leuten, die einfach deopt werden, weil ein anderer sie nicht kennt (Auch Stammtalker!) bzw. irgendwelche anderen nach 2min im # geoppt, nur weil sie rumbetteln. Das kann nicht sein und darf auch nicht sein. Ihr erinnert euch bestimmt noch an die Mail, die Iron ber den Verteiler gejagt hat. So muáte er sich z.B. als Fotze o.Ä. beschimpfen lassen. Wir k”nnen ja verstehen, daá eine gewisse Angst besteht, daá der Channel bernommen wird (Takeover), aber genau dieses unfreundliche Verhalten mancher Leutz k”nnte Takeovers durch unrechtlich beschimpfte oder gedeoppte User provozieren. Und falls doch mal der # bernommen wird, kann man immer noch auf einen anderen Kanal, z.B. #coders.de, ausweichen (wie frher). Noch ein Paar Worte zum Bot (PinHead), ber den sich die letzte Zeit auch immer mehr beschwert wird: Der Bot wurde eingeschaltet, um eben u.A. auch Takeovers zu vermeiden und nich als Terrorist. Wobei es aber verwunderlich ist, daá irgendwelche Leutz pl”tzlich auf der #-deop-list oder gar auf der #-ban-list auftauchen und die es sich selbst nicht erkl„ren k”nnen. Bevor jemand auf diesen Listen auftaucht, muá er n„mlich erst mal irgendwelchen Scheiá gebaut haben. Man (Die Bot-Operatoren) sollten mit den entsprechenden Leutz erstmal darber reden, wenn sie sich assi verhalten und auch ber den Verteiler bekanntgeben, wer und WARUM auf einer der Liste steht. Nicht einer sollte entscheiden, sondern die Urstammuser sollten sich dazu „uáern k”nnen. PinHead hat nun auch ein Backup bekommen, KillerGER. Der Grund ist ganz einfach: Stellen wir uns den schlimmstm”glichen Takeover vor: Ein ver„rgerter User mit einem festen Account (Standleitung, Uni etc.) hat sich das mittlerweile wohl bekannte Script "How to hack IRC" durchgelesen, verf„hrt nach der dort gepriesenen Art und Weise (Kurze Erkl„rung: Es ist via Netsplit mit kleinen Tools m”glich, einen Channel zu bernehmen. Wie ist jetzt egal, aber es geht.) und hat dann ein Op, deopt via script s„mtliche anderen User, setzt einen ultimativen Channelban und macht dann nen ultimativen Channelkick. Danach stellt er einen eigenen Eggdrop (=Unix IRC-Bot, wie z.B. PinHead oder KillerGER) in den # und l„át ihn stehen solange er will, setzt noch verschiedene b”se Modes wie z.B. +i +s +m... Man kann sich denken, daá das nicht sch”n ist. Eben um diesem Netsplit vorzubeugen ist KillerGER auf einem anderen Server untergebracht. KillerGER und PinHead oppen sich gegenseitig oder so. Die Administratoren der Bots máten die Bots nur noch so konfigurieren soweit es m”glich ist, daá sie einen Netsplit bemerken und sofort ihr Nick nach Zu- fallsprinzip „ndern, so das der Bot schon mal gar nicht ber eine Nick-Kollision rausfliegen kann. Soviel dazu. ========================================================== FUN CORNER ========================================================== Leider gibts heute nix zu lachen :( Beteiligt euch !!! Doch noch was : Richter : Haben Sie noch was zu ihrer Verteidigung zu sagen, Angeklagter ? Creditcardfaker : VISA , die Freiheit nehm ich mir. ========================================================== NET CORNER ========================================================== [AnonMail 1.2 (schoenes eMail PRG.)] ftp://ftp.pnutsoftware.com [Postmark (geiles eMail PRG.)] http://www.anawave.com [Applet FX Freeware Edition v1.0 (Java fuer alle)] ftp://ftp.uni-heidelberg.de/pub/simtelnet/win95/java/afxfe10.zip [Die Workflow Messe in Duesseldorf] http://www.exponet.de +++ ZUM ORTSTARiF TELEFONiEREN? +++ - Hier die besten Programme! - FREETEL http://www.freetel.com iNTEL ViDEO PHONE http://www.intel.com VOX PHONE PRO http://www.voxware.com WEB PHONE (sehr empfehlenswert) http://www.netspeak.com NET MEETiNG http://www.microsoft.com COOL TALK http://home.netscape.com DiGi Phone (sehr empfehlenswert) http://www.planeteers.com ========================================================== TIPS & TRICKS ========================================================== Windows 95 : Icons editieren mit Doppelklick Wer schon mal versucht hat die Iconfiles mit einem Iconeditor ueber Ansicht, Optionen zu verbinden wird festgestellt haben, dass danach alle Icons das Icon vom Editor besitzen. Um das zu vermeiden : Mit Regedit.exe in \HKEY_CLASSES_ROOT\icofile folgende Schluessel eintragen : - Icofile - DefaultIcon - shell - open - command und unter command als Standartwert den Pfad und Namen des Iconeditors gefolgt von "%1" ADF Filetype anlegen (mit Konfigurationsmenue) In unsere Erstausgabe haben wir darauf hingewiesen das Uae fuer Win32 viel schneller ist als das Dos Pendant und euch gleich noch ein paar Icons mitgegeben. Heute wollen wir euch zeigen wie man sinnvoll einen Filetype dazu anlegt. Als erstes Erstellen wir eine Batch (Uaestart.bat) {Laufwerk}: cd {UAEPFAD} uaef -Q-1 -O640:480:XYd -Jm0 -S2:s -P128 -0%1 -w5 -f2 Dann gehen wir in einem beliebigen Ordner auf Ansicht, Optionen, Dateitypen Dann auf Neuer Dateityp erstellen dort einen Punkt ”ffnen erstellen und tragen als Anwendung Uaestart.bat ein. Nun erstellen wir noch einen 2. Punkt Einstellungen. Hier tragen wir als Anwendung {Pfad}\edit.com {Pfad}\Uaestart.bat ein. WWW TIPS: Ein echt nuetzlicher JavaSript der vollgendes bewirkt: Er aendert automatisch das Update-Datum eurer HomePage. Ist echt nuetzlich, denn wer hat schon lusten nach jedem update seiner HPage das Datum auf "jeder" Seite zu aendern. Das geschieht jetzt autom. nach den Abspeichern eurer Seite/n. ========================================================== TESTS ========================================================== Wir testen Packer fuer Sie : Bei allen Packern stellten wir maximale Kompression ein. Getestet haben wir Spiele, Anwendungen , Intros und Bilder. Die Tests : Test 1: Original Groesse : 66MB (Spiel) Programm gepackt Zeit WINRAR 2.0 34 MB 43 min Pkzip 2.04g 36 MB 5 min GnuZip 1.2.4 36 MB 5 min ARJ 36 MB 5 min zip+rar 26 MB 20 min Test 2: Original Groesse : 22MB (Spiel) Programm gepackt Zeit WINRAR 2.0 5 MB 10 min Pkzip 2.04g 6 MB 2 min ARJ 7 MB 2 min zip+rar 6 MB 4 min arj+rar 6 MB 5 min Test 3: Original Groesse : 20 MB (Anwendung (Netscape + Cache)) Programm gepackt Zeit WINRAR 2.0 10 MB 10 min Pkzip 2.04g 11 MB 2 min ARJ 11 MB 2 min zip+rar 11 MB 6 min arj+rar 11 MB 3 min Test 4: Original Groesse : 64 KB (64 k Intro) Programm gepackt Zeit WINRAR 2.0 63 KB - Pkzip 2.04g 64 KB - ARJ 64 KB - Test 5: Original Groesse : 10 MB (Bilder) Programm gepackt Zeit WINRAR 2.0 5 MB 1 min WINRAR 2.0 5 MB 4 min (multimedia compression) 100k kleiner Pkzip 2.04g 5 MB 1 min ARJ 5 MB 1 min zip+rar 5 MB 4 min Fazit : RAR packt am besten ist aber auch der langsamste Packer Unter sehr guenstigen Umstaenden bringt ein vorheriges packen mit Zip nochmals erheblich bessere Packraten (Test 1) Die Multimedia Kompression bei RAR wahr eher enttaeuschend An zweiter Stelle folgt Pkzip der in der Geschwindigkeit erheblich besser ist als RAR. ARJ ist nur unmerklich schlechter als Pkzip (wenige KB). ========================================================== KURSE ========================================================== C - Kurs Teil 2 - Formatierte Ein/Ausgabe Willkommen beim zweiten Teil unseres C - Kurses fuer Anfaenger. Nachdem wir uns in der letzten Ausgabe mit allgemeinen Dingen beschaeftigt haben kommen wir nun zur formatierten ein Ausgabe. Beispiel 2.1 : #include main () { printf ("5 und 5 ist %d",10); } Ausgabe 2.1 : 5 und 5 ist 10 Printf kennen wir ja schon zur Ausgabe von Strings. (Printf = Print formated) %d ist eine Formatangabe. Sie gibt an, dass das Ergebnis des folgenden Ausdrucks als Dezimalzahl interpretiert werden soll. Beispiel 2.2 und 2.3 haben die selbe Ausgabe. Beispiel 2.2 : ... { printf ("5 und 5 ist %d",5+5); } Beispiel 2.3 : ... { printf ("%d und %d ist %d",5,5,10); } Beispiel 2.4 enspricht Beispiel 2.3 nur mit Variablen. Beispiel 2.4 : include int j; main () { int i; i=5; j=10; printf ("%d und %d ist %d",i,i,j); } "int j" deklariert eine globale Variable, sie ist von allen Funktionen genutzt werden. "int j" ist eine lokale Variable, sie kann nur von der Funktion genutzt werden in der sie deklariert wurde. Globale Variablen werden in C auf dem Heap angelegt, lokale auf dem Stack. (Man beachte das der HEAP viel groesser ist als der STACK (wenn man die Stdompilersetings nicht aendert)) Beispiel 2.5 : include int j; main () { printf ("%d %u",-2,-2); } Ausgabe 2.5 : -2 2 Wie man in Tabelle 2.1 sehen kann, steht %u fuer eine unsigned variable, das Vorzeichen wird vom Compiler also nicht beachtet. Tabelle 2.1 : Formatangaben fr printf %d,%i Ganze Dezimalzahl %u Vorzeichenlose Dezimalzahl %o Oktalzahl %x,%X Hex Zahl %c AscII Zeichen %f Gleitkommazahl %e,%E Gleitkommazahl in E Schreibweise %g,%G Gleitkommazahl in Formaten %f oder %e %s Zeichenkette %p Zeiger %% Prozentzeichen Ausgeben Genauigkeitsangaben Printf kann noch mehr. Beispiel 2.6 : ... { printf ("%5.3f %5.1f",3.333, 3.333); } Ausgabe 2.6 : 3.333 3.3 Mit %x.yf kann man mit x die vorkommastellen und mit y nachkommastellen angeben. Aber nun zur Eingabefunktion scanf. Beispiel 2.7 : #include main () { int a,b,c; printf ("Geben Sie bitte 3 Zahlen ein"); scanf ("%d%d%d",&a,&b,&c); } Beispiel 2.7 liest 3 dezimalzahlen in a , b und c ein. '&' ist der Adressoperator er liefert die Adresse der folgenden Variable. Erlaubte Trennzeichen sind Space, Return und Tab. Tabelle 2.2 : Formatangaben fuer scanf %d Ganze Dezimalzahl (int) %hd " " (short) %ld " " (long) %i Ganze Zahl (int) zzz dezimal 0zzz oktal 0xzzz hexdezimal %u %d ohne vorzeichen %hu wie oben nur ohne Vorzeichen (short) %lu " (long) %o Ganze Oktalzahl %ho wie oben (short) %lo wie oben (long) %x hexdezimal Zahl %hx %lx %c ascii Zeichen %f Gleitkomma (float) %lf Gleitkomma (double) %Lf Gleitkomma (long double) %e,%E Gleitkomma (float) in Exponentialschreibweise %le,%lE " (double) " %s Zeichenkette %p Zeiger %n Anzahl der bis dahin eingelesen Zeichen Beispiel 2.8 : ... { long int zahl; int anzahl; scanf ("%ld %n",&zahl,&anzahl); printf ("Sie hanben %d Zeichen eingeben",anzahl); } Ausgabe 2.8 : 1235 Sie haben 4 Zeichen eingegeben Man kann die laenge der eingabe durch %x auf x Zeichen begrenzen ( scanf ("%3d",intZahl); liest eine 3 stellige Integerzahl ein.) Scanf kann man auch zulaessige Zeichen uebergeben. Statt eines Kennbuchstabens gibt man dann nur die zulaessigen zeichen in '[',']' an. Beispiel 2.9 : { char string [255] scanf ("%[0123456789]",string); } Beispiel 2.9 liest nur zeichen von 0 bis 9 ein. Beispiel 2.10 : { char string [255] scanf ("%[^\n]",string); } Beispiel 2.10 liest bis zum naechsten return ein. Normalerweise (mit %s) wird nur bis zum naechsten Space, Tab oder Return eingelesen. --- Hugi Assembler Kurs Teil 1 (Folge 1 + 2) Dieser Artikel wurde uns freundlicherweise von Adok/Hugi Diskmag zur verfuegung gestellt. Der Kurs "Adok's Way to Assembler" ist Freeware. Das heisst, dass er in unveraenderter Form frei kopiert und weitergegeben werden kann. Das Copyright liegt bei Adok (Claus-Dieter Volko). (nochmals herzlichen Dank Adok) Adok's Way to Assembler Folge 1 Hier ist mein Kurs fr alle, die Assembler lernen wollen! Wir fangen praktisch bei Null an, so daá jeder anfangen kann, egal ob er Einsteiger oder Programmier-Profi ist. Voraussetzung fr diesen Kurs ist es, daá ihr einen Assembler habt. Im Kurs selbst beziehe ich mich auf den Turbo Assembler (TASM), der den meisten Borland-Programmiersprachen kostenlos beiliegt. Falls ihr den Turbo Assembler nicht habt, k”nnt ihr auch den kompatiblen Microsoft Makroassembler (MASM) verwenden, bei dem allerdings die Kommandozeilenaufrufe zum Compilieren und Linken anders aussehen. +++ Unser Komm-Puter +++ So, beginnen wir einmal mit einem kurzen Überblick ber das Innere des Compis. Das Herz des Computers ist der Prozessor, auch CPU genannt. Hier werden die Assemblerbefehle verarbeitet. Das funktioniert, einmal ganz grob gesagt, folgendermaáen: Der Prozessor ist in zwei Teile geteilt. Der eine Teil holt sich die Befehle aus dem Arbeitsspeicher und gibt sie in die Warteschlange des Prozessors. Der zweite Teil des Prozessors holt sich dann der Reihe nach die Befehle aus der Warteschlange, bersetzt und verarbeitet sie. Dabei spricht er, je nach Befehl, den Arbeitsspeicher an, rechnet einfache arithmetische Operationen aus oder gibt den Befehl an die Peripherieger„te weiter. Das ist im Moment alles, was wir ber den Prozessor wissen mssen. Weiter geht's mit dem Arbeitsspeicher, dem RAM. Wie wohl jeder weiá, kann man diesen Speicher frei beschreiben und lesen, nur gehen die Informationen nach dem Ausschalten wieder verloren. Jede Speicherstelle im RAM wird Adresse genannt. +++ DOS' Speicheradressierung +++ Bei dieser Gelegenheit k”nnen wir gleich die Speicheradressierung von DOS besprechen: Da in DOS 1 MB Speicher adressiert werden kann, im Real Mode (dem Prozessormodus, in welchem DOS normalweise arbeitet) die Adreáleitung jedoch nur 16 Bit breit ist (fr 1 MB Speicher br„uchte man 20 Bit), muá man ein biáchen tricksen. Der Speicher wird in DOS nicht linear, sondern ber ein Segment und einen Offset adressiert. Das Segment wird mit 16 multipliziert und der Offset dazuaddiert - dann hat man die "physikalische" Adresse. Ein Segment ist 64 KByte groá. Folglich kann die Offsetadresse zwischen 0h und FFFFh (eine Hexadezimalzahl, welche der Dezimalzahl 65535 entspricht) groá sein. Das Segment kann ebenfalls 0h bis FFFFh sein. Wenn man mal nachrechnet, ergibt sich, daá manche Segment-Offsetkombinationen einander berschneiden. Aber gehen wir vorl„ufig nicht darauf ein, damit es nicht zu kompliziert wird. Jau, und die Adresse wird immer in der Form xxxx:xxxx geschrieben, und zwar in hexadezimalen Zahlen, da diese die Basis 16 haben und man somit leichter die physikalische Adresse berechnen kann! Falls jemand nur Bahnhof versteht: In unserem dezimalen Zahlensystem haben wir die Basis 10. Wir haben auch zehn Ziffern: von 0 bis 9. Die Dezimalzahl 10 ist, wie wohl jedes Baby weiá, zehn. Beim Hexadezimalsystem mit der Basis 16 haben wir auch 16 Ziffern. Man verwendet hierbei nach der 9 die Buchstaben A bis F, also geht das Hex-System von 0 bis F. Nach F folgt dann 10, und diese Zahl ist im Hexadezimalsystem nicht zehn, sondern sechzehn! Zur besseren Unterscheidung schreibt man deshalb nach jeder Hexadezimalzahl ein kleines h. Alles klar? Wenn nicht, schaut in einem Mathe-Lexikon nach! +++ E/A-Ports +++ Weiters finden wir im PC die Peripherieger„te (Drucker, Monitor, Tastatur & Co.) und Zusatzkarten. (Nicht Asse, Piks und Konsorten, sondern Soundkarte, Grafikkarte und so weiter! ;) ) Diese Teile werden alle ber die E/A-Ports angesprochen. So, das w„re einmal alles, was wir ber das Innere des Compis wissen mssen! Bevor wir das erste Assembler-Programm schreiben k”nnen, mssen wir jedoch noch etwas Theorie lernen... +++ Register +++ Register - genauer gesagt, Prozessorregister, denn auch die Grafikkarte und andere Peripherie kann eigene Register haben - sind eigentlich 16-Bit-breite Integer-Variablen, die Werte von 0 bis 65535 annehmen k”nnen, nur sind sie schneller als normale Variablen (die ja im Hauptspeicher abgelegt werden), weil die Register ein Bestandteil des Prozessors sind. Es gibt mehrere Arten von Registern: - Allgemeine Register: Diese sind frei verwendbar, allerdings mssen bei manchen ASM-Befehlen in ihnen bestimmte Werte stehen. Folgende Register werden bei folgenden Befehlen zu folgendem Zweck benutzt: AX = Meistbenutztes allgemeines Reg. Bei Interrupt-Aufrufen (Erkl„rung folgt sp„ter) steht hier meistens die Funktionsnummer. Auáerdem wird AX fr manche Rechenoperationen ben”tigt. BX = Parameter fr Interrupts, indirekte Adressierung (z.B. beim MOV-Befehl, den wir noch SPÄTER besprechen werden). CX = Z„hlreg fr Schleifen. DX = Wird von Befehlen, die die E/A-Ports ansprechen, verwendet. Auáerdem wird das DX-Register auch von einigen Rechenoperationen verwendet, wenn AX "nicht mehr reicht". Jedes allgemeine Reg l„át sich in zwei 8-Bit-Regs teilen, die dann nicht mit X, sondern mit H bzw. L enden. Genauer gesagt: Ein 16-Bit-Reg wie AX l„át sich als vierstellige Hexadezimalzahl darstellen. Die oberen zwei Stellen (Hi-Byte) sind AH, die unteren (Lo-Byte) AL. Somit drfte auch gekl„rt sein, wozu Hexadezimalzahlen gut sind: 8 Bit (1 Byte) lassen sich durch zwei Hex-Stellen, 16 Bit (1 Word) durch vier Hex-Stellen darstellen. Noch ein Beispiel zur Vertiefung: AX = 1234h => AH = 12h, AL = 34h. - Segmentregister: Was die Segmente sind, haben wir ja schon bei der Adressierung des Arbeitsspeichers in DOS gekl„rt. In diesen Segmentregistern wird nun die Segmentadresse des jeweiligen Segments (schon wieder so ein Wortspiel) angegeben. Dabei gibt es mehrere Segmente, die fr verschiedene Aufgaben GEDACHT sind. Ich sage 'gedacht', weil man sie auch fr andere Zwecke miábrauchen kann! So lassen sich mit einem einfachen Trick Variablen auch im Codesegment anlegen. Dann kann man gleich ein Segment einsparen, was fr COM-Dateien essentiell ist - siehe unten. Doch nun zur Übersicht, damit jeder versteht, wovon ich quassle. CS = Zeigt auf das Codesegment, in dem (normalerweise, hehe) die ASM-Befehle eines Proggys (also das eigentliche Proggy) steh[en/t]. DS = Zeigt auf das Datensegment, in dem die Variablen des Proggys stehen. ES = Kann auf ein beliebiges Segment im RAM zeigen, das frei verwendet werden darf! SS = Zeigt auf das Stacksegment, in dem meistens Daten tempor„r zwischengespeichert werden. WICHTIG: COM-Dateien drfen nur ein Segment haben, n„mlich das Codesegment! Deshalb muá man etwas tricksen, wenn man Variablen in COMs verwenden will. Das werden wir aber noch sp„ter besprechen. - Weitere Register, die man meistens frei verwenden kann, sind BP, SI und DI. BP wird in Hochsprachen zum Adressieren von Variablen verwendet, SI und DI finden vor allem bei den Stringbefehlen ihre Verwendung. Abzuraten ist jedoch von IP (zeigt auf die n„chste Anweisung im Programm) und SP (zeigt auf die aktuelle Position im Stack)! Wer diese ver„ndert, muá mindestens mit einem Absturz rechnen, wenn nicht etwas noch schlimmeren! So, nun zu den... +++ Interrupts +++ Interrupts sind, mal oberfl„chlich betrachtet, stinknormale Unterprogramme. Doch es gibt zwei Arten von Interrupts: - Hardware-Interrupts und - (tatatatamm) Software-Interrupts! Hardware-Interrupts werden immer automatisch durch ein bestimmtes Ereignis ausgel”st. Zum Beispiel wird beim Drcken einer Taste der Tastaturinterrupt ausgel”st, der dann herausfindet, welche Taste gedrckt wurde, und sie in den Tastaturpuffer speichert. Das geht so schnell, daá ein normaler User gar nix davon merkt! Wenn man das Ganze genauer betrachtet, gibt's zwei Arten von Hardware- Interrupts: W„hrend die wenigen nicht-maskierbaren Interrupts IMMER ausgel”st werden, kann man die maskierbaren Interrupts mit dem Assembler-Befehl CLI abschalten und mit STI wieder einschalten. Das zweite sind die Software-Interrupts, die keine Interrupts in dem Sinn sind, sondern wirklich nur Unterroutinen! Sie werden vom BIOS und vom DOS bereitgestellt und dienen haupts„chlich dazu, dem Coder bei der ohnehin harten Arbeit ein wenig zu untersttzen. So beinhaltet der Interrupt 33h viele Funktionen, mit denen man ohne groáe Schwierigkeiten Maussteuerung programmieren kann. Die Software-Interrupts werden in Assembler mit dem Befehl INT aufgerufen. Danach folgt die Nummer des Interrupts. Viele Interrupts haben mehrere Funktionen. So kann der BIOS-Interrupt 10h den Bildschirmmodus wechseln, den Bildschirmmodus abfragen, Text ausgeben, den Cursor positionieren und vieles mehr. Deshalb ben”tigt man eine Funktionsnummer. Sie muá meistens im AH- Register (Erinnert ihr euch? AH ist das Hi-Byte von AX!) bergeben werden, nur beim Interrupt 33h im "groáen" AX. Die Parameter fr die Interrupts werden in den anderen Registern bergeben. Welche das sind, ist von Interrupt zu Interrupt verschieden. Auáerdem haben einige Interrupts sogar Unterfunktionen und Unter-Unterfunktionen und Unter-Unter-Unter... Diese werden meistens in AL bergeben. So, das war die Theorie! Mit diesem Wissen werden wir das Beispielprogramm, das in der n„chsten Folge kommt, viel besser verstehen. Bis dahin noch viiiiel Spaá wnscht euch Adok! Adok's Way to Assembler Folge 2 Nun sind wir endlich bei unserem ersten Beispielprogramm angelangt! MODEL TINY ;Fr COM-Files CODE SEGMENT ;Beginn Code-Seg ASSUME CS:CODE;Zuweisung an CS ORG 100h ;Startadresse COM start: ;Startlabel MOV AX,0902h ;Funkt. 9h, ASCII-Code 2h MOV BX,15 ;Farbcode Weiá MOV CX,1 ;Anzahl der Zeichen = 1 INT 10h ;Zeichen auf Screen bringen MOV AX,4C00h ;Funkt. 4Ch INT 21h ;DOS-Exit CODE ENDS ;Ende Code-Seg END start ;Ende des Proggys Um aus diesem Listing eine ausfhrbare COM-Datei zu erzeugen, tippt es mit dem MS-DOS-Editor ab, speichert es in eurem TASM-Verzeichnis ab und gebt unter DOS folgendes ein: TASM /T/L progname => erzeugt die Datei progname.OBJ TLINK progname /t => linkt die OBJ-Datei zu COM 'progname' steht hierbei fr den Namen des Programms ohne Dateierweiterung. Habt ihr das Listing beispielsweise als KURS0001.ASM gespeichert, mát ihr statt progname KURS0001 schreiben. +++ Interrupt 10h Funktion 9 +++ Wenn ihr anschlieáend das COM-File startet, erscheint ein sch”ner Smiley auf eurem Bildschirm! Wie funktioniert das? Ganz einfach: Das Proggy benutzt den Funktion 9 des Interrupts 10h, welche ein einzelnes Zeichen auf dem Bildschirm ausgibt, ohne die Cursorposition zu „ndern. Das heiát, wenn danach noch einmal dieser Interrupt aufgerufen wird, berschreibt das neue das alte Zeichen. So funktioniert's: AH=9, AL=ASCII-Code des Zeichens (im Beispiel 2), BH=Nummer der Bildschirmseite, auf die geschrieben werden soll (i.B. 0), BL=Farbattribut des Zeichens (i.B. 15), CX=wie oft das Zeichen ausgegeben werden soll (i.B. 1). Doch bevor wir auf den "Sinn" des Programms n„her eingehen, schauen wir uns an Hand dieses Beispiels den Aufbau einer COM-Datei an. +++ Aufbau einer COM-Datei +++ Zeile 1: MODEL TINY Gibt das Speichermodell an. Fr COMs kommt nur TINY in Frage. Fr EXEs gibt's auch: SMALL: Codeseg und Dataseg zusammen kleiner 64 KB MEDIUM: Code < 64 KB, Summe aller Datasegs > 64 KB COMPACT: ein Codeseg, mehrere Datasegs LARGE: Summe der Segmente > 64 KB HUGE: alles ist erlaubt! Summe bedeutet, daá das Proggy mehrere Codesegmente, Datasegmente,... haben kann, aber ein einzelnes Seg nicht gr”áer als 64 KB sein darf. Zeile 2: CODE SEGMENT: Das ist der Anfang des Codesegs, in dem (normaler- weise) die Befehle eines Programms stehen! Zeile 3: ASSUME CS:CODE Dadurch wird dem CS-Register befohlen, auf das Code- segment zu zeigen. Zeile 4: ORG 100h Besonders wichtig bei COM-Dateien! Diese beginnen immer bei der Adresse CS:100h. (Erinnert ihr euch? Das ist Segment:Offset-Schreibweise!) Der Grund dafr ist, daá DOS beim Starten eines Programms ein soge- nanntes PSP einfgt, das von CS:0 bis CS:FFh reicht. Zeile 5: start: Ein Label! Genauso wie in Basic bestehen sie aus einem Namen und einem Doppelpunkt. Jede COM-Datei ben”tigt ein solches Label am Anfang des Programms. Bei EXEs ist es nicht notwendig. Man kann natrlich auch innerhalb des Programms Labels verwenden, die sich mit den verschiedenen Jump-Befehlen anspringen lassen. Zeile 12: CODE ENDS Ende des Codesegs. Zeile 13: END start Ende des Programms. +++ Der MOV-Befehl und seine Varianten +++ So, das ist es! Auf den ersten Blick scheint es sehr viel zu sein, ist es aber nicht. Nun zum eigentlichen Programm... Die 6. Zeile lautet MOV AX,0902h. Hier haben wir einen neuen ASM-Befehl. MOV entspricht der Zuweisung in Hochsprachen, man kann damit einer Speicheradresse oder Register einen Wert zuweisen. Syntax: MOV Ziel,Quelle. Die Quelle ist der Wert, der dem Ziel zugewiesen werden soll. Dabei gibt es mehrere Varianten: MOV AX,0902h Eine Konstante wird einem allgemeinen Register zugewiesen. MOV AX,BX Der Inhalt eines allgemeinen Registers wird einem anderen allgemeinen Reg zugewiesen. MOV AX,[0A000h] Einem allgemeinen Reg wird der Inhalt der Speicherstelle DS:0A000h zugewiesen. Was in eckigen Klammern steht, ist also der Offset. MOV AX,ES:[0A000h] Mit Segment-Override: Statt DS:0A000h wird AX der Inhalt von ES:0A000h zugewiesen. MOV AX,[BX] Besonders tricky: indirekte Adressierung. AX wird der Inhalt der Speicherstelle zugewiesen, deren Segment DS und deren Offset der Inhalt von BX sind. Ist BX also beispielsweise 1000h, wird AX der Inhalt von DS:1000h zugewiesen. Doch Vorsicht: Die indirekte Adressierung funktioniert nur mit einigen Registern wie BX und BP! Man kann also nicht MOV AX,[DX] schreiben. Dafr geht indirekte Adressierung auch mit Segment Override. MOV WORD PTR 1000h,AX Der Inhalt von AX wird auf die Speicherstelle DS:1000h geschreiben. MOV AX,0 HOT TIP! Diese Variante ist zwar nicht verboten, aber es gibt eine viel schnellere M”glichkeit, ein allgemeines Register auf 0 zu setzen: XOR AX,AX! Hiermit wird eine XOR-Bitverknpfung zwischen AX und sich selbst durchge- fhrt. Folge: Der Inhalt von AX wird gel”scht. Folgende Varianten funktionieren jedoch NICHT: MOV ES,0A000h Einem Segmentregister kann keine Konstante oder der Inhalt einer Speicherstelle zugewiesen werden! Hier muá man den Umweg mit einem allgemeinen Register machen, also: MOV CX,0A000h und dann MOV ES,CX. MOV DX,[AX] Indirekte Adressierung funktioniert nur mit Registern wie BX, BP, DI und SI. Noch etwas zu WORD PTR: Wenn man einer Speicherstelle/Variablen etwas zuweist oder ihren Inhalt einem Register zuweist, ist es manchmal unklar, ob ein Byte oder ein Word (2 Bytes) gelesen/geschrieben werden soll. Aus diesem Grund kann man vor einer Speicherstelle BYTE PTR bzw. WORD PTR schreiben. Beispiel: MOV WORD PTR 1000h,AX schreibt 2 Bytes an die Adresse 1000h. Dadurch wird auch der Inhalt der Adresse 1001h ver„ndert! MOV BYTE PTR 1000h,AL schreibt 1 Byte an die Adresse 1000h. Hier bleibt die Adresse 1001h unver„ndert. +++ Zum Beispielprogramm +++ ENDLICH! Das hat gedauert. Aber Theorie muá sein, besonders in Assembler. Nun k”nnen wir uns das Proggy unter die Lupe nehmen. Zeile 6: MOV AX,0902h Damit wird AX der Wert 0902h zugewiesen. Hm, was soll das bedeuten? Genau nachdenken, bevor ihr weiterlest! Ein Tip: Um ein Zeichen mittels INT 10h Funktion (Ufo :-) ) 9 auszugeben, mssen in AH die Funktions- nummer (also 9) und in AL der ASCII-Code stehen. AH und AL sind... Na, ein Licht aufgegangen? Richtig, AH ist das Hi- und AL das Lo-Byte von AX! Wie wir in Folge 1 festgestellt haben, ist ein Word vier Hex- Stellen groá. Die oberen zwei sind das Hi-, die unteren das Lo-Byte. Genau das ntzen wir hier aus: Wenn wir AX die vierstellige Hex-Zahl 0902h zuweisen, erh„lt automatisch AH den Wert 9 und AL 2. Das spart einige Nanosekunden Rechenzeit! (Wir ASM-Coder sind alle so optimierungswtig... :-) ) Zeile 7: MOV BX,15 Weist BX den Wert 15 zu. Damit wenden wir den Trick noch einmal an: BL erh„lt den Farbcode von Weiá, und BH (die Bildschirmseite) wird auf 0 gesetzt. Zeile 8: MOV CX,1 Weist CX den Wert 1 zu. Also wird das Zeichen nur einmal ausgegeben. Zeile 9: INT 10h Ruft den Interrupt 10h auf, der den Smiley ausgibt! +++ Interrupt 21h Funktion 4Ch +++ Gaaaanz wichtig sind Zeilen 10 und 11! Diese rufen den Interrupt 21h Ufo 4Ch auf. Dieser beendet das Programm und gibt den Wert, der sich in AL befindet, als Errorlevel zurck. Der Errorlevel kann dann beispielsweise von BAT-Dateien mit IF ERRORLEVEL GOTO abgefragt werden. Wenn ihr diesen Interrupt am Ende des Programms vergeát, wird das Programm nicht beendet, und der Computer fhrt die Befehle aus, die sich im Speicher NACH dem Programm befinden - das kann leicht zu einem Systemabsturz fhren! Das wars... Moment, die Strichpunkte, die Semikolons. Das sind nichts anderes als Kommentare. Und somit ist Schluá fr heute. Bis zur dritten Folge viel Spaá wnscht euch (wieder einmal) euer Adok! --- Die V-FAT: Verzeichnisstruktur Wenn man sich die Verzeichnisstruktur mal mit einem Diskeditor anschaut, so kann man ohne groáen Afwand sehen wie in etwa die V-FAT aufgebaut ist und mit etwas Geschick die langen Dateinamen auch fr den reinen MS-DOS-Modus benutzen. Folgende Bytes sind dabei fr den Zusammenhang der einzuelnen Komponenten der Namen zust„ndig: Byte Beschreibung 01 Highnibble: 0 Anfang oder Fortsetzung eines LFN 4 Letztes Teilstueck des LFN Lownibble: gibt Nummer des Teilstckes an 16 Ist bei allen Teilen eines LFN gleich Jedes 2. Byte ist generell ein Zeichen des LFN. Habt Ihr noch mehr Informationen zu diesen Themen? Mail an The_coders.ger_mag@usa.net MEMBERS OF . + . . + . . + . /\ /\ /\ /\ /\ /\ . + + / \ / \ / \ \ \ / \ / \ . . / /\ \/ /\ \/ /\ \ / \/ /\ \/ /\ \ ____________/ / / / \ \/\ \ \/ / /\/ \/ / \ \/____________ / / / / /\/ /\ \ \/\/ / / \ / /\/ . \ \/ /\ \ \ \/ /\ / / /\/\/\ \ . . \ / \ \ + \ / \ \ \/ /\ \ \ \/ \/ \/ \/ \/ \/ . . . Section Germany . BJ: bdietri@student.uni-kl.de . KJELL: kjell@metronet.de . + WOLFSKIN: Wolfskin@earthling.net . . ASP: The_mighty_ASP@t-online.de + + PODI: podlech@informatik.uni-muenchen.de . CARDIAC: lewerentz@informatik.uni-rostock.de + . REALTIME: sievers@mainz-online.de . + . + DISKRUNNER: memrich@informatik.uni-kl.de . . + ^ . / \ . ^ . ^ / \ / / \ . / \ ^ / /\ / http://home.pages.de/~DesirE/ \ /\ /\/\/\ / /\ \ / \/ \ /\ \ // \ /\ / \_/ \/\ / / \ \/ / \/\/ \ \/ \/ \/ \___/ \/