PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bitmanipulation in ASM



teslanikola
10.04.2006, 15:24
Hallo leute ich hab ein problem:
Ich habe meinen Port welcher zb 0b01010011 enthält, jetzt will ich dort immer Bits setzen/löschen welche in meinem Register stehen zb. 0b01001000:


Port: 0b01010011
Register: 0b01001000
====================
Ergebn.: 0b00011011

Wie mache ich das mit wenig aufwand / befehlen???
Kann das sein das das ne XOR verknüpfung ist?? wie mache ich den die???

EDIT:

Noch eine Frage:

Wie kann ich das machen, das wnn das Carrybit 0 ist das dan ein Portbit auch Null wird und wenn Carry 1 ist das dann auch das Portbit 1 wir OHNE das die anderen Portbits verändert werden?
Ich kanns machen dass das Bit zwar gesetzt/gelöscht wird aber dann ändern sich immer die anderen auf 0, und das will ich nicht.

Danke schonmal für eure Hilfe.

Hanni
10.04.2006, 16:14
zu 1.
Ja, das sieht mir ganz nach nem XOR aus.



in temp, port
eor temp, register
out port, temp


Das EOR ist die XOR Funktion ...

Dein zweites Problem könnte man wie folgt lösen:



brcs carry_set
cbi PORT, PIN
rjmp exit
carry_set:
sbi PORT, PIN
exit:


das SBI / CBI ändern greifen in dem Fall auf ein eizelnes Bit zu.

Grüße, da Hanni.

teslanikola
10.04.2006, 16:50
Mensch Hanni, du musst ja voll der ASM Checker sein, wieder ein Fettes DANKE an dich.



Das EOR ist die XOR Funktion ...


Kein wunder das ich die XOR-Funktion nicht gefunden hab, ich hab in der Befehlsliste nach XOR gesucht, jetzt heist das EOR *peinlich*

Hanni
10.04.2006, 17:50
Ne ... nicht voll der ASM Checker ...

Allerdings arbeite ich schon ne Weile mit den Dingern ... (und ausschliesslich ins ASM) dabei bleibt ne ganze Menge hängen ...

Bernhard.Erfurt
11.04.2006, 12:19
Einzelne Bits setzen / löschen ===> sbi ..... / cbi.....
ganzer PORT setzen ===> out....
ganzer PORT einlesen ===> in....