⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cc1.asm

📁 一个表达式解析器
💻 ASM
📖 第 1 页 / 共 4 页
字号:
CODE SEGMENT PUBLIC
ASSUME CS:CODE, SS:DATA, DS:DATA
extrn __eq: near
extrn __ne: near
extrn __le: near
extrn __lt: near
extrn __ge: near
extrn __gt: near
extrn __ule: near
extrn __ult: near
extrn __uge: near
extrn __ugt: near
extrn __lneg: near
extrn __switch: near
dw 0
CODE ENDS
DATA SEGMENT PUBLIC
dw 0
PUBLIC _nogo
_nogo DW 1 DUP(0)
PUBLIC _noloc
_noloc DW 1 DUP(0)
PUBLIC _opindex
_opindex DW 1 DUP(0)
PUBLIC _opsize
_opsize DW 1 DUP(0)
PUBLIC _swactive
_swactive DW 1 DUP(0)
PUBLIC _swdefaul
_swdefaul DW 1 DUP(0)
PUBLIC _swnext
_swnext DW 0
PUBLIC _swend
_swend DW 0
PUBLIC _stage
_stage DW 0
PUBLIC _wq
_wq DW 0
PUBLIC _argcs
_argcs DW 1 DUP(0)
PUBLIC _argvs
_argvs DW 0
PUBLIC _wqptr
_wqptr DW 0
PUBLIC _litptr
_litptr DW 1 DUP(0)
PUBLIC _macptr
_macptr DW 1 DUP(0)
PUBLIC _pptr
_pptr DW 1 DUP(0)
PUBLIC _ch
_ch DW 1 DUP(0)
PUBLIC _nch
_nch DW 1 DUP(0)
PUBLIC _declared
_declared DW 1 DUP(0)
PUBLIC _iflevel
_iflevel DW 1 DUP(0)
PUBLIC _skipleve
_skipleve DW 1 DUP(0)
PUBLIC _nxtlab
_nxtlab DW 1 DUP(0)
PUBLIC _litlab
_litlab DW 1 DUP(0)
PUBLIC _csp
_csp DW 1 DUP(0)
PUBLIC _argstk
_argstk DW 1 DUP(0)
PUBLIC _argtop
_argtop DW 1 DUP(0)
PUBLIC _ncmp
_ncmp DW 1 DUP(0)
PUBLIC _errflag
_errflag DW 1 DUP(0)
PUBLIC _eof
_eof DW 1 DUP(0)
PUBLIC _output
_output DW 1 DUP(0)
PUBLIC _files
_files DW 1 DUP(0)
PUBLIC _filearg
_filearg DW 1 DUP(0)
PUBLIC _input
_input DW 1 DUP(0)
PUBLIC _input2
_input2 DW 1 DUP(0)
PUBLIC _usexpr
_usexpr DW 1 DUP(0)
PUBLIC _ccode
_ccode DW 1 DUP(0)
PUBLIC _snext
_snext DW 0
PUBLIC _stail
_stail DW 0
PUBLIC _slast
_slast DW 0
PUBLIC _listfp
_listfp DW 1 DUP(0)
PUBLIC _lastst
_lastst DW 1 DUP(0)
PUBLIC _oldseg
_oldseg DW 1 DUP(0)
PUBLIC _optimize
_optimize DB 1 DUP(0)
PUBLIC _alarm
_alarm DB 1 DUP(0)
PUBLIC _monitor
_monitor DB 1 DUP(0)
PUBLIC _pause
_pause DB 1 DUP(0)
PUBLIC _symtab
_symtab DW 0
PUBLIC _litq
_litq DW 0
PUBLIC _macn
_macn DW 0
PUBLIC _macq
_macq DW 0
PUBLIC _pline
_pline DW 0
PUBLIC _mline
_mline DW 0
PUBLIC _line
_line DW 0
PUBLIC _lptr
_lptr DW 0
PUBLIC _glbptr
_glbptr DW 0
PUBLIC _locptr
_locptr DW 0
PUBLIC _quote
_quote DB 34
 DB 1 DUP(0)
PUBLIC _cptr
_cptr DW 0
PUBLIC _cptr2
_cptr2 DW 0
PUBLIC _cptr3
_cptr3 DW 0
PUBLIC _msname
_msname DB 9 DUP(0)
PUBLIC _ssname
_ssname DB 9 DUP(0)
PUBLIC _op
_op DW 57,73,3,20,55,43,22,47,35,7
 DW 6,1,69,52,16,49
PUBLIC _op2
_op2 DW 57,73,3,20,55,44,23,48,36,7
 DW 6,1,69,53,17,50
DATA ENDS
CODE SEGMENT PUBLIC
ASSUME CS:CODE, SS:DATA, DS:DATA
PUBLIC _main
_main:
PUSH BP
MOV BP,SP
MOV AX,OFFSET _VERSION
PUSH AX
MOV AX,OFFSET _stderr
PUSH AX
MOV CL,2
CALL _fputs
ADD SP,4
MOV AX,OFFSET _CRIGHT1
PUSH AX
MOV AX,OFFSET _stderr
PUSH AX
MOV CL,2
CALL _fputs
ADD SP,4
MOV AX,6[BP]
MOV _argcs,AX
MOV AX,4[BP]
MOV _argvs,AX
MOV AX,360
PUSH AX
MOV AX,1
PUSH AX
MOV CL,2
CALL _calloc
ADD SP,4
MOV _swnext,AX
MOV AX,_swnext
ADD AX,712
MOV _swend,AX
MOV AX,200
PUSH AX
MOV AX,4
PUSH AX
MOV CL,2
CALL _calloc
ADD SP,4
MOV _stage,AX
MOV AX,30
PUSH AX
MOV AX,2
PUSH AX
MOV CL,2
CALL _calloc
ADD SP,4
MOV _wq,AX
MOV _wqptr,AX
MOV AX,2000
PUSH AX
MOV AX,1
PUSH AX
MOV CL,2
CALL _calloc
ADD SP,4
MOV _litq,AX
MOV AX,3300
PUSH AX
MOV AX,1
PUSH AX
MOV CL,2
CALL _calloc
ADD SP,4
MOV _macn,AX
MOV AX,2100
PUSH AX
MOV AX,1
PUSH AX
MOV CL,2
CALL _calloc
ADD SP,4
MOV _macq,AX
MOV AX,128
PUSH AX
MOV AX,1
PUSH AX
MOV CL,2
CALL _calloc
ADD SP,4
MOV _pline,AX
MOV AX,128
PUSH AX
MOV AX,1
PUSH AX
MOV CL,2
CALL _calloc
ADD SP,4
MOV _mline,AX
MOV AX,_stage
ADD AX,1600
MOV _slast,AX
MOV AX,3500
PUSH AX
MOV AX,1
PUSH AX
MOV CL,2
CALL _calloc
ADD SP,4
MOV _symtab,AX
MOV AX,_symtab
MOV _locptr,AX
MOV AX,_symtab
ADD AX,300
MOV _glbptr,AX
XOR CL,CL
CALL _ask
XOR CL,CL
CALL _openfile
XOR CL,CL
CALL _preproce
XOR CL,CL
CALL _header
XOR CL,CL
CALL _setcodes
XOR CL,CL
CALL _parse
XOR CL,CL
CALL _trailer
PUSH _output
MOV CL,1
CALL _fclose
ADD SP,2
POP BP
RET
PUBLIC _parse
_parse:
PUSH BP
MOV BP,SP
_3:
MOV AX,_eof
OR AX,AX
JE $+5
JMP _4
MOV AX,OFFSET _2+0
PUSH AX
MOV AX,6
PUSH AX
MOV CL,2
CALL _amatch
ADD SP,4
OR AX,AX
JNE $+5
JMP _5
MOV AX,3
PUSH AX
MOV CL,1
CALL _dodeclar
ADD SP,2
JMP _6
_5:
MOV AX,2
PUSH AX
MOV CL,1
CALL _dodeclar
ADD SP,2
OR AX,AX
JNE $+5
JMP _7
JMP _8
_7:
MOV AX,OFFSET _2+7
PUSH AX
MOV CL,1
CALL _match
ADD SP,2
OR AX,AX
JNE $+5
JMP _9
XOR CL,CL
CALL _doasm
JMP _10
_9:
MOV AX,OFFSET _2+12
PUSH AX
MOV CL,1
CALL _match
ADD SP,2
OR AX,AX
JNE $+5
JMP _11
XOR CL,CL
CALL _doinclud
JMP _12
_11:
MOV AX,OFFSET _2+21
PUSH AX
MOV CL,1
CALL _match
ADD SP,2
OR AX,AX
JNE $+5
JMP _13
XOR CL,CL
CALL _dodefine
JMP _14
_13:
XOR CL,CL
CALL _dofuncti
_14:
_12:
_10:
_8:
_6:
XOR CL,CL
CALL _blanks
JMP _3
_4:
POP BP
RET
CODE ENDS
DATA SEGMENT PUBLIC
_2 DB 101,120,116,101,114,110,0,35,97,115
 DB 109,0,35,105,110,99,108,117,100,101
 DB 0,35,100,101,102,105,110,101,0
DATA ENDS
CODE SEGMENT PUBLIC
ASSUME CS:CODE, SS:DATA, DS:DATA
PUBLIC _dodeclar
_dodeclar:
PUSH BP
MOV BP,SP
MOV AX,OFFSET _15+0
PUSH AX
MOV AX,4
PUSH AX
MOV CL,2
CALL _amatch
ADD SP,4
OR AX,AX
JNE $+5
JMP _16
MOV AX,4
PUSH AX
PUSH 4[BP]
MOV CL,2
CALL _declglb
ADD SP,4
JMP _17
_16:
MOV AX,OFFSET _15+5
PUSH AX
MOV AX,8
PUSH AX
MOV CL,2
CALL _amatch
ADD SP,4
OR AX,AX
JNE $+5
JMP _18
MOV AX,OFFSET _15+14
PUSH AX
MOV AX,4
PUSH AX
MOV CL,2
CALL _amatch
ADD SP,4
OR AX,AX
JNE $+5
JMP _19
MOV AX,5
PUSH AX
PUSH 4[BP]
MOV CL,2
CALL _declglb
ADD SP,4
JMP _20
_19:
MOV AX,OFFSET _15+19
PUSH AX
MOV AX,3
PUSH AX
MOV CL,2
CALL _amatch
ADD SP,4
MOV AX,9
PUSH AX
PUSH 4[BP]
MOV CL,2
CALL _declglb
ADD SP,4
_20:
JMP _21
_18:
MOV AX,OFFSET _15+23
PUSH AX
MOV AX,3
PUSH AX
MOV CL,2
CALL _amatch
ADD SP,4
OR AX,AX
JE $+5
JMP _23
MOV BX,4[BP]
MOV AX,3
CALL __eq
OR AX,AX
JE $+5
JMP _23
XOR AX,AX
JMP _24
_23:
MOV AX,1
_24:
OR AX,AX
JNE $+5
JMP _22
MOV AX,8
PUSH AX
PUSH 4[BP]
MOV CL,2
CALL _declglb
ADD SP,4
JMP _25
_22:
XOR AX,AX
POP BP
RET
_25:
_21:
_17:
XOR CL,CL
CALL _ns
MOV AX,1
POP BP
RET
CODE ENDS
DATA SEGMENT PUBLIC
_15 DB 99,104,97,114,0,117,110,115,105,103
 DB 110,101,100,0,99,104,97,114,0,105
 DB 110,116,0,105,110,116,0
DATA ENDS
CODE SEGMENT PUBLIC
ASSUME CS:CODE, SS:DATA, DS:DATA
PUBLIC _declglb
_declglb:
PUSH BP
MOV BP,SP
ADD SP,-4
_27:
XOR CL,CL
CALL _endst
OR AX,AX
JNE $+5
JMP _29
MOV SP,BP
POP BP
RET
_29:
MOV AX,OFFSET _26+0
PUSH AX
MOV CL,1
CALL _match
ADD SP,2
OR AX,AX
JNE $+5
JMP _30
LEA BX,-2[BP]
MOV AX,3
MOV [BX],AX
LEA BX,-4[BP]
XOR AX,AX
MOV [BX],AX
JMP _31
_30:
LEA BX,-2[BP]
MOV AX,1
MOV [BX],AX
LEA BX,-4[BP]
MOV AX,1
MOV [BX],AX
_31:
MOV AX,OFFSET _ssname
PUSH AX
MOV CL,1
CALL _symname
ADD SP,2
OR AX,AX
JE $+5
JMP _32
XOR CL,CL
CALL _illname
_32:
MOV AX,OFFSET _ssname
PUSH AX
MOV CL,1
CALL _findglb
ADD SP,2
OR AX,AX
JNE $+5
JMP _33
MOV AX,OFFSET _ssname
PUSH AX
MOV CL,1
CALL _multidef
ADD SP,2
_33:
MOV BX,-2[BP]
MOV AX,1
CALL __eq
OR AX,AX
JNE $+5
JMP _34
MOV AX,OFFSET _26+2
PUSH AX
MOV CL,1
CALL _match
ADD SP,2
OR AX,AX
JNE $+5
JMP _35
LEA BX,-2[BP]
MOV AX,4
MOV [BX],AX
MOV AX,OFFSET _26+4
PUSH AX
MOV CL,1
CALL _need
ADD SP,2
JMP _36
_35:
MOV AX,OFFSET _26+6
PUSH AX
MOV CL,1
CALL _match
ADD SP,2
OR AX,AX
JNE $+5
JMP _37
LEA BX,-2[BP]
MOV AX,2
MOV [BX],AX
XOR CL,CL
CALL _needsub
LEA BX,-4[BP]
MOV [BX],AX
_37:
_36:
_34:
MOV BX,4[BP]
MOV AX,3
CALL __eq
OR AX,AX
JNE $+5
JMP _38
MOV AX,OFFSET _ssname
PUSH AX
MOV BX,6[BP]
MOV AX,2
MOV CX,AX
MOV AX,BX
SAR AX,CL
PUSH AX
PUSH -2[BP]
MOV CL,3
CALL _external
ADD SP,6
JMP _39
_38:
MOV BX,-2[BP]
MOV AX,4
CALL __ne
OR AX,AX
JNE $+5
JMP _40
MOV BX,6[BP]
MOV AX,2
MOV CX,AX
MOV AX,BX
SAR AX,CL
PUSH AX
PUSH -2[BP]
PUSH -4[BP]
MOV CL,3
CALL _initials
ADD SP,6
_40:
_39:
MOV BX,-2[BP]
MOV AX,3
CALL __eq
OR AX,AX
JNE $+5
JMP _41
MOV AX,OFFSET _ssname
PUSH AX
PUSH -2[BP]
PUSH 6[BP]
MOV AX,2
PUSH AX
XOR AX,AX
PUSH AX
MOV AX,OFFSET _glbptr
PUSH AX
PUSH 4[BP]
MOV CL,7
CALL _addsym
ADD SP,14
JMP _42
_41:
MOV AX,OFFSET _ssname
PUSH AX
PUSH -2[BP]
PUSH 6[BP]
MOV BX,6[BP]
MOV AX,2
MOV CX,AX
MOV AX,BX
SAR AX,CL
MOV BX,-4[BP]
IMUL BX
PUSH AX
XOR AX,AX
PUSH AX
MOV AX,OFFSET _glbptr
PUSH AX
PUSH 4[BP]
MOV CL,7
CALL _addsym
ADD SP,14
_42:
MOV AX,OFFSET _26+8
PUSH AX
MOV CL,1
CALL _match
ADD SP,2
OR AX,AX
JE $+5
JMP _43
MOV SP,BP
POP BP
RET
_43:
JMP _27
_28:
MOV SP,BP
POP BP
RET
CODE ENDS
DATA SEGMENT PUBLIC
_26 DB 42,0,40,0,41,0,91,0,44,0
DATA ENDS
CODE SEGMENT PUBLIC
ASSUME CS:CODE, SS:DATA, DS:DATA
PUBLIC _initials
_initials:
PUSH BP
MOV BP,SP
ADD SP,-2
MOV _litptr,0
MOV AX,4[BP]
OR AX,AX
JE $+5
JMP _45
LEA BX,4[BP]
MOV AX,-1
MOV [BX],AX
_45:
MOV AX,4[BP]
LEA BX,-2[BP]
MOV [BX],AX
PUSH 6[BP]
MOV CL,1
CALL _public
ADD SP,2
MOV AX,OFFSET _44+0
PUSH AX
MOV CL,1
CALL _match
ADD SP,2
OR AX,AX
JNE $+5
JMP _46
MOV AX,OFFSET _44+2
PUSH AX
MOV CL,1
CALL _match
ADD SP,2
OR AX,AX
JNE $+5
JMP _47
_48:
MOV AX,4[BP]
OR AX,AX
JNE $+5
JMP _49
PUSH 8[BP]
PUSH 6[BP]
LEA AX,4[BP]
PUSH AX
MOV CL,3
CALL _init
ADD SP,6
MOV AX,OFFSET _44+4
PUSH AX
MOV CL,1
CALL _match
ADD SP,2
OR AX,AX
JE $+5
JMP _50
JMP _49
_50:
JMP _48
_49:
MOV AX,OFFSET _44+6
PUSH AX
MOV CL,1
CALL _need
ADD SP,2
JMP _51
_47:
PUSH 8[BP]
PUSH 6[BP]
LEA AX,4[BP]
PUSH AX
MOV CL,3
CALL _init
ADD SP,6
_51:
_46:
MOV BX,-2[BP]
MOV AX,-1
CALL __eq
OR AX,AX
JNE $+5
JMP _53
MOV BX,4[BP]
MOV AX,-1
CALL __eq
OR AX,AX
JNE $+5
JMP _53
MOV AX,1
JMP _54
_53:
XOR AX,AX
_54:
OR AX,AX
JNE $+5
JMP _52
MOV BX,6[BP]
MOV AX,2
CALL __eq
OR AX,AX
JNE $+5
JMP _55
MOV AX,OFFSET _44+8
PUSH AX
MOV CL,1
CALL _error
ADD SP,2
_55:
XOR AX,AX
PUSH AX
LEA BX,8[BP]
MOV AX,2
MOV [BX],AX
PUSH AX
MOV CL,2
CALL _stowlit
ADD SP,4
_52:
PUSH 8[BP]
MOV CL,1
CALL _dumplits
ADD SP,2
PUSH 8[BP]
PUSH 4[BP]
MOV CL,2
CALL _dumpzero
ADD SP,4
MOV SP,BP
POP BP
RET
CODE ENDS
DATA SEGMENT PUBLIC
_44 DB 61,0,123,0,44,0,125,0,110,101
 DB 101,100,32,97,114,114,97,121,32,115
 DB 105,122,101,0
DATA ENDS
CODE SEGMENT PUBLIC
ASSUME CS:CODE, SS:DATA, DS:DATA
PUBLIC _init
_init:
PUSH BP
MOV BP,SP
ADD SP,-2
LEA AX,-2[BP]
PUSH AX
MOV CL,1
CALL _string
ADD SP,2
OR AX,AX
JNE $+5
JMP _57
MOV BX,6[BP]
MOV AX,1
CALL __eq
OR AX,AX
JE $+5
JMP _59
MOV BX,8[BP]
MOV AX,1
CALL __ne
OR AX,AX
JE $+5
JMP _59
XOR AX,AX
JMP _60
_59:
MOV AX,1
_60:
OR AX,AX
JNE $+5
JMP _58
MOV AX,OFFSET _56+0
PUSH AX
MOV CL,1
CALL _error
ADD SP,2
_58:
MOV AX,4[BP]
PUSH AX
MOV BX,AX
PUSH [BX]
MOV AX,-2[BP]
MOV BX,_litptr
XCHG AX,BX
SUB AX,BX
POP BX
XCHG AX,BX
SUB AX,BX
POP BX
MOV [BX],AX
MOV BX,6[BP]
MOV AX,3
CALL __eq
OR AX,AX
JNE $+5
JMP _61
XOR CL,CL
CALL _point
_61:
JMP _62
_57:
LEA AX,-2[BP]
PUSH AX
MOV CL,1
CALL _constexp
ADD SP,2
OR AX,AX
JNE $+5
JMP _63
MOV BX,6[BP]
MOV AX,3
CALL __eq
OR AX,AX
JNE $+5
JMP _64
MOV AX,OFFSET _56+42
PUSH AX
MOV CL,1
CALL _error
ADD SP,2
_64:
PUSH -2[BP]
PUSH 8[BP]
MOV CL,2
CALL _stowlit
ADD SP,4
MOV AX,4[BP]
PUSH AX
MOV BX,AX
MOV AX,[BX]
DEC AX
POP BX
MOV [BX],AX
_63:
_62:
MOV SP,BP
POP BP
RET
CODE ENDS
DATA SEGMENT PUBLIC
_56 DB 109,117,115,116,32,97,115,115,105,103
 DB 110,32,116,111,32,99,104,97,114,32
 DB 112,111,105,110,116,101,114,32,111,114
 DB 32,99,104,97,114,32,97,114,114,97
 DB 121,0,99,97,110,110,111,116,32,97
 DB 115,115,105,103,110,32,116,111,32,112
 DB 111,105,110,116,101,114,0
DATA ENDS
CODE SEGMENT PUBLIC
ASSUME CS:CODE, SS:DATA, DS:DATA
PUBLIC _needsub
_needsub:
PUSH BP
MOV BP,SP
ADD SP,-2
MOV AX,OFFSET _65+0
PUSH AX
MOV CL,1
CALL _match
ADD SP,2
OR AX,AX
JNE $+5
JMP _66
XOR AX,AX
MOV SP,BP
POP BP
RET
_66:
LEA AX,-2[BP]
PUSH AX
MOV CL,1
CALL _constexp
ADD SP,2
OR AX,AX
JE $+5
JMP _67
LEA BX,-2[BP]
MOV AX,1
MOV [BX],AX
_67:
MOV AX,-2[BP]
OR AX,AX
JL $+5
JMP _68
MOV AX,OFFSET _65+2
PUSH AX
MOV CL,1
CALL _error
ADD SP,2
MOV AX,-2[BP]
NEG AX
LEA BX,-2[BP]
MOV [BX],AX
_68:
MOV AX,OFFSET _65+24
PUSH AX
MOV CL,1
CALL _need
ADD SP,2
MOV AX,-2[BP]
MOV SP,BP
POP BP
RET
CODE ENDS
DATA SEGMENT PUBLIC
_65 DB 93,0,110,101,103,97,116,105,118,101
 DB 32,115,105,122,101,32,105,108,108,101
 DB 103,97,108,0,93,0
DATA ENDS
CODE SEGMENT PUBLIC
ASSUME CS:CODE, SS:DATA, DS:DATA
PUBLIC _doinclud
_doinclud:
PUSH BP
MOV BP,SP
ADD SP,-32
XOR CL,CL
CALL _blanks
MOV BX,_lptr
MOV AL,[BX]
CBW
MOV BX,AX
MOV AX,34
CALL __eq
OR AX,AX
JE $+5
JMP _71
MOV BX,_lptr
MOV AL,[BX]
CBW
MOV BX,AX
MOV AX,60
CALL __eq
OR AX,AX
JE $+5
JMP _71
XOR AX,AX
JMP _72
_71:
MOV AX,1
_72:
OR AX,AX
JNE $+5
JMP _70
MOV AX,_lptr
INC AX
MOV _lptr,AX
_70:
LEA BX,-2[BP]
XOR AX,AX
MOV [BX],AX
_73:
MOV AX,-2[BP]
MOV BX,_lptr
ADD BX,AX
MOV AL,[BX]
CBW
OR AX,AX
JNE $+5
JMP _75
MOV AX,-2[BP]
MOV BX,_lptr
ADD BX,AX
MOV AL,[BX]
CBW
MOV BX,AX
MOV AX,34
CALL __ne

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -