📄 浮点数.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 + -