Vergleich mit einer 16 Bit Zahl

Moderator: Rockford

Antworten
Benutzeravatar
Dr. Irata
Beiträge: 1276
Registriert: 24.08.2021 14:40
Has thanked: 186 times
Been thanked: 428 times
Kontaktdaten:

Vergleich mit einer 16 Bit Zahl

Beitrag von Dr. Irata »

Puh, entweder habe ich gerade einen Knoten im Hirn, oder es ist wirklich so kompliziert.
ich habe es zwar jetzt hinbekommen, aber bestimmt zu kompliziert und daher zu langsam.

Ich möchte eine Bedingung abfragen in folgender Form:

wenn wert a (16 Bit) ist größer 999, dann springe zu loop1

Erhard
Beiträge: 1063
Registriert: 04.11.2021 15:52
Has thanked: 128 times
Been thanked: 325 times
Kontaktdaten:

Vergleich mit einer 16 Bit Zahl

Beitrag von Erhard »

Wie wäre es mit:

SEC
LDA a.lo
SBC #$E7
LDA a.hi
SBC #$3
BCS loop1
RTS
loop1 ...
Wenn man sein Alter hexadezimal angibt kann man gleich wieder Bäume ausreißen :-)

Benutzeravatar
Dr. Irata
Beiträge: 1276
Registriert: 24.08.2021 14:40
Has thanked: 186 times
Been thanked: 428 times
Kontaktdaten:

Re: Vergleich mit einer 16 Bit Zahl

Beitrag von Dr. Irata »

tatsächlich habe ich es jetzt so gelöst:

Code: Alles auswählen


loop1
				sec
				lda var
				sbc #$e8
				sta var
				lda var+1
				sbc #$03
				sbc #0
				sta var+1
				bmi weiter
				... Anweisung ...
				jmp loop1
weiter				

Benutzeravatar
JAC!
Beiträge: 185
Registriert: 18.06.2021 23:13
Has thanked: 144 times
Been thanked: 177 times
Kontaktdaten:

Re: Vergleich mit einer 16 Bit Zahl

Beitrag von JAC! »

Wieso sbc #0
Und dein Code wird für große Highbytes nicht funktionieren. Der von Erhard ist meiner Meinung nach die minimale korrekte Lösung
Visit https://www.wudsn.com the home of WUDSN IDE.

Benutzeravatar
Mathy
Beiträge: 1796
Registriert: 18.06.2021 11:13
Wohnort: Heerlen, NL
Has thanked: 872 times
Been thanked: 491 times
Kontaktdaten:

Re: Vergleich mit einer 16 Bit Zahl

Beitrag von Mathy »

.
Hallo Peter

Dr. Irata hat geschrieben:
26.05.2025 16:07
... entweder habe ich gerade einen Knoten im Hirn ...
Na ja, wenn einer das selber checken kann, dann doch Du... :roll: :D :lol: :mrgreen:

Tschüß

Mathy
Schreibe nicht der Absicht zu, was man mit Dummheit oder Ignoranz erklären kann.

Benutzeravatar
Dr. Irata
Beiträge: 1276
Registriert: 24.08.2021 14:40
Has thanked: 186 times
Been thanked: 428 times
Kontaktdaten:

Re: Vergleich mit einer 16 Bit Zahl

Beitrag von Dr. Irata »

... die Anfrage war insofern ungeschickt, weil es auf etwas anderes abzielte.
ich wollte nun doch noch den scheinbare einfache Ansatz zur Konvertierung einer 16-Bit-Zahl von dezimal in einzelne Ziffern machen.
Dann muss von der Zahl jeweils x-mal 10000 / 1000 / 100 / 10 / 1 abgezogen werden, daraus extrahiert man dann die einzelnen Ziffern / Stellen für die Darstellung der Zahl. Wenn man dann jeweils noch vorher abfragt, ob die Zahl über 10000 / 1000 liegt, kann man für einen kleinen Score die ersten beiden etwas aufwendigeren Schritte schnell überspringen.
Die "tausender" Stelle abzufragen erreicht man dann durch den Teilcode, den ich gepostet habe (sbc #0 kann wirklich weg) - das funktioniert.
Ich habe den Code bis zur 100 er Stelle fertig, ihn dann aber verworfen. Es geht, ist aber vom Code her deutlich länger, als der von PP und Janko und auch mutmaßlich langsamer. Macht also keinen Sinn diesen Ansatz zu verfolgen, auch wenn er vielleicht mathematisch verständlicher ist!

LG Peter

Renében
Beiträge: 6
Registriert: 08.05.2025 05:55
Been thanked: 1 time
Kontaktdaten:

Re: Vergleich mit einer 16 Bit Zahl

Beitrag von Renében »

Hallo! Einfacher geht es meist mit folgendem Code (in C):

```c
uint16_t a;
if (a > 999) {
goto loop1;
}
```

Das ist effizient und verständlich. Bei 16-Bit-Werten kann man direkt mit Integer-Vergleichen arbeiten, ohne komplizierte Bitmanipulationen. Je nach Programmiersprache oder Mikrocontroller ändert sich die Syntax, aber das Prinzip bleibt gleich. Wenn du in Assembler arbeitest, kann ein Vergleich mit „cmp“ und ein bedingter Sprung sinnvoll sein.

Benutzeravatar
Dr. Irata
Beiträge: 1276
Registriert: 24.08.2021 14:40
Has thanked: 186 times
Been thanked: 428 times
Kontaktdaten:

Re: Vergleich mit einer 16 Bit Zahl

Beitrag von Dr. Irata »

Hi Rene,
vielen Dank. C ist natürlich chic, aber ich programmiere in Assembler... vielleicht schafft es Peter (JAC) ja mal C für Atari in WUDSN/Eclipse zu integrieren... ;-)

Btw... wo ist denn in deinem C-Code der loop1 ?? Da springt er ja ins Nirvana...

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast