⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 浮点数.txt

📁 会变语言实现的一些程序
💻 TXT
字号:
输出80位扩展精度浮点数 By 怜香(于2003-6-11发表) 

--------------------------------------------------------------------------------

; 输出 80位扩展精度的浮点数
; 用 Masm615 编译执行
; ML OutReal10.asm
;
; ------------------------------------------
        .386
        .model small
        .stack 400h
        .data
Buff    db 22 dup(0)
Num     real10 456.789e37   ;要被输出的数据
decsign db 0
decexp  dw 0


code    segment use16
assume  cs:code

start:
        mov ax,@data
        mov ds,ax
        mov es,ax
        mov eax,dword ptr Num
        mov edx,dword ptr Num+4
        call Out10
        mov ax,word ptr Num+8
        test ax,8000h
        jz Great0
        dec decsign
Great0:
        mov decexp,20
        and ax,7fffh
        sub ax,3fffh
        sub ax,63
        mov cx,ax
        cmp cx,0
        je fout
        jg Ge0
        neg cx
lt0:
        push cx
        call decdiv2
        pop cx
        loop lt0
        jmp fout
Ge0:
        push cx
        call decmul2
        pop cx
        loop Ge0
fout:
        call decshow
        mov ah,4ch
        int 21h

Out10   proc near
        lea di,Buff
        mov ecx,10
Out10_1:
        push eax
        mov eax,edx
        xor edx,edx
        div ecx
        mov ebx,eax
        pop eax
        div ecx
        mov [di],dl
        inc di
        mov edx,ebx
        or ebx,eax
        jnz Out10_1
        ret
Out10   endp

divadj  proc near
        cmp Buff+20,0
        jnz divadj1
        mov cx,20
        lea si,Buff+19
        lea di,Buff+20
        std
        rep movsb
        mov al,0
        stosb
        dec decexp
        jmp divadj
divadj1:
        ret
divadj  endp

decdiv2 proc near
        call divadj
        mov cx,21
        mov ah,0
        lea di,Buff+20
decdiv2_1:
        mov al,[di]
        mov bl,2
        aad
        div bl
        mov [di],al
        dec di
        loop decdiv2_1
        ret
decdiv2 endp

muladj  proc near
        cmp Buff+21,0
        jz muladj1
        lea si,Buff+1
        lea di,Buff
        mov cx,21
        cld
        rep movsb
        mov al,0
        stosb
        inc decexp
muladj1:
        ret
muladj  endp

decmul2 proc near
        call muladj
        mov ah,0
        lea di,Buff
        mov cx,22
decmul2_1:
        mov al,[di]
        sal al,1
        add al,ah
        aam
        mov [di],al
        inc di
        loop decmul2_1
        ret
decmul2 endp

decshow proc near
        call muladj
        call divadj
        cmp decsign,0
        mov al,' '
        je decshow1
        mov al,'-'
decshow1:
        call stdout
decshow2:
        lea si,Buff+20
        mov al,[si]
        dec si
        add al,'0'
        call stdout
        mov al,'.'
        call stdout
        mov cx,10
decshow3:
        mov al,[si]
        dec si
        add al,'0'
        call stdout
        loop decshow3
        mov al,'E'
        call stdout
        mov dx,decexp
        mov al,'+'
        cmp dx,0
        jge decshow4
        neg dx
        mov al,'-'
decshow4:
        call stdout
        mov ax,dx
        call Outax
        ret
decshow endp
        
stdout  proc near
        push ax
        push dx
        mov dl,al
        mov ah,2
        int 21h
        pop dx
        pop ax
        ret
stdout  endp
        
Outax   proc near
        xor cx,cx
        mov bp,10
Outax1:
        xor dx,dx
        div bp
        push dx
        inc cx
        or ax,ax
        jnz Outax1
Outax2:
        pop ax
        add al,'0'
        call stdout
        loop Outax2
        ret
Outax   endp
        
code    ends
        end start

;---------------------------------------
;程序运行结果!

D:\Masm615>OutReal10
4.5678899999E+39
D:\Masm615>_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -