Ascii und Adressierung

OP #645041
Lesenswert?
• ▲
▼
Hallo!
Nachdem ich einen langen Beitrag geschrieben habe und diesen aus 
versehen gelöscht habe argh fasse ich mich jetzt kurz.

Mein Problem:"Wie kann ich eine beliebige Zahl(<256) mit 5 
multiplizieren(überlauf?) und mit dem Ergebniss eine Speicheradresse 
größer 255 erreichen?"
1
font:
2
.DB   0,   0,   0,   0,   0,    0,   0,  95,   0,   0   ; #32: " ",#33: "!"
3
.DB   0,   7,   0,   7,   0,    20, 127,  20, 127,  20  ; #34: """,#35: "#"
4
.DB  36,  42, 127,  42,  18,    35,  19,   8, 100,  98  ; #36: "$",#37: "%"
5
.DB  54,  73,  85,  34,  80,    0,   5,   3,   0,   0   ; #38: "&",#39: "'"
6
.DB   0,  28,  34,  65,   0,    0,  65,  34,  28,   0   ; #40: "(",#41: ")"
7
.DB  20,   8,  62,   8,  20,    8,   8,  62,   8,   8   ; #42: "*",#43: "+"
8
.DB   0,  80,  48,   0,   0,    8,   8,   8,   8,   8   ; #44: ",",#45: "-"
Ziel: Erreichen der Speicherzelle des ersten bytes des Zeichens ascii36 
("$") mit eingabe seines ascii codes:
Angenommen das Zeichen "$"(Ascii36) soll erreicht werden, dann muss 32 
von ascii36 abgezogen werden, da die tabelle erst bei ascii32
anfängt. Wenn man jetzt die speicherzelle 4(=36-32) anspringt, kommt man 
natürlich beim 4ten byte vom leerzeichen raus und nicht beim ersten byte 
vom "$".
Um zum ersten byte des $ zu gelangen muss man also 4*5(byte)+1 rechnen.
Aber wie rechne ich das? Das mit dem 8bit übersteigenden rechnen 
verstehe ich noch nicht so ganz.

Vielen Dank im Vorraus, an die, die sich meinem Problem widmem!

Mfg Und3rt4ker
#645046
Lesenswert?
• ▲
▼
Was für ein µC soll das sein? Hat der einen Hardware-Multiplier? Wenn 
nicht, dann geht Multiplizieren mit 5 auch durch zweimal nach links 
schieben und Ausgangswert dazuaddieren (x*5 = x*2*2+x). Das Ergebnis ist 
natürlich 16-bittig, d.h. der Überlauf muss bei jeder Operation beachtet 
werden.
#645058
Lesenswert?
• ▲
▼
z.B. (ohne Gewähr, nicht getestet):
1
clr r1   ;r1 und r2 löschen
2
clr r2
3
mov r0, mpr  ;Ausgangswert in r0
4
lsl r0   ;16-Bit-Linksshift
5
rol r1
6
lsl r0   ;und nochmal
7
rol r1
8
add r0, mpr  ;Ausgangswert hinzuaddieren
9
adc r1, r2   ;Carry zum High-Byte addieren
Ergebnis (16 Bit) steht dann in r1 (High-Byte) und r0 (Low-Byte)

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