----> 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/ \ /\ /\/\/\
/ /\ \ / \/ \ /\ \ // \ /\ / \_/ \/\ /
/ \ \/ / \/\/ \ \/ \/ \/ \___/ \/