www.mikrocontroller.net

Forum: Gesperrte Threads Mehrbyteoperationen mit 8-bit-Akkumulator


Autor: Julia (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

ich muss für die Schule einen Code abgeben für einen 8051.

Die Aufgabe sieht folgendermassen aus.

[R2] x [R0][R1] = [R2][R0][R1]

Die Mehrbyteoperationen mussen in Einbyteoperationen zerleget werden und 
diese wieder zu einer Mehrbyteoperation verknüpft werden.

Kann mir jemand helfen? Bin für jede Hilfe sehr dankbar!!

LG
Julia

: Verschoben durch User
Autor: schablonski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

was soll das genau heissen:
Inhalt von Register R2 multipliziert mit
Inhalt von Register R0 multipliziert mit
Inhalt von Register R1,

oder wie oder was

Autor: magnetus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Julia schrieb:
> ich muss für die Schule einen Code abgeben für einen 8051.

...

> Die Aufgabe sieht folgendermassen aus.

Und nun willst du die Hausaufgaben von uns gelöst haben? Nö!

Wie weit bist du mit DEINEM Lösungsansatz schon fortgeschritten?

Gruß,
Magnetus

Autor: Andreas Ferber (aferber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Julia schrieb:
> Die Aufgabe sieht folgendermassen aus.
>
> [R2] x [R0][R1] = [R2][R0][R1]
>
> Die Mehrbyteoperationen mussen in Einbyteoperationen zerleget werden und
> diese wieder zu einer Mehrbyteoperation verknüpft werden.

Als kleiner Denkanstoss: Überleg mal, wie du damals in der Grundschule 
schriftlich multiplizieren gelernt hast. Und dann überleg mal, wie das 
ganze aussieht, wenn du mit Zahlen zur Basis 256 anstatt zur Basis 10 
arbeitest.

Andreas

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Ferber schrieb:
> Als kleiner Denkanstoss: Überleg mal, wie du damals in der Grundschule
> schriftlich multiplizieren gelernt hast. Und dann überleg mal, wie das
> ganze aussieht, wenn du mit Zahlen zur Basis 256 anstatt zur Basis 10
> arbeitest.

Ich bin mir sicher du meinst Zahlen zur Basis 2 und nicht 256 :-)

Autor: Andreas Ferber (aferber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simon K. schrieb:
> Ich bin mir sicher du meinst Zahlen zur Basis 2 und nicht 256 :-)

Nein.

Andreas

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
        mov     a, r1
        mov     b, r2
        mul     ab
        mov     r1, a

        mov     a, r0
        mov     r0, b
        mov     b, r2
        mul     ab
        mov     r2, b

        add     a, r0
        mov     r0, a
        jnc     _m24_1
        inc     r2
_m24_1:


Peter

Autor: Julia (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
12 x 1314 = 15768

R2 = 12
R0 = 13
R1 = 14

[R2] x [R0][R1] = [R2][R0][R1]

R2 x R1 = 12 x 14 = 168...die 68 kommt ins R1
R2 x R0 = 12 x 13 = 156...die 56 (+1 von oben) kommt ins R0
die 1 von 156 kommt ins R2

R2 = 1
R0 = 57
R1 = 68

[R2][R0][R1] = 15768

mathematisch ist ja so weit alles klar...aber weiter? keine Ahnung :(

julia

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Julia schrieb:
> 12 x 1314 = 15768

Der 8051 kann nur binär multiplizieren, d.h.:

1314 = 0x0522: R0 = 0x05, R1 = 0x22

Und das Ergebnis:
15768 = 0x003D98: R2 = 0x00, R0 = 0x3D, R1 = 0x98



Peter

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Ferber schrieb:
> Simon K. schrieb:
>> Ich bin mir sicher du meinst Zahlen zur Basis 2 und nicht 256 :-)

Wie soll man denn eine Ziffer, die 256 Zahlensymbole braucht aufs Papier 
schreiben?
Wenn dann macht es Sinn, wie PeDa es gemacht hat. Mit einer Basis von 
16. Als Hexadezimal.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simon K. schrieb:
> Wie soll man denn eine Ziffer, die 256 Zahlensymbole braucht aufs Papier
> schreiben?

0xFF
oder 0377
oder 0b11111111
oder 255

256 stimmt, denn der Multiplikationsbefehl verarbeitet 2 Bytes.


Peter

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.