📄 fgets.mac
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -