PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Register aufsplitten



Killer
02.08.2008, 14:44
Hallo,
ich habe eine kurze Frage. Wie kann ich ein Register "aufsplitten", sodass ich das 4. Bit in R16 beispielsweise in das 1. Bit von R17 Laden kann?

MfG Killer

sternst
02.08.2008, 14:59
sodass ich das 4. Bit in R16 beispielsweise in das 1. Bit von R17 Laden kann

BST r16,3
BLD r17,0

Killer
02.08.2008, 15:33
Das verstehe ich nicht so ganz. Kannst du oder jemand anderes mir das etwas genauer erklären?

MfG Killer

PicNick
02.08.2008, 15:38
Das T-Bit ist ein "freies" Bit im Statusregister, dass für solche Zwecke verwendet wird

BST R16 , 3
übertragt das bit 3 von r16 in das T-Bit im Statusregister

BLD R17 , 0
überträgt das T-Bit in das Bit 0 von r17

mare_crisium
06.08.2008, 11:42
Killer,

etwas umständlicher, als von sternst vorgeschlagen, dafür aber gleich für alle 4 Bits geht's so:

mov r17,r16; kopiere Inhalt r16 nach r17
swap r17 ; vertausche obere und untere 4 Bit in r17
andi r17,0x0F ; obere 4 Bit in r17 auf 0 setzen
andi r16,0x0F ; obere 4 Bit in r16 auf 0 setzen

Ciao,

mare_crisium

Killer
08.08.2008, 21:25
Ich danke euch soweit. Ist rechnen mit Zahlen über 255 eigendlich möglich (mit ASM)? Die Register sind ja nur 8Bit breit. Was wäre wenn ich jetzt beispielsweise 1000 mit 1000 multiplizieren will?

MfG Killer

Gock
09.08.2008, 00:28
Dann benutzt Du fertige Subroutinen, die Du zB mit Applicationnote bei Atmel findest. Da gibts dann zB 16x16=32Bit usw. Suche nach "Multiply and divide routines".
Es gibt aber auch noch andere Quellen...
Gruß

fhs
09.08.2008, 05:56
Hi,

z.B. Atmel AN AVR200 (http://www.avrfreaks.net/index.php?module=Freaks%20Tools&func=viewItem&item_id=66). Alle ANs gibt es hier (http://atmel.com/dyn/products/app_notes.asp?family_id=607).

Viele Grüße

Fred