📄 postfix.asm
字号:
sta0 .DataBuf
sta0 .DataBuf+1
call .CheckPari
call .CheckMem
lda0 Temp2
sta0 .DataBuf
lda0 .AfterPari
cmpe #01h
brz .SynErr
cmpe #02h
brz .SynErr
cmpe #05h ;CNR
brz .Sign
cmpe #06h ;05h
brz .Sign
cmpe #09h
brz .Sign
cmpe #0ah
brz .PushStack ;.SynErr; .Sign
cmpe #0bh
brz .Sign
cmpe #0ch
brz .Sign
br .IN2PS
;-------------------------------------------
.LeftC:
lda0 .FormulaFlag
cmpe #01h
brnz .DoLCmode
lda0 .INDP
cmpe #03h
brnz .DoLCmode
br .LC2Stack
.DoLCmode:
lda0 .FractTrsCnt
inca
sta0 .FractTrsCnt
lda0 .DmsCount
cmpe #0h
brz .LCNoDms
lda0 .Buf1
cmpe #.Degree
brz .LCNoDms
cmpe #.Minute
brz .LCNoDms
cmpe #.Second
brz .LCNoDms
cmpe #0aeh
brz .LCNoDms
br .SynErr
.LCNoDms:
lda #0h
sta0 .PointFlag
sta0 .DmsCount
;sta0 .FractCount
lda0 .INDP
cmpe #01h
brz .LC2Stack
lda0 .Buf1
cmpe #.Negative
brz .PushNegative
cmpe #.Dec
brz .PushNegative ;.PushDec
cmpe #0dfh ;fract add
brz .LC2Stack
cmpe #0deh ;fract div
brz .LC2Stack ;.PushStack
cmpe #0aeh ;.dmsADD
brz .LCDms
cmpe #.Negative
brz .LC2Stack
cmpe #.LC
brz .LC2Stack
cmpe #.RC
brz .LCAddMul
cmpe #.Comma
brz .LC2Stack
cmpe #0b0h ;-----
brz .LC2Stack
cmpe #.Point ;.
brz .LCAddMulCls
lda0 .DataBuf
sta0 Temp2
lda0 .Buf1
sta0 .DataBuf+1
sta0 .DataBuf
call .CheckPari
lda0 Temp2
sta0 .DataBuf
lda0 .AfterPari
cmpe #0h
brz .LC2Stack
cmpe #01h
brz .LCAddMulCls
cmpe #02h
brz .LCAddMulCls
cmpe #03h
brz .LC2Stack
cmpe #04h
brz .LC2Stack
cmpe #05h ;CNR
brz .LC2Stack
cmpe #06h ;05h
brz .LC2Stack
cmpe #07h ;06h
brz .LCAddMulCls
cmpe #0ah
brz .LCAddMulCls
cmpe #09h
brz .LC2Stack
cmpe #0bh
brz .LC2Stack
cmpe #0ch
brz .LC2Stack
br .AddMulCls
;.PushDec:
; lda0 .DecFlag
; anda #01h
; cmpe #0h
; brz .LC2Stack
.PushNegative:
lda0 .DecFlag
anda #01h
cmpe #0h
brz .LC2Stack
lda #0h
sta0 .DecFlag ;0304
lda #.Negative
sta0 .DataBuf
call .StoStack ;.PushData
lda #.LC
sta0 .DataBuf
call .StoStack
lda #.LC
sta0 .Buf1
br .IN2PS
;lda #0h
;sta0 .DecFlag ;0304
;call .StoStack
;lda0 .DataBuf
;sta0 .Buf1
;lda #.Negative
;sta0 .DataBuf
;call .PushData
;lda #.LC
;sta0 .DataBuf
;br .IN2PS
.LCDms:
lda #0h
sta0 .DmsCount
br .LCAddMul
;-------------------------------------------
.RightC:
lda0 .FractTrsCnt
deca
sta0 .FractTrsCnt
lda #0h
sta0 .CommaFlag
sta0 .PointFlag
;sta0 .FractCount
sta0 .DmsCount
lda0 .DataBuf
sta0 Temp2
call .ClosEndPS
call .CkRightC
lda0 .AfterPari
sta0 .BeforePari
lda0 Temp2
sta0 .Buf1
br .IN2PS
;-------------------------------------------
.MemoryData:
lda0 .FormulaFlag
cmpe #01h
brnz .NormalMem
lda0 .INDP
cmpe #03h
brz .StoInPosfix
.NormalMem:
lda0 .INDP
cmpe #01h
brz .StoInPosfix
lda0 .Buf1
sta0 .DataBuf+1
cmpe #.RC
brz .MemAddMulCls
cmpe #.Negative
brz .StoInPosfix
cmpe #.Comma
brz .StoInPosfix
cmpe #0b0h ;----
brz .StoInPosfix
lda0 .DataBuf
sta0 Temp2
lda0 .DataBuf+1
sta0 .DataBuf
call .CheckPari
call .CheckMem
lda0 Temp2
sta0 .DataBuf
lda0 .AfterPari
cmpe #01h
brz .MemAddMulCls
cmpe #02h
brz .MemAddMulCls
cmpe #03h
brz .StoInPosfix
cmpe #04h
brz .StoInPosfix
cmpe #05h
brz .StoInPosfix
cmpe #06h ;05h
brz .StoInPosfix
cmpe #07h ;06
brz .StoInPosfix ;.MemAddMulCls
cmpe #08h
brz .StoInPosfix
cmpe #09h
brz .StoInPosfix
cmpe #0bh
brz .StoInPosfix
cmpe #0ch
brz .StoInPosfix
cmpe #0ah
brz .CKFuncOrdms ;.MemAddMulCls ;.StoInPosfix
cmpe #0h
brz .StoInPosfix
lda0 Temp2
sta0 .Buf1
lda #01h
sta0 .BeforePari
br .IN2PS
.CKFuncOrdms:
lda0 .DmsCount
cmpe #0h
brz .MemAddMulCls
br .StoInPosfix
.FuncCheck:
lda #01h
sta PP
lda #01h
sta .FunctFlag
lda #0h
sta0 .PointFlag
sta0 .DmsCount
lda0 .DataBuf
sta0 Temp2
lda0 .Buf1
sta0 .DataBuf
sta0 .DataBuf+1
call .CheckPari
call .CheckMem
lda0 Temp2
sta0 .DataBuf
lda0 .AfterPari
sta0 .BeforePari
lda0 .DataBuf
sta0 .DataBuf+1
call .CheckPari
call .CheckMem
lda0 .AfterPari
cmpe #05h
brz .CheckPari9
cmpe #06h ;05
brz .CheckPari5
cmpe #09h
brz .CheckPari9
cmpe #0ah
brz .CheckParia
cmpe #0bh
brz .CheckParib
cmpe #0ch
brz .CheckParib
br .IN2PS
.CheckPari5:
lda0 .FormulaFlag
cmpe #01h
brnz .DOPari5
lda0 .INDP
cmpe #03h
brnz .DOPari5
br .PushTOStack
.DOPari5:
lda0 .INDP
cmpe #01h
brz .PushTOStack
lda0 .Buf1
cmpe #.Negative
brz .Chkckdecflag ;.PushStack
cmpe #.LC
brz .LC2Stack ; .PushStack
cmpe #.Comma
brz .PushStack
cmpe #0aeh ;add
brz .AddMulCls
cmpe #0b0h
brz .PushStack
cmpe #.Degree
brz .ClrDmsaddmul
cmpe #.Minute
brz .ClrDmsaddmul
cmpe #.Second
brz .ClrDmsaddmul
lda0 .BeforePari
cmpe #0h
brz .AddMul
cmpe #01h
brz .AddMulCls
cmpe #02h
brz .AddMulCls
cmpe #03h
brz .Chkckdecflag
cmpe #04h
brz .Chkckdecflag
cmpe #06h ;05h
brz .PushTOStack
cmpe #07h ;06
brz .PushStack ;.AddMulCls
cmpe #08h ;06
brz .PushStack ;.AddMulCls
cmpe #0ah
brz .AddMulCls
cmpe #09h
brz .LC2Stack;.PushStack
cmpe #0ch
brz .PushStack
cmpe #0bh
brz .PushTOStack;.PushStack
cmpe #0h
brz .PushStack
lda0 .DataBuf
sta0 .Buf1
br .IN2PS
.Chkckdecflag:
lda0 .DecFlag
anda #01h
brz .PushStack
lda #0h
sta0 .DecFlag
lda0 .DataBuf
sta0 Temp3
lda #.Negative
sta0 .DataBuf
call .StoStack ;.PushData
lda0 Temp3
sta0 .DataBuf
br .PushTOStack
.CKdms5:
lda0 .DmsCount
cmpe #0h
brnz .SynErr
br .AddMulCls
.CKdms9:
lda0 .DmsCount
cmpe #0h
brnz .SynErr
br .PushStackCLS
.CheckParia:
lda0 .Buf1
cmpe #.Degree
brz .ClrDmsPushStack ;.ClrDmsaddmul
cmpe #.Minute
brz .ClrDmsPushStack ;.ClrDmsaddmul
cmpe #.Second
brz .ClrDmsPushStack ;.ClrDmsaddmul
lda0 .BeforePari
cmpe #0h
brz .PushStack
cmpe #01h
brz .PushStack
cmpe #02h
brz .PushStack
cmpe #06h ;06h
brz .PushStack
cmpe #09h ;06h
brz .DmsPopAE ;.PushStack
cmpe #0ah
brz .PushStackCls
cmpe #0bh
brz .ClrDmsaddmulcls
cmpe #0ch
brz .ClrDmsaddmulcls
lda0 .DataBuf
sta0 .Buf1
br .IN2PS
.DmsPopAE:
call .PopData
br .IN2PS
.CheckPari9:
lda0 .Buf1
cmpe #.Degree
brz .PushStack ;.SynErr
cmpe #.Minute
brz .PushStack ;.SynErr
cmpe #.Second
brz .PushStack ;.SynErr
lda0 .BeforePari
cmpe #0h
brz .PushStack
cmpe #01h
brz .CKdms9
cmpe #02h
brz .CKdms9
cmpe #07h ;06
brz .PushStackCls
cmpe #09h
brz .PushStackCls
cmpe #0ah
brz .PushStackCls
lda0 .DataBuf
sta0 .Buf1
br .IN2PS
.CheckParib:
lda0 .INDP
cmpe #01h
brz .PushStack
lda0 .Buf1
cmpe #.Degree
brz .PushStack ;.SynErr
cmpe #.Minute
brz .PushStack ;.SynErr
cmpe #.Second
brz .PushStack ;.SynErr
lda0 .BeforePari
cmpe #0h
brz .PushStack
cmpe #01h
brz .CKdms9
cmpe #02h
brz .CKdms9
cmpe #03h
brz .Add1PushStack
cmpe #04h
brz .Add1PushStack
cmpe #05h
brz .Add1PushStack
cmpe #06h ;05h
brz .Add1PushStack
cmpe #07h ;06
brz .PushStackCls
cmpe #09h
brz .Add1PushStack
cmpe #0ah
brz .SynErr
cmpe #0bh
brz .SynErr
cmpe #0ch
brz .SynErr
lda0 .DataBuf
sta0 .Buf1
br .IN2PS
.Add1PushStack:
lda #01h
sta0 .DataBuf
call .ClosEndPS
call .StoPosfix
call .ClosEndPS
lda #0a1h
sta0 .DataBuf
br .PushStack
.ClrDmsPushStack:
lda #0h
sta0 .DmsCount
brz .PushStack
.ClrDmsaddmul:
lda #0h
sta0 .DmsCount
br .AddMul
.ClrDmsaddmulcls:
call .ClosEndPS
lda #0h
sta0 .DmsCount
br .AddMul
.PolRec:
call .PushStack
lda0 .DataBuf
sta0 .Buf1
br .IN2PS
;-------------------------------------------
.AddMulCls:
lda0 .DmsCount
cmpe #0h
brnz .AddMul
call .ClosEndPS
.AddMul:
lda0 .FractCount
cmpe #01h
brz .AdjustFract
.FractAddMul:
lda0 .DataBuf
sta0 .Buf1
lda #.MUL
sta0 .DataBuf
sta0 .DataBuf+1
call .CheckPari
call .PushData
lda0 .Buf1
sta0 .DataBuf
sta0 .DataBuf+1
call .CheckPari
call .PushData
lda #0h
sta0 .BeforePari
br .IN2PS
.AdjustFract:
lda #.STPP
sta PP
lda0 .STDP
sta DP
lda i
cmpe #.LC
brz .FractAddMul
lda #0deh
sta i
lda #0h
sta0 .FractCount
br .FractAddMul
;-------------------------------------------
.StoInPosfixCls:
call .ClosEndPS
.StoInPosfix:
call .StoPosfix
lda0 .DataBuf
sta0 .Buf1
br .IN2PS
;-------------------------------------------
.MemAddMulCls:
call .ClosEndPS
.MemAddMul:
lda0 .DataBuf
sta0 .Buf2
lda #0cdh
sta0 .DataBuf
sta0 .DataBuf+1
call .CheckPari
call .PushData
lda0 .Buf2
sta0 .DataBuf
call .StoFuncPS
lda0 .DataBuf
sta0 .Buf1
br .IN2PS
;-------------------------------------------
.MemToMem:
lda0 .DataBuf
sta0 .Buf1
call .ClosEndPS
call .StoFuncPS
lda #.MUL
sta0 .DataBuf
call .ClosEndPS
call .StoFuncPS
br .IN2PS
;-------------------------------------------
.Sign:
lda0 .DataBuf
cmpe #.ADD
brz .IsADD
lda0 .DecFlag
inca
sta0 .DecFlag
.IsADD:
lda0 .DataBuf
sta0 .Buf1
br .IN2PS
;-------------------------------------------
.PushTOStack:
lda0 .DecFlag
anda #01h
brz .1$
lda #.STPP
sta PP
lda0 .STDP
sta DP
lda i
cmpe #0h
brz .NoAdddp
incdp
lda DP
sta0 .STDP
.NoAdddp:
lda #.Negative
sta i
lda #0h
sta0 .DecFlag
.1$:
call .StoStack
lda0 .AfterPari
sta0 .BeforePari
lda0 .DataBuf
sta0 .Buf1
br .IN2PS
;===========================================
.CheckPari::
lda0 .DataBuf+1
cmpe #.Point
brnz .CheckNum
lda #02h
sta0 .AfterPari
br .EndCheckPari
.CheckNum:
cmpe #10h
brc .CKAdd
lda #02h
sta0 .AfterPari
br .EndCheckPari
.CKAdd:
cmpe #.ADD
brnz .CKDec
lda #03h
sta0 .AfterPari
br .EndCheckPari
.CKDec:
lda0 .DataBuf+1
cmpe #.DEC
brnz .CKMul
lda #03h
sta0 .AfterPari
br .EndCheckPari
.CKMul:
lda0 .DataBuf+1
cmpe #.MUL
brnz .CKDiv
lda #04h
sta0 .AfterPari
br .EndCheckPari
.CKDiv:
lda0 .DataBuf+1
cmpe #.DIV
brnz .SPadd
lda #04h
sta0 .AfterPari
br .EndCheckPari
.SPadd:
lda0 .DataBuf+1
cmpe #0dfh
brnz .CKLC
lda #07h ;06
sta0 .AfterPari
br .EndCheckPari
.CKLC:
lda0 .DataBuf+1
cmpe #.LC
brnz .CKRC
lda #0h
sta0 .AfterPari
br .EndCheckPari
.CKRC:
lda0 .DataBuf+1
cmpe #.RC
brnz .CKFun5
lda #0h
sta0 .AfterPari
br .EndCheckPari
.CKFun5:
lda0 .DataBuf+1
cmpe #.NPR
brnz .CKFun6
lda #05h ;9h
sta0 .AfterPari
br .EndCheckPari
.CKFun6:
lda0 .DataBuf+1
cmpe #.NCR
brnz .CKFun1
lda #05h ;9h
sta0 .AfterPari
br .EndCheckPari
.CKFun1:
lda0 .DataBuf+1
cmpe #.XY
brnz .CKFun2
lda #09h
sta0 .AfterPari
br .EndCheckPari
.CKFun2:
lda0 .DataBuf+1
cmpe #.SQUX
brnz .CKFun3
lda #09h
sta0 .AfterPari
br .EndCheckPari
.CKFun3:
lda0 .DataBuf+1
cmpe #.POL
brnz .CKFun4
lda #0ch
sta0 .AfterPari
br .EndCheckPari
.CKFun4:
lda0 .DataBuf+1
cmpe #.REC
brnz .CKFun7
lda #0ch
sta0 .AfterPari
br .EndCheckPari
.CKFun7:
lda0 .DataBuf+1
cmpe #.REG
brnz .LCmul
lda #0h
sta0 .AfterPari
br .EndCheckPari
.LCmul:
lda0 .DataBuf+1
cmpe #0ech
brnz .MemMul
lda #05h
sta0 .AfterPari
br .EndCheckPari
.MemMul:
lda0 .DataBuf+1
cmpe #0cdh ;mem *
brnz .MemDiv
lda #07h ;06h
sta0 .AfterPari
br .EndCheckPari
.MemDiv:
lda0 .DataBuf+1
cmpe #0deh ;mem /
brnz .DmsAdd
lda #08h ;7
sta0 .AfterPari
br .EndCheckPari
.DmsAdd:
lda0 .DataBuf+1
cmpe #0aeh ;dms +
brnz .D_M_S
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -