18.12.2012 Aufrufe

6. Funktionseinheiten eines Computers / Mikrocomputers

6. Funktionseinheiten eines Computers / Mikrocomputers

6. Funktionseinheiten eines Computers / Mikrocomputers

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.

Rechnergrundlagen Teil 2 - 66 - Prof. Dipl.-Ing. Komar<br />

Das DEBUG-Programm unter DOS unterstützt nicht die Fehlersuche in Programmen für die FPU, denn bei<br />

einem Haltepunkt werden nicht die Inhalte der FPU-Register dargestellt.<br />

Außerdem kennt der DEBUG-Assemb ler nicht die symbolischen Format-Vereinbarungen DWORD und<br />

QWORD, sondern es stehen nur BYTE , WORD und TBYTE (10 Byte) zur Verfügung .<br />

Von den Anweisungen für die Vereinbarungen von Speicherbelegungen DB (1 Byte), DW (Word =2 Byte),<br />

DD ( Doubl e Word =4 Byte), DQ (Vierfachwort = 8 Byte ) und DT ( 10 Byte) akzeptiert der DEBUG-<br />

Assembler nur DB und DW.<br />

Im unten dargestellte DEBUG-Assembler-Programmbeispiel wird mit dem Euklidischen Algorithmus der<br />

größte gemeinsame Teiler zweier natürlicher Zahlen berechnet.<br />

Im Beispiel werden die beiden Zahlen 65535 und 255 als jeweils 18-stellige Dezimalzahlen ( 10 Byte Packed<br />

Dezimal Integer ) mittels DB-Anweisung im Speicher vereinbart, da dieses Beispielprogramm ohne Ein-und<br />

Ausgabe arbeitet. Das Ergebnis wird als 10 Byte BCD-Wert ab Offset-Adresse 0230 abgespeichert.<br />

Euklidischer Algorithmus (Programmablauf)<br />

p:= Zahl 1<br />

q:= Zahl 2<br />

1. p mod q = r (Teilerrest r von p/q )<br />

2. r = 0 ? �� ja, dann ist q der größte gemeinsamr Teiler ; END<br />

3. nein, dann p:= q ; q:= r<br />

4. gehe zu 1.<br />

a 100<br />

ORG 100<br />

;Euklidischer Algorithmus mit FPU ( Programm EUKLFPU.ASM )<br />

;<br />

FBLD TBYTE PTR [210] ; q als 18-stellige BCD-Zahl nach ST(0)<br />

FBLD TBYTE PTR [200] ; p auf Stapel nach ST, q dadurch nach ST(1)<br />

;<br />

FPREM ; ST = ST - ST(1) Teilschritt von p mod q = r<br />

FSTSW [220] ; FPU-Statuswort nach DS:0220<br />

TEST WORD PTR [220],400 ;C2-Flag auf 1 testen, modulo-Division beendet?<br />

JNZ 108 ;********************<br />

FTST ;modulo-Div. beendet aber ist r = ST = 0 ?<br />

FSTSW [220]<br />

TEST WORD PTR [220],4000 ;C3-Flag auf 1 testen, Teilerrest r = 0 ?<br />

JNZ 128 ;*********************<br />

FXCH ;Vertausche ST mit ST(1), p � q, q � r<br />

JMP 108<br />

FXCH ;Vertausche ST mit ST(1), r mit q<br />

FBSTP [230] ;q in Speicher bringen für Ergebnisausgabe<br />

MOV AX,4C00<br />

INT 21 ;Programm beenden<br />

;<br />

ORG 200<br />

DB 35,55,65,00,00,00,00,00,00,00 ;65535 in 10 Byte BCD<br />

ORG 210<br />

DB 55,02,00,00,00,00,00,00,00,00 ; 255<br />

n euklfpu.com<br />

r bx<br />

0<br />

r cx<br />

200<br />

w<br />

q

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!