Hi, ich muss in meinem Programm in einem Register eine binäre Zahl eintragen, wo ich immer nur 1 oder 0 für das entsprechende Bit bekomme. Es handelt sich um PS2. Wie mache ich das am besten, ich hatte das so gedacht: Bit an der Stelle k setzen/löschen: sbr state, k nur ist das Problem, das es in Assembler dahinter eine Zahl kommen muss und keine weitere Variable, in diesem Falle das k sein darf. Wie kann ich das dann lösen, das immer die Zahlen von 1 bis 7 dort hinkommen, entsprechnd dem k. Das sollte dann möglichst ohne die Schleife funktioniere, das ich schau wie groß k ist und das ganze dann 8 mal, da ich es ja für alle 8 einzelnen Bits brauche. Habt ihr da eine Idee? mfg
Martin K. schrieb:
> Habt ihr da eine Idee?
Am einfachsten machst du das so, dass du immer Bit 0 setzt und nach
links verschiebst.
Ergebnis = 0
für alle Bits 0 bis 7 {
schiebe Ergebnis eine Stelle nach links
setze Bit 0 abhängig von dem was du empfangen hast
}
Bsp.
Wen du empfängst: 10110011
du startest mit einem Ergebnis von 0
00000000
Eintritt in die Schleife. Schleifendurchgang 0
Ergebnis um 1 nach links schieben 00000000
die erste empfangene Ziffer ist 1 00000001
Schleifendurchgang 1
Ergebnis um 1 nach links schieben 00000010
die nächste empfangene Ziffer ist 0 00000010
Schleifendurchgang 2
Ergebnis um 1 nach links schieben 00000100
die nächste empfangene Ziffer ist 1 00000101
Schleifendurchgang 3
Ergebnis um 1 nach links schieben 00001010
die nächste empfangene Ziffer ist 1 00001011
Schleifendurchgang 4
Ergebnis um 1 nach links schieben 00010110
die nächste empfangene Ziffer ist 0 00010110
Schleifendurchgang 5
Ergebnis um 1 nach links schieben 00101100
die nächste empfangene Ziffer ist 0 00101100
Schleifendurchgang 6
Ergebnis um 1 nach links schieben 01011000
die nächste empfangene Ziffer ist 1 01011001
Schleifendurchgang 7
Ergebnis um 1 nach links schieben 10110010
die nächste empfangene Ziffer ist 1 10110011
E, voila. Nach 8 mal schieben und jeweils setzen des untersten Bits
(oder auch nicht, je nach Erfordernis), steht im Ergebnisregister das
richtige Ergebnis.
Hi, vielen Dank, super Idee, so funktioniert es! Nur habe ich jetzt ein Problem mit den Befehlen: sbrs temp, 0 cbr state, 1 sbrc temp, 0 sbr state, 1 das komische ist, das bei den "skip" Anweisungen das niedrigste Bit mit 0 anzusprechen ist und bei den "Set/Clear"-Befehlen das niedrigste Bit mit 1 gesetz odr gelöscht wird. Woran liegt das? mfg
Martin K. schrieb: > Hi, > > vielen Dank, super Idee, so funktioniert es! > > Nur habe ich jetzt ein Problem mit den Befehlen: > > sbrs temp, 0 > cbr state, 1 > sbrc temp, 0 > sbr state, 1 > > das komische ist, das bei den "skip" Anweisungen das niedrigste Bit mit > 0 anzusprechen ist und bei den "Set/Clear"-Befehlen das niedrigste Bit > mit 1 gesetz odr gelöscht wird. > > Woran liegt das? SBRS/SBRC bekommen die Bitnummer. SBR/CBR ist nur syntactic sugar für ORI / ANDI~ Die obige Sequenz geht aber auch als
1 | BST temp, 0 |
2 | BLD state, 0 |
wobei temp und state alias für Register sein müssen. Hat zudem den Vorteil, daß es auch für R0-R15 geht und nicht nur für R16-R31. Johann
Johann L. schrieb: > Martin K. schrieb: > Die obige Sequenz geht aber auch als >
1 | > BST temp, 0 |
2 | > BLD state, 0 |
3 | > |
> Johann Hi, danke für die gute Idee, so funktioniert das natürlich gleich besser >SBR/CBR ist nur syntactic sugar für ORI / ANDI~ wie meinst du das/ besser gesagt was heist das auf deutsch.
Hi >wie meinst du das/ besser gesagt was heist das auf deutsch. Gleicher Op-Code. >Es handelt sich um PS2. Soll das heissen, deine Bits kommen seriell rein? Wenn ja, dann einfach ins Carry-Flag schieben. Und von dort ins Ergebnis. MfG Spess
Martin K. schrieb: > Johann L. schrieb: >>SBR/CBR ist nur syntactic sugar für ORI / ANDI~ > > wie meinst du das/ besser gesagt was heist das auf deutsch. Sagar diesen Zucker gibt's bei Onkel Wicki: http://de.wikipedia.org/wiki/Syntactic_Sugar Johann
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.