Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
j_on_linux
Anmeldungsdatum: 28.04.2006 Beiträge: 3 Wohnort: Hildesheim
|
Verfasst am: 21. Jun 2006 18:34 Titel: Flags |
|
|
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 |
|
|
|
Crotaphytus
Anmeldungsdatum: 08.05.2005 Beiträge: 213
|
Verfasst am: 21. Jun 2006 19:54 Titel: |
|
|
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 |
|
|
TMSearcher
Anmeldungsdatum: 19.05.2005 Beiträge: 270 Wohnort: Bremen
|
Verfasst am: 23. Jun 2006 00:32 Titel: |
|
|
Mehr Senf dazu
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
Gruß
TMS _________________ Intelligent life is so very rare,
the rarest thing in creation
and the most precious
This is Earth Calling.. |
|
Nach oben |
|
|
|
|
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
|
|