Forum: Gesperrte Threads Mehrbyteoperationen mit 8-bit-Akkumulator


von Julia (Gast)


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
von schablonski (Gast)


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

von magnetus (Gast)


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

von Andreas F. (aferber)


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

von Simon K. (simon) Benutzerseite


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 :-)

von Andreas F. (aferber)


Lesenswert?

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

Nein.

Andreas

von Peter D. (peda)


Lesenswert?

1
        mov     a, r1
2
        mov     b, r2
3
        mul     ab
4
        mov     r1, a
5
6
        mov     a, r0
7
        mov     r0, b
8
        mov     b, r2
9
        mul     ab
10
        mov     r2, b
11
12
        add     a, r0
13
        mov     r0, a
14
        jnc     _m24_1
15
        inc     r2
16
_m24_1:


Peter

von Julia (Gast)


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

von Peter D. (peda)


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

von Simon K. (simon) Benutzerseite


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.

von Peter D. (peda)


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.