Zum neuen Informatik-Forum >>
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Flags

 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> Assembler
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
j_on_linux



Anmeldungsdatum: 28.04.2006
Beiträge: 3
Wohnort: Hildesheim

BeitragVerfasst am: 21. Jun 2006 18:34    Titel: Flags Antworten mit Zitat

Hallo,

wir arbeiten in technsicher informatik grade mit assembler, bzw. arbeiten wir uns dort ein. nun habe ich eine frage:

wozu braucht man flags dort bzw. im allgemeinen? (zero-flag, carry-flags)
kennt jmd im übrigen noch eine gute seite für die befehle? wir bekommen ein kleines programm und sollen dann erklären welcher befehl was macht...

über hilfe wäre ich sehr dankbar...
lg
janina
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Crotaphytus



Anmeldungsdatum: 08.05.2005
Beiträge: 213

BeitragVerfasst am: 21. Jun 2006 19:54    Titel: Antworten mit Zitat

Flags treten prinzipiell immer dann auf, wenn ein ganz bestimmter Zustand eintritt. Das Zero-Flag zum Beispiel wird immer gesetzt, wenn eine Operation 0 ergeben hat. Nutzen kann man die Dinger für Operationen, die direkt von der Hardware nicht unterstützt werden.

Ein Beispiel wäre hier mal die Vergleichsoperation. Wenn die Inhalte zweier Register auf Gleichheit geprüft werden sollen, dann kann man das so machen, dass man so tut, als würde man eine Subtraktion durchführen. Wenn bei dieser Subtraktion jetzt 0 rauskommt, dann wird das Zero-Flag gesetzt. Sprich, wenn man dieses Flag danach ausliest, hat man das Ergebnis der Vergleichsoperation.

Auf ähnliche Weise kann man die anderen Flags geschickt nutzen, um mit wenigen Basisoperationen, die in der Hardware implementiert sind, ne ganze Menge zu machen.

_________________
Genie oder Wahnsinn? Wer kann es wissen...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TMSearcher



Anmeldungsdatum: 19.05.2005
Beiträge: 270
Wohnort: Bremen

BeitragVerfasst am: 23. Jun 2006 00:32    Titel: Antworten mit Zitat

Mehr Senf dazu Big Laugh

Flags sind Bit’s die bestimmte Ereignisse wiederspiegeln und für bedingte Sprungbefehle genutzt werden können. Ein Beispiel brachte @Crotaphytus bereits. Diese Flags können in der Regel aus dem Status bzw. Flagregister ausgelesen werden. Die Anzahl der Flags (oder Bit’s) variiert von Prozessor zu Prozessor. So viel zum allgemeinen, jetzt zur Praxis.
Nehmen wir einen ganz normalen 8086.
Wir haben Register die 16 Bit breit sind und wollen damit eine Addition durchführen.
Jetzt muss ich allerdings Vorkenntnisse in den Zahlensystemen voraussetzen (Hexadezimalsystem), da alle Eingaben so erfolgen werden.

mov ax, 9000 ;Lade Akku mit 0x9000 (dez. 36864 / bin 1001 0000 0000 0000)
mov dx, 9000 ;Lade DX-Register mit 0x9000 (dez. 36864 / bin 1001 0000 0000 0000)
add ax,dx
jnc 150

Bei dieser Addition kommt ein Wert raus, den ein 16 Bit Register nicht mehr fassen kann. Deshalb wird ein Flag gesetzt ( carry flag), dass den Überlauf anzeigt. Dieses Flag kann nun genutzt werden um eine Entscheidung zu treffen: wenn dieses Bit gesetzt ist mache Dies oder aber springe dahin. In unserem Fall würde das Bit (oder Carry-Flag) gesetzt werden, weil 9000H + 9000H = 12000H (16 Bit sind aber nur FFFFH), es gab einen Überlauf. Die Bedingung (jnc – jump if no carry) sagt uns jetzt, dass die Bedingung das kein Überlauf eingetreten ist, nicht erfüllt wurde und der Programmablauf seinen weiteren Gang nimmt.

Klingt vielleicht kompliziert, ist aber ganz einfach:

Wir treffen uns,
Prüfe ob du böse?!
Wenn ja, Böseflag wird gesetzt
Wenn nein, Böseflag bleibt Null
Jetzt sehe ich nach wie ist Böseflag
Ist gesetzt dann goto ganz weit weg...
Wenn nicht geht mein weg einfach weiter
Hallo..

Das ganze kann jeder auch auf seinem PC leicht nachvollziehen.
Ruft einfach mal den debugger auf.
Start -> Ausführen -> CMD -> debug

Jetzt haben wir ein schwarzes Fenster und als Eingabeaufforderung einen Strich.

Wenn wir jetzt den Befehl a100 eingeben können wir ein paar Maschinenbefehle eingeben und sehen was passiert. Es folgen jetzt die Eingaben (bitte exakt befolgen) nach jeder Zeile muss ein Carridge Return erfolgen.

A100
mov ax, 9000
mov dx, 9000
add ax,dx
jnc 150

mit Enter ohne eine Eingabe wird dieser Mode beendet.

Jetzt können wir das Programmen Step by Step mit t (enter) durchgehen und sehen wie sich die Flags verändern.
http://www.informatikerboard.de/files/debug_157.gif

Weitere Erklärungen unter -> Hilfe und Support -> debug (eingeben) ->lesen oder hier fragen Augenzwinkern

Gruß
TMS

_________________
Intelligent life is so very rare,
the rarest thing in creation
and the most precious
This is Earth Calling..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> Assembler Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen