例11.9 把内存单元DATA中存放的单精度浮点数以小数的形式显示在屏幕上。

解:
.MODEL SMALL
.386
.387
.DATA

DATA

DD -1234.75

STATUS

DW ?

WHOLE

DD ?

FRACT

DD ?
.CODE
DISPS PROC NEAR ;子程序:显示AL中的字符
MOV AH, 6
MOV DL, AL
INT 21H
RET
DISPS ENDP
.STARTUP
FSTCW STATUS ;以小数形式显示浮点数DATA
OR STATUS,0C00H ;设定截取舍入方式
FLDCW STATUS
FLD DATA
FTST
FSTSW AX
AND AX, 4500H
CMP AX, 0100H
JNZ Positive
MOV AL, ‘-‘
CALL DISPS
FABS
Positive:
FLD ST
FRNDINT
FIST WHOLE ;保存整数部分
FSUBR
FABS
FSTP FRACT ;保存小数部分
MOV EAX, WHOLE
MOV EBX, 10
MOV CX, 0
PUSH BX
Again1:
MOV EDX, 0
DIV EBX
ADD DL, 30H
PUSH DX
INC CX
CMP EAX, 0
JNZ Again1
Disp1:
POP AX
CALL DISPS ;显示整数部分
LOOP Disp1
MOV AL, ‘.’
CALL DISPS ;显示小数点
MOV EAX, FRACT
FSTCW STATUS
XOR STATUS, 0C00H
FLDCW STATUS
FLD FRACT
FXTRACT
FSTP FRACT
FABS
FISTP WHOLE
MOV ECX, WHOLE
MOV EAX, FRACT
SHL EAX, 9
RCR EAX, CL
Again2:
MUL EBX
PUSH EAX
XCHG EAX, EDX
ADD AL, 30H
CALL DISPS
POP EAX
CMP EAX, 0
JNZ Again2
.EXIT 0
END

关 闭