PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zahl vergleichen



t0b4d
08.02.2007, 19:22
Hallo,

PsiQ hat einen Thread aufgemacht in dem er Checkt ob eine Zahl größer ist als eine andere.

Was ist wenn ich fragen will ob eine Zahl = der anderen ist?

zB.:

TI = 0 ?
Ja:
RETURN
Nein:
DECF TI,F ; verringere TI um Eins
INCF TP,F ; verhöhe TP um Eins

PsiQ
08.02.2007, 19:27
mach ein reset der Zero-Flag
anschließend zieh' beide zahlen voneinander ab.

wenn dann das zero flag gesetzt wird, waren se exakt gleich groß. dann kommt nämlich null raus..

wenns zero-flag nicht gesetzt wird:
in kombination mit dem carryflag kannst du dann noch feststellen welche größer als die andere ist, und dementsprechend ändern


edit:
Zero flag löschen Z=0
Carryflag setzen auf C=1
;A-B = ?
A-B = 0 => Z=1 , => A ist gleich B

oder

;A-B = ?
A-B = ?? , Z=0 ,C=0
=> B ist größer als A , es gibt ein negatives ergebnis, deswegen wird C auf 0 gesetzt

oder

;A-B = ?
A-B = ?? , Z=0 , C=1
=> Ergebnis ist größer null, also ist A größer als B

noch weiter im detail wird mir jetzt zu zeitintesnsiv,
ich lern grad info 1, was ich nicht wirklich kann O:)
(C und son schmarrn ;-) )

t0b4d
08.02.2007, 19:38
danke erstmal =) aber ich versteh nicht was du mit Zero-Flag meinst.

carryflag / carrybit kenn ich nur von rotate left/right.

kannste vlt lösungs code schreiben ?

PsiQ
08.02.2007, 19:41
das carryflag wird von 0 auf 1 gesetzt wenn du nach oben hin nen überlauf hast

das carryflag wird von 1 auf 0 gesetzt wenn du nen überlauf nach unten (ins negative) hast.

das zero flag wird nur (von 0 auf 1) gesetzt, wenn exakt null rauskommt.

wenn dus bis moin abend nicht hinbekommen hast, schau ich mal ;-) ..
zurück zum zahlensysteme umtrechnen...

(das edit oben haste gesehen?)


edit2:
siehe da:
http://www.sprut.de/electronic/pic/assemble/befehle.html#flags

t0b4d
08.02.2007, 19:46
danke !

ich glaub jetzt hab ichs verstanden =)

muss das halt in assembler programmieren is nicht so toll wie c/c++ ;)

viel spass beim Lernen und nochma THX!

PsiQ
08.02.2007, 20:03
ich kann eigentlich kein C .. und eigentlich poste ich hier grad garnicht..
eigenlitch kann ich nur meinen (GTR) taschenrechner programmieren :-b

phaidros
08.02.2007, 22:23
Auf dieser Seite
http://www.piclist.com/techref/microchip/compcon.htm
wird es ausführlich mit Beispielen in Assembler erklärt.

Have Fun
Phaidros