; ;PI.ASM: PI Berechnung ;Autor: Philipp Gühring (p.guehring@poboxes.com) ;Lizenz: GPL (http://www.opensource.org) ;Ergebnis: Bis jetzt auf 9(4) Stellen genau! ; .286 MYSTACK segment stack dw 64 dup (?) MYSTACK ends DATA segment Divisor dw 1 ;1,3,5,7,9,... Vorkomma equ 1 Nachkomma equ 9 Zw dw (Vorkomma+Nachkomma) dup (0) Pi dw (Vorkomma+Nachkomma) dup (0) DATA ends CODE segment ASSUME CS:CODE,DS:DATA Start: mov ax,DATA mov ds,ax Lbl_a: call Divit call Addit add word ptr ds:[Divisor],2 call Divit call Subit add word ptr ds:[Divisor],2 cmp word ptr ds:[Divisor],0FFF0h jb Lbl_a call Divit call Shiftit call Addit call Ausgabe mov ax,4C00h int 21h ;Jetzt kommen die Prozeduren Divit proc near pusha mov cx,word ptr [Divisor] xor dx,dx mov ax,4 mov bx,Offset Zw Lbl_b: div cx mov word ptr [bx],ax xor ax,ax add bx,2 cmp bx,Offset Zw+(Vorkomma+Nachkomma)*2 jb Lbl_b popa ret Divit endp Addit proc near pusha mov si,Offset Zw+(Vorkomma+Nachkomma)*2-2 mov di,Offset Pi+(Vorkomma+Nachkomma)*2-2 clc pushf Lbl_c: mov ax,word ptr [si] popf adc word ptr [di],ax pushf sub si,2 sub di,2 cmp si,Offset Zw jae Lbl_c popf popa ret Addit endp Subit proc near pusha mov si,Offset Zw+(Vorkomma+Nachkomma)*2-2 mov di,Offset Pi+(Vorkomma+Nachkomma)*2-2 clc pushf Lbl_d: mov ax,[si] popf sbb [di],ax pushf sub si,2 sub di,2 cmp si,Offset Zw jae Lbl_d popf popa ret Subit endp Shiftit proc near pusha mov bx,Offset Zw xor di,di clc pushf Lbl_e: popf rcr word ptr [bx+di],1 pushf add di,2 cmp di,2*(Vorkomma+Nachkomma) jb Lbl_e popf popa ret Shiftit endp Ausgabe proc near pusha ;Vorkomma mov bx,0 mov dx,0 mov ax,[Pi] mov cx,10d Lbl_f: div cx push dx xor dx,dx inc bx cmp ax,0 ja Lbl_f mov cx,bx Lbl_g: pop ax mov ah,0eh add al,"0" int 10h loop Lbl_g ;Komma mov al,"," int 10h ;Nachkommateil mov cx,10d mov di,20 Lbl_h: mov si,Offset Pi+(Vorkomma+Nachkomma)*2-2 mov bx,0 Lbl_i: mov ax,[si] mul cx add ax,bx mov [si],ax mov bx,dx sub si,2 cmp si,Offset Pi+Vorkomma*2 jae Lbl_i mov ah,0eh mov al,dl add al,"0" int 10h dec di cmp di,0 ja Lbl_h popa ret Ausgabe endp CODE ends end Start