例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 |