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

📄 lib.txt

📁 一个c语言的编译器的源代码
💻 TXT
字号:
.386
PUBLIC _input, _output

_DATA_SEG SEGMENT PUBLIC
BUFF	DB 11
LEN	DB ?
NUM	DB 11 DUP(0)
SUM	DD 0
_DATA_SEG ENDS

_CODE_SEG SEGMENT USE16 PUBLIC
ASSUME CS:_CODE_SEG, DS:_DATA_SEG

;Function name: _input
;Usage: input an integer from keyboard
;Parameter:
;	NONE
;Return value:
;	EAX: the number inputed

_input	PROC
	MOV EDX , OFFSET BUFF
	MOV AH , 0AH
	INT 21H
	CALL newline
	MOV ESI , OFFSET NUM
	CMP NUM , '-'
	JNE positive1
	DEC LEN
	INC SI
positive1:
	MOV CL , LEN	
	XOR CH , CH
	PUSH CX
	MOV EAX , 1
	DEC CX
	JZ one
multi:
	MOV EBX , 10
	MUL EBX
	LOOP multi
one:
	MOV EBX , EAX
	POP CX
	MOV SUM , 0
atoi:
	MOVZX EAX , BYTE PTR [ESI]
	SUB EAX , '0'
	MUL EBX
	ADD SUM , EAX
	MOV EAX , EBX
	MOV EBX , 10
	DIV EBX
	MOV EBX , EAX
	INC ESI
	LOOP atoi
	MOV EAX , SUM
	CMP NUM , '-'
	JNE exit
	NEG EAX
exit:
	RET
_input	ENDP

;Function name: _output
;Usage: output an integer to screen
;Parameter:
;	An integer on STACK top
;Return value:
;	NONE

_output PROC
	PUSH EBP
	MOV EBP , ESP
	XOR ECX , ECX
	MOV EAX , [EBP+6]
	AND EAX , 80000000H
	MOV EAX , [EBP+6]
	JE positive2
	NEG EAX
positive2:
	ROR EAX , 16
	MOV DX , AX
	SHR EAX , 16
disp1:
	MOV BX , 10
	DIV BX
	XCHG AX , DX
	ADD AX , '0'
	PUSH AX
	XOR AX , AX
	INC ECX
	CMP DX , 0
	XCHG AX , DX
	JNE disp1
	MOV EBX , [EBP+6]
	AND EBX , 80000000H
	JE positive3
	XOR AX , AX
	MOV AL , '-'
	PUSH AX
	INC ECX
positive3:
disp2:
	MOV ESI , OFFSET NUM
mkstr:
	POP DX
	MOV [ESI] , DL
	INC ESI
	LOOP mkstr
	MOV BYTE PTR [ESI] , '$'
	MOV EDX , OFFSET NUM
	MOV AH , 9
	INT 21H
	CALL newline
	POP EBP
	RET
_output ENDP

newline	PROC NEAR
	PUSH AX
	PUSH DX
	MOV AH , 2
	MOV DL , 0DH
	INT 21H
	MOV DL , 0AH
	INT 21H
	POP DX
	POP AX
	RET
newline ENDP
_CODE_SEG ENDS
END

⌨️ 快捷键说明

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