📄 ecvt.s
字号:
ldfps = 170100^tststfps = 170200^tst/ ftoa -- basic g fp conversion.globl _ndigit.globl ecvt.globl fcvt/ ecvt converts fr0 into decimal/ the string of converted digits is pointed to by r0./ the number of digits are specified by _ndigit/ r2 contains the decimal point/ r1 contains the sign.globl _ecvt, _fcvt_ecvt: mov r5,-(sp) mov sp,r5 mov r2,-(sp) movf 4(r5),fr0 mov 14(r5),_ndigit jsr pc,ecvt br 1f_fcvt: mov r5,-(sp) mov sp,r5 mov r2,-(sp) movf 4(r5),fr0 mov 14(r5),_ndigit jsr pc,fcvt1: mov r2,*16(r5) mov r1,*20(r5) mov (sp)+,r2 mov (sp)+,r5 rts pcfcvt: clr eflag br 1fecvt: mov $1,eflag1: stfps -(sp) ldfps $200 movf fr0,-(sp) movf fr1,-(sp) mov r3,-(sp) mov $buf,r1 clr r2 clr sign tstf fr0 cfcc beq zer bgt 1f inc sign negf fr01: modf $one,fr0 tstf fr1 cfcc beq lssgtr: movf fr0,-(sp) movf fr1,fr01: mov $buftop,r31: modf tenth,fr0 movf fr0,fr2 movf fr1,fr0 addf $epsilon,fr2 modf $ten,fr2 movfi fr3,r0 add $'0,r0 movb r0,-(r3) inc r2 tstf fr0 cfcc bne 1b/ mov $buf,r11: movb (r3)+,(r1)+ cmp r3,$buftop blo 1b/ movf (sp)+,fr0 br padzer: inc r2 br padlss: dec r2 modf $ten,fr0 tstf fr1 cfcc beq lss inc r2 jsr pc,digit1pad: jsr pc,digit br out br paddigit: cmp r1,$buftop bhis 1f add $2,(sp) modf $ten,fr0digit1: movfi fr1,r0 add $'0,r0 movb r0,(r1)+1: rts pc/out: mov $buf,r0 add _ndigit,r0 tst eflag bne 1f add r2,r01: cmp r0,$buf blo outout movb (r0),r3 add $5,r3 movb r3,(r0)1: cmpb (r0),$'9 ble 1f movb $'0,(r0) cmp r0,$buf blos 2f incb -(r0) br 1b2: movb $'1,(r0) inc r21:outout: mov sign,r1 mov _ndigit,r0 tst eflag bne 1f add r2,r01: clrb buf(r0) mov $buf,r0 mov (sp)+,r3 movf (sp)+,fr1 movf (sp)+,fr0 ldfps (sp)+ rts pcepsilon = 037114one = 40200ten = 41040 .datatenth: 037314; 146314; 146314; 146315_ndigit:10. .bssbuf: .=.+40.buftop:sign: .=.+2eflag: .=.+2 .text
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -