6. Funktionseinheiten eines Computers / Mikrocomputers
6. Funktionseinheiten eines Computers / Mikrocomputers
6. Funktionseinheiten eines Computers / Mikrocomputers
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