Diskussion:CMP (RAUTE)$nn

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Fehler in Tabelle[Quelltext bearbeiten]

Wenn mich nicht alles täuscht habe ich in der Tabelle mit dem Vergleich zwischen BASIC- und Assembleranweisung einen Fehler gefunden: und zwar sollte doch bei dem > Vergleich BEQ (Überprüfung auf Gleichheit) nichts zu suchen haben, sondern eher beim >= Vergleich, dort fehlt er nämlich! Das scheint in allen Tabellen falsch zu sein, kann man das global irgendwie ändern? Es wird ja keine Vorlage eingefügt sondern das überall lokal gespeichert... --theStack (der sich noch nicht angemeldet hat und das gleich mal nachholen wird)

Du hast zwar richtig erkannt, das bei der Tabelle etwas falsch ist, jedoch liegt der Fehler woanders. Das Carry-Flag kann nur zwei Zustände (0 oder 1) annehmen. Der < Vergleich wird mit dem BCC-Befehl realisiert. Dies bedeutet aber im Umkehrschluss, dass der BCS-Befehl den >= Vergleich abdeckt. Beim > Vergleich wird vor dem BCS-Befehl noch ein trickreicher BEQ $02 einfügt. Dieser hat zur Folge, dass bei Gleichheit der 2-Byte-Befehl BCS übersprungen wird. (siehe relative Adressierung) --Werner 00:14, 14. Dez. 2007 (CET)

Subtraktion umgekehrt?[Quelltext bearbeiten]

Meiner Meinung nach wird von dem angegebenen Wert der Wert des Akkus subtrahiert (und nicht, wie im Artikel angegeben, umgekehrt).

Beispiel:

LDA #$A7

CMP #$A6 # Carry wird gesetzt

BCS xxxx # Sprung nach xxxx

Kann das mal jemand unabhängig prüfen?--Berni (Diskussion) 11:05, 22. Okt. 2021 (CEST)

Alles zurück - bei Subtraktion bedeutet ja ein gesetztes Carry, dass kein Übertrag stattgefunden hat. Stimmt also alles. --Berni (Diskussion) 14:20, 22. Okt. 2021 (CEST)
Genau, stimmt. Sonst hätten ganz viele 6502-Assemblerprogramme ein enormes Problem, nämlich, dass sie nie funktionieren hätten... (das ist gewissermaßen die unabhänhige Prüfung, dass man sich bestehende Programme außerhalb dieses Wikis ansieht) ;) --JohannKlasek (Diskussion) 18:53, 25. Okt. 2021 (CEST)
Dies zeigt aber auch, dass die Darstellung des Funktionsprinzips im Artikel nicht jedem auf den ersten Blick verständlich ist.
Könnten wir nicht nach dem Bild eine Tabelle mit den genauen Werten der Flags einfügen, z.B.
Carry-Flag Zero-Flag Negativ-Flag wenn
1 0 0 Differenz > 0
1 1 0 Differenz = 0
0 0 1 Differenz < 0
Diese Tabelle am besten als Vorlage definieren und in alle CMP-Befehle einfügen. --Petrus (Diskussion) 12:27, 14. Jan. 2022 (CET)
Finde ich eine gute Idee. Obgleich das im Abschnitt "Vergleichbare BASIC-Anweisung" ziemlich gut dargestellt ist, wäre es sicherlich sinnvoll hier schon bei der Funktion das darzustellen. Ich erlaube mir mal das hier zu übernehmen und weiter zu adaptieren und beginne mal hier. Wenn es so passt, übertragen wir das auf die anderen. --JohannKlasek (Diskussion) 15:36, 14. Jan. 2022 (CET)