...CodesegmentregisterDSDatensegmentregisterESExtrase
gmentregisterSSStacksegmentregisterDie Segmentregister beinhalten die Anfangsadressen der Segmente, die der Prozessor braucht. Ihre Breite betrgt immer 16 Bit. Man kann sie nur auslesen und beschreiben.1.3 Indexregister15 0SIsource index registerDIdestination index registerDiese Register knnen benutzt erden, enn ein Zeiger auf eine Datenstruktur bentigt ird. Sie erden bei String-Befehlen gebraucht.1.4 Pointer Register15 0SPstack pointer registerBPbase pointer registerDiese beiden sind auch Index-Register, sie zeigen jedoch auf eine Struktur, die der Prozessor intern bei bestimmten Arten der Adressierung bentigt.1.5 Instruction Pointer Register15 0IPinstruction pointer registerDieses Register ist zar eines der ichtigsten Register berhaupt, denn in ihm merkt sich der Prozessor, an elcher Stelle im Programm er sich gerade befindet, as also als nchster Befehl abgearbeitet erden soll. Dennoch knnen ir nichts mit diesem Register anfangen, da es ausschlielich intern durch den Prozessor verndert ird.1.6 Flag Register15 0Fflag registerBei der Abarbeitung bestimmter Befehle verndert der Prozessor dessen Inhalt. Dies ermglicht eine geisse Art der Kommunikation zischen Prozessor und Programmierer. Das Flag Register lt sich sogar teileise manipulieren. Von den 16 Bits haben nicht alle eine Bedeutung.15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0O D I T S Z A P CAn Bit 11 dieses Registers befindet sich das overflo flag. Dieses Flag ird vom Prozessor immer dann gesetzt, enn nach einer Operation ein berlauf stattgefunden hat. Das direction flag an Stelle 10, das interrupt enable flag an Stelle 9 und das trap oder single step flag an Stelle 8 haben bestimmte Aufgaben, die jedoch fr den Programmierer unichtig sind. Das sign flag 7, das zero flag 6, das auxiliary flag 4 und das parity flag 2 spiegeln bestimmte Eigenschaften von Registerinhalten nach verschiedenen Operationen ieder. Gemeinsam mit dem carry flag 0 sind sie fr den Programmierer die ichtigsten Flags.2 Der AdreraumDer Adreraum ist der Bereich des Speichers, den der Prozessor ansprechen kann, in dem er also Daten ablegen, und aus dem er sie ieder lesen kann. Eng verknpft mit dem Begriff Adreraum sind auch die Begriffe Datenbus und Adrebus.Der Datenbus ist die Menge aller Datenleitungen, ber die der Prozessor Daten aus dem Speicher holen, oder in den Speicher ablegen kann. Die Architekturen 80386, 80486 und Pentium haben einen 32-Bit-Datenbus.Der Adrebus ist die Summe aller Adreleitungen, ber die ein Prozessor verfgt. In unserem Fall sind dies 20 Stck.Mit 20 Adreleitungen ist ein MB Speicher ansprechbar, es ergibt sich jedoch das Problem, da die Register maximal 16 Bit breit sind, desegen passen die Adressen des gesamten Adrebus nicht in ein Register. Als Lsung erden zei Register zu je 16 Bit verendet 32 Bit, as jedoch zlf ungenutzte Bit mit sich bringt. Bei Intel kam man deshalb auf die Idee der Speichersegmentierung.2.1 SpeichersegmentierungEin Segment ist eine bestimmte Anzahl von Bytes hnlich einem Array i0...Xs. Im Prozessor gibt es ein Register, das die Nummer eines solchen Segments aufnehmen kann. Ein solches Register ist 16 Bit breit. Der gesamte Speicher lt sich so als zeidimensionales Array ansehen. Die Gre eines Segments erhlt man durch die Division der maximalen Gre des Adreraums 2 durch die maximale Anzahl von Segmenten 2 . Als Ergebnis erhlt man 16, as bedeutet, da durch die Segmentierung des Speichers in Blcke zu je 16 Bytes der gesamte Adreraum ansprechbar ist. Dazu mu man nur die Nummer des Segments in das genschte Segmentregister schreiben, zB Segment 0 fr die ersten 16 Bytes, Segment 1 fr die nchsten 16 Bytes,...Die Segmentgrenzen befinden sich zischen den Bytes 15 und 16, den Bytes 31 und 32, us. Diese Segmentgrenzen erden in die Segmentregister eingetragen. Um auf ein bestimmtes Byte zuzugreifen bentigt man noch ein zeites Register Zeigerregister, das auf das genschte Byte zeigt.Die Berechnung der Adresse eines Bytes im Speicher erfolgt folgendermaenAdresse Segmentnummer 16 Zeiger3 DatentypenIm Grunde genommen gibt es 5 verschiedene Daten-Typen, durch Programmierung sind aber auch andere erzielbar.DatentypGre in BitsBit1Byte8ort16langes ort32gepackte, binr-codierte Dezimalzahlen4Durch Routinen knnen noch Datentypen bis zu einer Gre von 128 Bits erreicht erden.4 Adressierungsartena unmittelbare AdressierungHier erfolgt keine Adressierung im eigentlichen Sinne. Der Operand ird direkt im Operandenteil des Befehls angegeben.z.B. der Befehl ADD AX, 12 addiert 12 zum Inhalt des Registers AXb direkte AdressierungDie Adresse des Operanden ird durch eine symbolische Adresse angegeben.z.B. der Befehl ADD AX, SUMME beirkt, da der Inhalt der Speicherzelle SUMME zum Inhalt des Registers AX addiert irdc indirekte AdressierungDie Adresse des Operanden ird durch den Inhalt eines Registers angegeben.z.B. der Befehl ADD AX, iSIs beirkt, da der Inhalt der Speicherzelle, deren Adresse im Register SI steht, zum Inhalt des Registers AX addiert irdd Basis-Adressierung und indizierte AdressierungDie Adresse des Operanden ird durch eine symbolische Adresse und dem Inhalt eines Registers berechnet.z.B. der Befehl ADD AX, SUMMEiSIs beirkt, da der Inhalt der Speicherzelle, deren Adresse, fr die SUMME steht, und dem Inhalt des Registers SI ermittelt ird, zum Inhalt des Registers AX addiert ird5 Der Befehlssatz5.1 Ein- und AusgabeoperationenDie Daten sind im Datensegment aufgehoben. Dessen Adresse ird im data segment register DS-Register aufgehoben. Der Prozessor kann anhand des Inhalts des DS-Registers feststellen, in elchem Segment des RAMs die Daten zu suchen sind.LEA Dieser Befehl liefert das genschte Datum im Segment an den ProzessorLEA reg, adr. der Offset-Anteil der Adresse des 2. Operanden ird in das Register eingetragenLDS und LES beirken das selbe ie LEA, nur da sie die vollstndige Adresse in das Register eintragen, anstatt nur den Offset-AnteilMOV Dies ist ein sehr ichtiger Befehl. Mit ihm knnen soohl Daten von einem Register in ein anderes kopiert erden, Daten aus einer Speicherstelle in ein Register des Prozessors geladen erden, als auch Daten von einem Register auf eine Speicherstelle geschrieben erden.MOV Ziel, Quelle MOV AH, ALHLHLA4711A47114711XCHG Dieser Befehl kopiert nicht Daten von einer Quelle in das Ziel, sondern er vertauscht die beiden Daten.PUSH Mit diesem Befehl ird ein Register-Variableninhalt auf den Stapel Stack abgelegtPOP Dieser Befehl holt das oberste Datum vom Stack herunter5.2 VergleichsoperationenCMP Dieser Befehl beirkt einen arithmetischen Vergleich zeier OperandenDer Befehl arbeitet ie eine Subtraktion, d.h. der 2. Operand ird vom 1. abgezogen. Die Ausertung des Ergebnis erfolgt durch die Vernderung bestimmter Flags. Register und Speicherstellen bleiben unverndert.z zero flag ird gesetzt, enn das Ergebnis der Subtraktion 0 arc carry flag ird gesetzt, enn beide Zahlen ohne Vorzeichen aren, und der 1. Operand kleiner ar als der 2.o overflo flag enn der...
Download