Ergebnis 1 bis 12 von 12
  1. Beitrag #1
    Themenstarter
    Captain
    Special
    Captain

    Registriert seit
    20.08.2011
    Beiträge
    220
    Danke Danke gesagt 
    0
    Danke Danke erhalten 
    1

    Frage zum 'Zero-Flag' aus dem 'Flag-Register'

    Hallo,

    ich befasse mich zur Zeit mit Assembling und hätte eine Frage zu dem 'Zero-Flag'.
    Dabei wird u.a. geschreiben 'Ist das 'Zero-Flag' gesetzt, dann war das letzte Rechenergebnis gleich Null.'
    Kann mir das jemand kurz erklären?
    Welche Rechenergebnisse werden hier betrachtet?
    Z.B. die Subtraktion zweier Zahlen

    0000 1101 (Operand1)
    - 0001 1010 (Operand2)
    Ü 1 111 1
    -------------
    1111 0011

    Bei dem Übergang vom 8-Bit auf den 9-Bit gibg es einen Übertrag. Im 'Flag-Register' wird demnach das 'Carry-Flag' von 0 auf 1 gesetzt.
    Wie wird hier das 'Zero-Flag' betrachtet?

    LG
    Geändert von DerVonNebenan (24.07.2018 um 23:39 Uhr)

  2. Beitrag #2
    Fleet Captain
    Special
    Fleet Captain

    Registriert seit
    19.06.2017
    Ort
    Wolfsburg
    Beiträge
    257
    Danke Danke gesagt 
    4
    Danke Danke erhalten 
    0
    Zero wird nicht gesetzt aber man kann ja das Zero Flag auch benutzen um zb zu verzweigen oder zu springen wenn ein Ergebnis nicht 0 ist.
    Werde das aber auch mal überprüfen, bloss hier musste ich alles installieren, auf einen (alten) AMD 486 habe ich aber alles drauf, möchte den
    aber erst anwerfen wenn es nicht so extrem heiss ist. LG
    Geändert von skywalker2000 (25.07.2018 um 00:13 Uhr)
    Nanoxia CoolForce 1_350 Watt be quiet Pure Power 10_Asus ROG Strix B450-F Gaming _AMD Ryzen 5 1600_32GB Corsair Vengeance LPX 3000 MHZ CL15
    __4GB MSI Radeon RX 560__LG Electronic Blu-ray Writer__SSD 500GB WD Blue _2000GB Toshiba DT01ACA200 __IDLE 37 Watt HD dreht "leer"
    ............ Linus Torvalds: Will Intel "Scheiße für immer und ewig verkaufen"? (Heise Newsticker 05.01.2018 14:40)

  3. Beitrag #3
    Themenstarter
    Captain
    Special
    Captain

    Registriert seit
    20.08.2011
    Beiträge
    220
    Danke Danke gesagt 
    0
    Danke Danke erhalten 
    1
    Das ist mir bekannt
    Mich stört eher immer die Aussage '... wenn ein Ergebnis nicht 0 ist ...'.
    Das lese ich immer und immer wieder.
    Was für ein Ergebnis ist denn hier gemeint?
    Wenn ich oben die Subtraktion betrachte, bekomme ich eine Zahl als Ergebis.
    Bei dem 'Zero-Flag' muss ja irgendein Ergebnis CPU intern gesetzt werden ...

    LG
    Geändert von DerVonNebenan (25.07.2018 um 00:22 Uhr)

  4. Beitrag #4
    Fleet Captain
    Special
    Fleet Captain

    Registriert seit
    19.06.2017
    Ort
    Wolfsburg
    Beiträge
    257
    Danke Danke gesagt 
    4
    Danke Danke erhalten 
    0
    mov al, 0a ; 10
    sub al, 0a ; -10

    Ergebnis wäre 0

    die Flags werden gesetzt weil eine Subtraktion stattgefunden hat das Ergebnis steht im al Register LG
    Geändert von skywalker2000 (25.07.2018 um 00:50 Uhr)
    Nanoxia CoolForce 1_350 Watt be quiet Pure Power 10_Asus ROG Strix B450-F Gaming _AMD Ryzen 5 1600_32GB Corsair Vengeance LPX 3000 MHZ CL15
    __4GB MSI Radeon RX 560__LG Electronic Blu-ray Writer__SSD 500GB WD Blue _2000GB Toshiba DT01ACA200 __IDLE 37 Watt HD dreht "leer"
    ............ Linus Torvalds: Will Intel "Scheiße für immer und ewig verkaufen"? (Heise Newsticker 05.01.2018 14:40)

  5. Beitrag #5
    Themenstarter
    Captain
    Special
    Captain

    Registriert seit
    20.08.2011
    Beiträge
    220
    Danke Danke gesagt 
    0
    Danke Danke erhalten 
    1
    Das Ergebnis dieser arithmetischen Operation (Subtraktion zweier Zahlen) wird als Zahl in das 'Al-Register' geschreiben.
    Das hat doch nichts mit dem 'Flag-Register' zu tun.
    Nehmen wir die Rechnung '15-10'. Das Ergebnis wäre '5' und wird als Zahl in das 'Al-Register' geschrieben.
    Was passier hier im 'Flag-Register'?
    Geändert von DerVonNebenan (25.07.2018 um 00:52 Uhr)

  6. Beitrag #6
    Fleet Captain
    Special
    Fleet Captain

    Registriert seit
    19.06.2017
    Ort
    Wolfsburg
    Beiträge
    257
    Danke Danke gesagt 
    4
    Danke Danke erhalten 
    0
    die Flags werden auch hier gesetzt , wie auch bei einer Addition zb 100 +28
    Nanoxia CoolForce 1_350 Watt be quiet Pure Power 10_Asus ROG Strix B450-F Gaming _AMD Ryzen 5 1600_32GB Corsair Vengeance LPX 3000 MHZ CL15
    __4GB MSI Radeon RX 560__LG Electronic Blu-ray Writer__SSD 500GB WD Blue _2000GB Toshiba DT01ACA200 __IDLE 37 Watt HD dreht "leer"
    ............ Linus Torvalds: Will Intel "Scheiße für immer und ewig verkaufen"? (Heise Newsticker 05.01.2018 14:40)

  7. Beitrag #7
    Themenstarter
    Captain
    Special
    Captain

    Registriert seit
    20.08.2011
    Beiträge
    220
    Danke Danke gesagt 
    0
    Danke Danke erhalten 
    1
    Aber wie genau?

  8. Beitrag #8
    Fleet Captain
    Special
    Fleet Captain

    Registriert seit
    19.06.2017
    Ort
    Wolfsburg
    Beiträge
    257
    Danke Danke gesagt 
    4
    Danke Danke erhalten 
    0
    100 + 28 habe ich zb extra genommen weil das Ergebnis nicht mehr in 7 Bit(s) reinpasst , also müsste hier das Carry Flag gesetzt werden , wenn man 8 Bit Register zur Berechnung nimmt, Zero wäre nicht gesetzt mmh gib es noch was , naja ohne ein Buch wo ich alles nachlesen kann ist es halt ein wenig schwierig , habe ich aber im Augenblick auch nicht
    hier, (bin grad nicht zu hause) aber so ungefähr kommt es schon hin.
    Grob gesagt (immer) wenn ein Wert in einem Register verändert wird werden die Flags gesetzt.

    werde natürlich mal genauer nachsehen, bloss morgen habe ich auch noch ein wenig viel um die Ohren, spätestes die Tage danach
    weiss ich es genauer , ich benutze ja auch immer nur die Befehle zb jns b20 (springe wenn nicht negativ(B20 wäre jetzt eine Sprungadresse))
    oder um beim Zero Flag zu bleiben jnz b20 (springe wenn nicht 0 nach b20) LG
    Geändert von skywalker2000 (25.07.2018 um 01:50 Uhr)
    Nanoxia CoolForce 1_350 Watt be quiet Pure Power 10_Asus ROG Strix B450-F Gaming _AMD Ryzen 5 1600_32GB Corsair Vengeance LPX 3000 MHZ CL15
    __4GB MSI Radeon RX 560__LG Electronic Blu-ray Writer__SSD 500GB WD Blue _2000GB Toshiba DT01ACA200 __IDLE 37 Watt HD dreht "leer"
    ............ Linus Torvalds: Will Intel "Scheiße für immer und ewig verkaufen"? (Heise Newsticker 05.01.2018 14:40)

  9. Beitrag #9
    Themenstarter
    Captain
    Special
    Captain

    Registriert seit
    20.08.2011
    Beiträge
    220
    Danke Danke gesagt 
    0
    Danke Danke erhalten 
    1
    Erstmal Danke!
    Mir geht es erstmal nur um diese besch**** 'Zero-Flag'.
    Das mit dem u.a. 'CF' habe ich soweit verstanden.
    Das 'ZF' ist sehr wichtig bei Sprüngen; ich finde zur Zeit noch keinen sinnvollen Bezug, wie das gesetzt wird.
    Daher auch hier die Frage im Forum.
    Auszug aus einem Buch:
    'Dieses Flag zeigt an, ob das Ergebnis einer
    Operation Null ist, oder nicht. Falls es Null ist, ist das „Zero Flag“ gesetzt, falls das Ergebnis
    ungleich Null ist, wird es nicht gesetzt. Eine wichtige Benutzung des „Zero Flag“ aus der Sicht
    eines „Crackers“ ist sicherlich, wenn aus einem Unterprogramm der Rückgabewert ermittelt
    wird. Doch das ist für den Anfänger noch nicht so interessant.
    '
    Nach diesem Wortlaut gleichen sich alle bisher gefunden Erklärungen zum 'ZF'.

    Wenn das wirklich so einfach ist:
    Wird hier explizit immer das Endergebnis einer arithmetischen Operation betrachtet?
    Also
    '10-10=0' -> 'ZF' wird gesetzt
    '100+28=128 ungleich Null' -> ZF' wird nicht gesetzt.

    Anderes Beispiel:
    Ich schreiben ein Programm. Wenn die Eingabe über die Tastatur nicht z.B. '8' ist, dann soll das Programm stoppen.
    Wenn genau die '8' eingegeben wird, dann läuft das Programm über einen Sprung weiter.
    Die Sprungabfrage wäre ja nicht anderes als eine rithmetischen Operation, in dem Fall eine Subtaktion.
    '8-1=7 ungleich 0' -> 'ZF' nicht gesetzt -> Prorgramm stop
    .
    .
    .
    '8-8=0' -> 'ZF' wird gesetzt -> Programm weiter
    Geändert von DerVonNebenan (25.07.2018 um 01:57 Uhr)

  10. Beitrag #10
    Fleet Captain
    Special
    Fleet Captain

    Registriert seit
    19.06.2017
    Ort
    Wolfsburg
    Beiträge
    257
    Danke Danke gesagt 
    4
    Danke Danke erhalten 
    0
    Das Zero Flag ist mit ein_s der wichtigsten Flags finde ich, es müsste nicht nur von mir viel für Schleifen benutzt werden wo ein Register immer zb um -1 heruntergezählt
    wird und dann die Schleife beendet wird wenn das Register den Wert 0 erreicht hat.
    Nanoxia CoolForce 1_350 Watt be quiet Pure Power 10_Asus ROG Strix B450-F Gaming _AMD Ryzen 5 1600_32GB Corsair Vengeance LPX 3000 MHZ CL15
    __4GB MSI Radeon RX 560__LG Electronic Blu-ray Writer__SSD 500GB WD Blue _2000GB Toshiba DT01ACA200 __IDLE 37 Watt HD dreht "leer"
    ............ Linus Torvalds: Will Intel "Scheiße für immer und ewig verkaufen"? (Heise Newsticker 05.01.2018 14:40)

  11. Beitrag #11
    Themenstarter
    Captain
    Special
    Captain

    Registriert seit
    20.08.2011
    Beiträge
    220
    Danke Danke gesagt 
    0
    Danke Danke erhalten 
    1
    Berechnet die CPU bei Schleifen nicht auch eine Subtraktion?
    Ich setze eine Schleifen mit 5 Durchgängen ...
    '5-0=5 ungleich 0' -> 'ZF' wird nicht gesetzt -> nächster Schleifenschritt
    '5-1=4 ungleich 0' -> 'ZF' wird nicht gesetzt -> nächster Schleifenschritt
    .
    .
    .'5-5=0' -> 'ZF' wird gesetzt -> Schleife beendet

  12. Beitrag #12
    Fleet Captain
    Special
    Fleet Captain

    Registriert seit
    19.06.2017
    Ort
    Wolfsburg
    Beiträge
    257
    Danke Danke gesagt 
    4
    Danke Danke erhalten 
    0
    Zitat Zitat von DerVonNebenan Beitrag anzeigen
    .'5-5=0' -> 'ZF' wird gesetzt -> Schleife beendet
    Jupp

    ....
    ....


    dec al ist das gleiche wie
    sub al,01 , bloss das dec al vermutlich weniger Takte braucht (und wenn nicht ist es wenigstens einfach zu schreiben)
    Geändert von skywalker2000 (25.07.2018 um 02:43 Uhr)
    Nanoxia CoolForce 1_350 Watt be quiet Pure Power 10_Asus ROG Strix B450-F Gaming _AMD Ryzen 5 1600_32GB Corsair Vengeance LPX 3000 MHZ CL15
    __4GB MSI Radeon RX 560__LG Electronic Blu-ray Writer__SSD 500GB WD Blue _2000GB Toshiba DT01ACA200 __IDLE 37 Watt HD dreht "leer"
    ............ Linus Torvalds: Will Intel "Scheiße für immer und ewig verkaufen"? (Heise Newsticker 05.01.2018 14:40)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •