📄 lib.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 + -