Hallo Fragewurm,
Das arithmetische Shiften bezieht sich auf Zahlen im 2er-Komplement.
Das Vorzeichen befindet sich dabei im MSB.
ASR entspricht eine Division durch 2. Das Vorzeichen muss also erhalten bleiben, was dem Kopieren des alten MSB ins Resultat entspricht.
ASL entspricht einer Multiplikation mit 2.
Dabei ist das Resultat IMMER eine gerade Zahl, also ist das LSB auch immer 0.
Um beliebig lange Zahlen mit 2 zu Multiplizieren, muss man also das das MSBit des LSByte zwischenspeichern und das LSBit des LSByte mit einer 0 auffüllen. Bei den weiteren Bytes muss dann das zwischengespeicherte MSBit des vorhergenden Bytes in das LSBit einschieben und das MSBit wieder zwischenspeichern.
Praktisch wird meist als Zwischenspeicher das Carry-Bit verwendet.
Die Multiplikation einer beliebig langer Zahl kann dann folgendermassen bewerkstelligt werden:
ASL Byte1
ROL Byte2
ROL Byte3
usw. …
Hie spielt es dann ekine Rolle ob die Zahl mit oder ohne Vorzeichen ist, es kann aber einen Überlauf geben und das Resultat mit endlicher Länge ist dann ungültig.
Bei der Division durch 2 sieht es etwas anders aus, hier muss man vorher wissen ob mit Zahlen mit oder ohne Vorzeichen gerechnet wird!
Bei 4 Bytes MIT Vorzeichen sieht es so aus:
ASR Byte4 ; Das Vorzeichen muss dupliziert werden
ROR Byte3
ROR Byte2
ROR Byte1
Mit OHNE Vorzeichen:
LSR Byte4 ; es gibt kein Vorzeichen
ROR Byte3
ROR Byte2
ROR Byte1
MfG Peter(TOO)