fgets.mac

来自「--- --- ---基于C语言的编译器的 简单实现」· MAC 代码 · 共 287 行

MAC
287
字号
 INCLUDE PROLOG.H
_CC1:
 PUBLIC _fgets
_fgets:
 MOV BX,6
 ADD BX,SP
 MOV BX,[BX]
 PUSH BX  ;
 MOV BX,6
 ADD BX,SP
 MOV BX,[BX]
 PUSH BX  ;
 MOV BX,6
 ADD BX,SP
 MOV BX,[BX]
 PUSH BX  ;
 MOV BX,1
 PUSH BX  ;
 CALL _Ugets
 ADD SP,8
 RET
 PUBLIC _gets
_gets:
 MOV BX,2
 ADD BX,SP
 MOV BX,[BX]
 PUSH BX  ;
 MOV BX,32767
 PUSH BX  ;
 MOV BX,0
 PUSH BX  ;
 MOV BX,0
 PUSH BX  ;
 CALL _Ugets
 ADD SP,8
 RET
 PUBLIC _Ugets
_Ugets:
 SUB SP,4
 MOV BX,0
 ADD BX,SP
 XCHG DX,BX
 MOV BX,12
 ADD BX,SP
 MOV BX,[BX]
 MOV SI,DX
 MOV [SI],BX
_CC5:
 MOV BX,10
 ADD BX,SP
 MOV DX,BX
 MOV BX,[BX]
 DEC BX
 MOV SI,DX
 MOV [SI],BX
 OR BX,BX
 JG $+5
 JMP _CC6
 MOV BX,0
 ADD BX,SP
 MOV BX,[BX]
 PUSH BX  ;
 MOV BX,10
 ADD BX,SP
 MOV BX,[BX]
 PUSH BX  ;
 CALL _fgetc
 ADD SP,2
 POP DX
 MOV SI,DX
 MOV [SI],BL
 JMP _CC9
_CC10:
 MOV BX,0
 ADD BX,SP
 MOV BX,[BX]
 XCHG DX,BX
 MOV BX,0
 MOV SI,DX
 MOV [SI],BL
 MOV BX,0
 ADD BX,SP
 MOV BX,[BX]
 XCHG DX,BX
 MOV BX,12
 ADD BX,SP
 MOV BX,[BX]
 CMP DX,BX
 MOV BX,CX
 JNZ $+3
 INC BX
 OR BX,BX
 JNZ $+5
 JMP _CC11
 MOV BX,0
 ADD SP,4
 RET
_CC11:
 MOV BX,12
 ADD BX,SP
 MOV BX,[BX]
 ADD SP,4
 RET
_CC12:
 MOV BX,0
 ADD BX,SP
 MOV BX,[BX]
 XCHG DX,BX
 MOV BX,6
 ADD BX,SP
 MOV BX,[BX]
 ADD BX,DX
 XCHG DX,BX
 MOV BX,0
 MOV SI,DX
 MOV [SI],BL
 MOV BX,12
 ADD BX,SP
 MOV BX,[BX]
 ADD SP,4
 RET
_CC13:
 MOV BX,0
 ADD BX,SP
 MOV BX,[BX]
 XCHG DX,BX
 MOV BX,12
 ADD BX,SP
 MOV BX,[BX]
 CMP DX,BX
 MOV BX,CX
 JBE $+3
 INC BX
 OR BX,BX
 JNZ $+5
 JMP _CC14
 MOV BX,2
 ADD BX,SP
 XCHG DX,BX
 MOV BX,1
 MOV SI,DX
 MOV [SI],BX
 JMP _CC15
_CC14:
 MOV BX,2
 ADD BX,SP
 XCHG DX,BX
 MOV BX,0
 MOV SI,DX
 MOV [SI],BX
_CC15:
 JMP _CC16
_CC17:
 MOV BX,2
 ADD BX,SP
 PUSH BX  ;
 MOV BX,2
 ADD BX,SP
 MOV BX,[BX]
 XCHG DX,BX
 MOV BX,14
 ADD BX,SP
 MOV BX,[BX]
 SUB DX,BX
 MOV BX,DX
 POP DX
 MOV SI,DX
 MOV [SI],BX
_CC16:
 MOV BX,8
 ADD BX,SP
 MOV BX,[BX]
 PUSH BX  ;
 CALL _iscons
 ADD SP,2
 OR BX,BX
 JNZ $+5
 JMP _CC18
 MOV BX,OFFSET _CC4+0
 PUSH BX  ;
 MOV BX,2
 PUSH BX  ;
 CALL _fputs
 ADD SP,4
 MOV BX,10
 ADD BX,SP
 MOV DX,BX
 MOV BX,[BX]
 INC BX
 MOV SI,DX
 MOV [SI],BX
_CC19:
 MOV BX,2
 ADD BX,SP
 MOV DX,BX
 MOV BX,[BX]
 DEC BX
 MOV SI,DX
 MOV [SI],BX
 INC BX
 OR BX,BX
 JNZ $+5
 JMP _CC20
 MOV BX,OFFSET _CC4+7
 PUSH BX  ;
 MOV BX,2
 PUSH BX  ;
 CALL _fputs
 ADD SP,4
 MOV BX,0
 ADD BX,SP
 MOV DX,BX
 MOV BX,[BX]
 DEC BX
 MOV SI,DX
 MOV [SI],BX
 MOV AL,[BX]
 CBW
 MOV BX,AX
 XCHG DX,BX
 MOV BX,32
 CMP DX,BX
 MOV BX,CX
 JGE $+3
 INC BX
 OR BX,BX
 JNZ $+5
 JMP _CC21
 MOV BX,OFFSET _CC4+11
 PUSH BX  ;
 MOV BX,2
 PUSH BX  ;
 CALL _fputs
 ADD SP,4
_CC21:
 MOV BX,10
 ADD BX,SP
 MOV DX,BX
 MOV BX,[BX]
 INC BX
 MOV SI,DX
 MOV [SI],BX
 JMP _CC19
_CC20:
 JMP _CC5
_CC18:
_CC22:
 MOV BX,0
 ADD BX,SP
 MOV DX,BX
 MOV BX,[BX]
 INC BX
 MOV SI,DX
 MOV [SI],BX
 JMP _CC8
_CC9:
 CALL _CCSWITCH
 DW _CC10,-1
 DW _CC12,10
 DW _CC13,8
 DW _CC17,24
 DW 0
 JMP _CC22
_CC8:
 JMP _CC5
_CC6:
 MOV BX,0
 ADD BX,SP
 MOV BX,[BX]
 XCHG DX,BX
 MOV BX,0
 MOV SI,DX
 MOV [SI],BL
 MOV BX,12
 ADD BX,SP
 MOV BX,[BX]
 ADD SP,4
 RET
_CC4: DB 8,32,8,8,32,8,0,8,32,8
 DB 0,8,32,8,0
 EXTRN _iscons:NEAR
 EXTRN _fgetc:NEAR
 EXTRN _fputs:NEAR
 EXTRN _CCSWITCH:NEAR
 INCLUDE EPILOG.H
 END

⌨️ 快捷键说明

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