16 Bit wert durch 2 teilen

Gast #810585
Lesenswert?

Vorsicht: wenn du das obere Register nach rechts schiebst, muss ja das 
niedrigste Bit desselben wieder im unteren Register auftauchen!!!

Probiers mal mit

[avrasm]
clc ; Carry = 0
ror TEMPH
ror TEMPL
[/avrasm
#810590
Lesenswert?

René Schink wrote:
> hallo,
>
> ich versuche gerade einen 16 Bit wert der in 2 Registern steht durch
> 2teilen.
>
> Hab das einfach so gemacht
>
> lsr templ
> lsr temph
Wenn Du einen Wert nach rechts schieben willst, dann muss das Carry-Flag 
berücksichtigt werden. Deshalb ist lsr hier der falsche Befehl. Dafür 
musst Du ror verwenden, und dann erst das High-Byte und direkt danach 
das Low-Byte schieben

> das scheint aber doch nicht so einfach zu sein.
>
> denn wenn temph = 1 dann wird 0 daraus
Ist doch korrekt: Eins geteilt durch zwei ist nunmal Null... Das ist 
eine ganzzahlige Division, bei der ist das eben so. Der µC schaut, wie 
oft die Zwei in die Eins reinpasst, und das ist eben Null mal... Wenn Du 
runden willst, musst Du das "von Hand" machen (z.B. indem Du vor der 
Division die Hälfte des Divisors, in diesem Fall also eine 1, 
hinzuaddierst)...
Gast #810594
Lesenswert?

Ich kenne die genauen Assembler-Befehle jetzt nicht (AVR?)
Aber Du musst letztendlich das High-Byte nach rechts schieben, dabei das 
LSB ins Carry übertragen lassen und beim Low-Byte dasselbe, jedoch muss 
das Carry-Bit beim rechts schieben ins MSB reingeschoben werden.
Schau Dir mal die instruction set für Deinen µC an
#810605
Lesenswert?

René Schink wrote:
> hallo,
>
> ich versuche gerade einen 16 Bit wert der in 2 Registern steht durch
> 2teilen.
>
> Hab das einfach so gemacht
>
> lsr templ
> lsr temph
>
> das scheint aber doch nicht so einfach zu sein.
>
> denn wenn temph = 1 dann wird 0 daraus
1
    |  *2        /2
2
----+-------------------
3
mit |  lsl l     asr h
4
VZ  |  rol h     ror l
5
    |
6
ohne|  lsl l     lsr h
7
VZ  |  rol l     ror l

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren