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