例11.10 从键盘上读入一个带小数的数字字符串,然后把它转换成单精度浮点数,并存入内存单元DATA中。

解:
.MODEL SMALL
.386
.387
.DATA

DATA

DD 0

TEN

DD 10.0

TEMP

DW ?

SIGN

DB ?
.CODE
GETCH MACRO ;宏GETCH的功能是从键盘读入一个字符
MOV AH, 1
INT 21H
ENDM
.STARTUP
FLDZ ;ST=0
GETCH
.IF AL == ‘+’ ;判定是否输入正号‘+’

MOV

SIGN, 0

GETCH

.ENDIF
.IF AL == ‘-‘

MOV

SIGN, 1 ;判定是否输入负号‘-’

GETCH

.ENDIF
.REPEAT

FMUL

TEN

MOV

AH,0

SUB

AL, 30H

MOV

TEMP, AX

FIADD

TEMP ;部分数×10.0+(字符-‘0’)

GETCH

.UNTIL AL<’0’ || AL>’9’ ;完成整数部分的处理
CMP AL, ‘.’
JNE exit
FLD1 ;开始处理小数部分
.WHILE1

FDIV

TEN

GETCH

.BREAK  .IF AL<’0’ || AL>’9’

MOV

AH, 0

SUB

AL, 30H

MOV

TEMP, AX

FILD

TEMP

FMUL

ST, ST(1)

FADD

ST(2), ST

FCOMP

.ENDW
FCOMP
exit:
.IF SIGN == 1 ;如果是负数,那么需要改变符号

FCHS

.ENDIF
FSTP DATA ;保存最终转换的结果
.EXIT 0
END

关 闭