Forum: Mikrocontroller und Digitale Elektronik Mal ne Frage.....


von Danny (Gast)


Lesenswert?

Ich habe folgendes Problem:

Ich habe ein Zahl (belibig, eingegeben über eine Tastatur) mit 16 bit
länge. Nun will ich diese Zahl mit 6000 vergleichen. Das ganze in
Assembler. Nur habe ich, was das Vergleichen angeht, noch nicht viel
Erfahrung. Falls es eine Rolle spielen sollte: das ganze auf einem
AT90S8535. Für anregungen und tips bin ich dankbar.....


Gruß Danny

von Fritz (Gast)


Lesenswert?

Nein, dein Problem ist, dass Du zu faul bist
und weder lesen noch denken kannst...

von Danny (Gast)


Lesenswert?

Also Leute die keinen Umgangston haben und Anfängern nicht helfen
wollen/können, sollten lieber Klappe halten und gar nichts schreiben
anstatt irgendwelche "geistreichen" Kommentare abzugeben. Für alle
ernsthaften Antworten bin ich aber weiterhin offen.....

von Fritz Ganter (Gast)


Lesenswert?

Da gibt es einen Befehl für compare und ein Befehl für branch. Ich
programiere nicht in Assembler, aber der Compiler macht das draus:

415:lader.c       ****  if (jjj>iii)
 1268                 .LM143:
 1269 05d6 2091 0000     lds r18,jjj.1
 1270 05da 3091 0000     lds r19,(jjj.1)+1
 1271 05de 8091 0000     lds r24,iii.0
 1272 05e2 9091 0000     lds r25,(iii.0)+1
 1273 05e6 8217          cp r24,r18
 1274 05e8 9307          cpc r25,r19
 1275 05ea 20F4          brsh .L123
 416:lader.c       ****      iii=0;
 1277                 .LM144:
 1278 05ec 1092 0000     sts (iii.0)+1,__zero_reg__
 1279 05f0 1092 0000     sts iii.0,__zero_reg__
 1280                 .L123:

Also zuerst die unteren 8bit mit cp vergleichen, dann die oberen 8bit
mit cpc (compare with carry). Dann brsh (Branch if same or higer).

Was die Befehle bedeuten hab ich im Datenblatt nachgesehen, das kannst
du ja auch.

Aber im Prinzip hat mein Namensvetter schon recht, das ist so trivial
dass ich mich sowas nie Fragen trauen würde wenn ich in Assembler
programmiere.

Ist dasselbe als wenn ich frage: Wie vergleiche ich 2 Werte
miteinander, am besten in C, weil ich in C programmiere.

Entweder du programmierst in Assembler, dann solltest dich auch mit so
trivialen Fragen auseinandersetzen oder nimmst Basic.
Und es gibt unzählige  Codebeispiele in die man reinsehen kann um zu
lernen.

(Ui, jetzt werden die Basic Programmierer wieder auf mich schimpfen).


So, heute hab ich wieder brav die Hausaufgaben für andere erledigt. :-)

von Danny (Gast)


Lesenswert?

In Basic oder C ist das ja auch ne Nummer einfacher, habe ich schon
ausprobiert. Da ich aber mein bisheriges Programm schon in Assembler
programmiert habe und das soweit Funktioniert und ich eben nur noch
eine Maximalwertabfrage einfügen wollte, war ich nicht bereit das ganze
in C oder Basic nochmal zu schreiben. O.K. vieleicht ist das eine Frage
die einfach zu beantworten war, aber nach 9h arbeit und 4h Schule ist
eben irgendwann mal die Luft raus. Es gab auch schon in Basic wirklich
blöde Fragen, aber es ist noch lange kein Grund patzig zu werden. Danke
jedoch für deine Hilfe und deren die vielleicht noch kommen.

von ulrich strobel (Gast)


Lesenswert?

erst vergleichst du die highbytes, sind die dann identisch vergleichst
du noch die lowbytes, ist eine der beiden bedingungen falsch ist die
compareabfrage mit nein beandtwortet.

cpi highreferenz,highzahl
brne nichtgleich
cpi lowreferenz,lowzahl
brne nichtgleich
gleich:
.....
....
....
ret

nichtgleich:
....
....
...
ret

von Marco Haufe (Gast)


Lesenswert?

@Fritz

genau Fritz ! Trampel ruhig auf den Basic-Schlipsen rum :-)
Seit Commodore 64 programmiere ich in Basic, habe inzwische viele
Dialekte gelernt, und auch wieder vergessen. Inzwischen fahre ich auf
Bascom voll auf µC-Basis ab und für PC auf Visual-B 6.0.
Zustande bringt man da auch was. Nichts desto trotz kriege ich aber
auch auf allen Vierend kriechend noch was in Asm hin... :-)

Bye und VG MArco

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.