发布于 2009-09-16 16:15:18
0楼
我用STL写了一个程序,调试通过了,以下为源代码,有简单的注释.
变量说明如下:
LD30---用做指针,做间接寻址,临时变量
Sum_int---整数部分值,临时变量
Sum_Fra---小数部分值,临时变量
Sign---符号值(1,-1),临时变量
N---小数部分的除数
Err---输出错误标志,输出值
Real_val---输出浮点值
OPN DB 1
L P#0.0
T LD 30
//正符号判断
L DBB [LD 30]
L '-'
==I
L -1
T #Sign
JC lop6
L DBB [LD 30]
L '+'
==I
L 1
T #Sign
JC lop6
lop4: SET //错误处理
= #Err
BEU
//赋初值
lop6: L 0
T #Sum_int
T #LoopCount
T #Sum_Fra
L 0.000000e+000
T #Real_Val
lop2: L #LoopCount
INC 1
T #LoopCount
L 4
>I
JC lop3 //超过字符串最大值,循环结束
L P#1.0
L LD 30
+D
T LD 30
L DBB [LD 30]
L '.'
==I
JC lop3 //找到小数点
L DBB [LD 30]
L '0'
JC lop4 //<于‘0’,出错
L DBB [LD 30]
L '9'
>I
JC lop4 //大于‘9’,出错
L DBB [LD 30]
L '0'
-I
L #Sum_int
+I
T #Sum_int
L 10
*I
T #Sum_int
JU lop2
lop3: L #LoopCount
L 4
>I
JC lop9 //没有小数点,转计算最后值
L P#1.0
L LD 30
+D
T LD 30
L #LoopCount
INC 1
T #LoopCount
L 1
T #N
lop7: L DBB [LD 30]
L '0'
-I
L #Sum_Fra
+I
T #Sum_Fra
L 10
*I
T #Sum_Fra
L #N
L 10
*I
T #N
L P#1.0
L LD 30
+D
T LD 30
L #LoopCount
INC 1
T #LoopCount
L 4
<=I
JC lop7
lop9: L #Sum_int
ITD
DTR
L 1.000000e+001
/R //前面计算多乘了10
T LD 12
L #Sum_Fra
ITD
DTR
L 1.000000e+001
/R //前面计算多乘了10
L #N
ITD
DTR
/R //除以N,得到小数
L LD 12
+R //小数+整数
L #Sign
ITD
DTR
*R //乘以符号位
T #Real_Val