02.05.2013 Aufrufe

beginner_de

beginner_de

beginner_de

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Avr-Asm-Tutorial S. 87<br />

Die Multiplikation einer Zahl mit 2 geht einfach so vor sich, dass alle Bits einer binären Zahl um eine<br />

Stelle nach links geschoben wer<strong>de</strong>n. In das freie Bit 0 kommt eine Null. Das überzählige ehemalige<br />

Bit 7 wird dabei in das Carry-Bit im Status-Register abgeschoben. Der Vorgang wird logisches<br />

Links-Schieben genannt.<br />

LSL R1<br />

Das umgekehrte Dividieren durch 2 heißt Dividieren o<strong>de</strong>r logisches Rechts-Schieben.<br />

LSR R1<br />

Dabei wird das frei wer<strong>de</strong>n<strong>de</strong> Bit 7 mit einer 0 gefüllt, während das Bit 0 in das Carry geschoben<br />

wird. Dieses Carry kann dann zum Run<strong>de</strong>n <strong>de</strong>r Zahl verwen<strong>de</strong>t wer<strong>de</strong>n. Als Beispiel wird eine Zahl<br />

durch vier dividiert und dabei gerun<strong>de</strong>t.<br />

Div2:<br />

DivE:<br />

LSR R1 ; Division durch 2<br />

BRCC Div2 ; Springe wenn kein Run<strong>de</strong>n<br />

INC R1 ; Aufrun<strong>de</strong>n<br />

LSR R1 ; Noch mal durch 2<br />

BRCC DivE ; Springe wenn kein Run<strong>de</strong>n<br />

INC R1 ; Aufrun<strong>de</strong>n<br />

Teilen ist also eine einfache Angelegenheit bei Binärzahlen (aber nicht durch 3 o<strong>de</strong>r 5)!<br />

Bei Vorzeichen-behafteten Zahlen wür<strong>de</strong> das Rechtsschieben das Vorzeichen in Bit 7 übel verän<strong>de</strong>rn.<br />

Das darf nicht sein. Des<strong>de</strong>wegen gibt es neben <strong>de</strong>m logischen Rechtsschieben auch das arithmetische<br />

Rechtsschieben. Dabei bleibt das Vorzeichenbit 7 erhalten und die Null wird in Bit 6 eingeschoben.<br />

ASR R1<br />

Wie beim logischen Schieben lan<strong>de</strong>t das Bit 0 im Carry.<br />

Wie nun, wenn wir 16-Bit-Zahlen mit 2 multiplizieren wollen? Dann muss das links aus <strong>de</strong>m untersten<br />

Byte herausgeschobene Bit von rechts in das oberste Byte hineingeschoben wer<strong>de</strong>n. Das erledigt<br />

man durch Rollen. Dabei lan<strong>de</strong>t keine Null im Bit 0 <strong>de</strong>s verschobenen Registers, son<strong>de</strong>rn <strong>de</strong>r<br />

Inhalt <strong>de</strong>s Carry-Bits.<br />

LSL R1 ; Logische Schieben unteres Byte<br />

ROL R2 ; Linksrollen <strong>de</strong>s oberen Bytes<br />

Bei <strong>de</strong>r ersten Instruktion gelangt Bit 7 <strong>de</strong>s unteren Bytes in das Carry-Bit, bei <strong>de</strong>r zweiten Instruktion<br />

dann in Bit 0 <strong>de</strong>s oberen Bytes. Nach <strong>de</strong>r zweiten Instruktion hängt Bit 7 <strong>de</strong>s oberen Bytes im<br />

Carry-Bit herum und wir könnten es ins dritte Byte schieben, usw. Natürlich gibt es das Rollen auch<br />

nach rechts, zum Dividieren von 16-Bit-Zahlen gut geeignet. Hier nun alles Rückwärts:<br />

LSR R2 ; Oberes Byte durch 2, Bit 0 ins Carry<br />

ROR R1 ; Carry in unteres Byte und dabei rollen<br />

So einfach ist das mit <strong>de</strong>m Dividieren bei großen Zahlen. Man sieht sofort, dass Assembler-Dividieren<br />

viel schwieriger zu erlernen ist als Hochsprachen-Dividieren, o<strong>de</strong>r?<br />

Gleich vier mal Spezial-schieben kommt jetzt. Es geht um die Nibble gepackter BCD-Zahlen. Wenn

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!