Ascii und Adressierung

OP #645041
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
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
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

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.