📄 proc.asm
字号:
.MODEL TINY,STDCALL
.386
OPTION SEGMENT:USE16
INCLUDE LONG.INC ;proc1 may be used in proc2 here,
CODE SEGMENT BYTE PUBLIC 'CODE'
ASSUME CS:CODE
;------------------------------------------------
;input :a char
;output :
SHOW_CHAR PROC NEAR PUBLIC USES AX BX,
CHAR:BYTE
MOV AL,CHAR
MOV AH,0EH
MOV BX,000FH
INT 10H
RET
SHOW_CHAR ENDP
;-------------------------------------------------
;input :pointer to a $-terminated string
;output :
SHOW_STRING PROC NEAR PUBLIC USES AX DX,
ADDRESS:WORD
MOV DX,ADDRESS
MOV AH,09H
INT 21H
RET
SHOW_STRING ENDP
;-------------------------------------------------
;input :
;output :(dh,dl)==cursor location
READ_CURSOR PROC NEAR PUBLIC USES AX BX
MOV AH,03
MOV BH,0
INT 10H
RET
READ_CURSOR ENDP
;-------------------------------------------------
;intput : cursor location(x,y)
;output :
SET_CURSOR PROC NEAR PUBLIC USES AX BX,
X:BYTE,Y:BYTE
MOV AH,02
MOV BH,0
MOV DH,X
MOV DL,Y
INT 10H
RET
SET_CURSOR ENDP
;-------------------------------------------------
;input: start_1(cursor starting scan line),end_1(ending scan line)
;output:
SET_CURSOR_TYPE PROC NEAR PUBLIC,
START_1:BYTE,END_1:BYTE
MOV AH,01
MOV CH,START_1
MOV CL,END_1
INT 10H
RET
SET_CURSOR_TYPE ENDP
;-------------------------------------------------
;input:
;output:al==ascii of character, at the cursor location
READ_CHARACTER PROC NEAR PUBLIC
MOV AH,08
MOV BH,0
INT 10H
RET
READ_CHARACTER ENDP
;-------------------------------------------------
;input :cursor location (x,y),mode is text 80*25 only
;output :ax : vga pointer,ascii position
MAKE_VGA_POINTER PROC NEAR PUBLIC,
X:BYTE,Y:BYTE
MOV CL,80
MOV AL,X
MUL CL
MOVZX CX,Y
ADD AX,CX
SHL AX,1
RET
MAKE_VGA_POINTER ENDP
;------------------------------------------------
;input :attribute,(top,left),(bottom,right)
;output :
DRAW_WINDOW PROC NEAR PUBLIC,
ATTRIBUTE:BYTE,TOP:BYTE,LEFT:BYTE,BOTTOM:BYTE,RIGHT:BYTE
MOV AH,06H
MOV AL,0
MOV BH,ATTRIBUTE
MOV CH,TOP
MOV CL,LEFT
MOV DH,BOTTOM
MOV DL,RIGHT
INT 10H
RET
DRAW_WINDOW ENDP
;-------------------------------------------------
;input :
;output :
EXIT PROC NEAR PUBLIC
MOV AH,0
MOV AL,03
INT 10H
MOV AH,4CH
INT 21H
RET
EXIT ENDP
;------------------------------------------------
;input:file name== a pointer of a null-terminated string
;output:ax==ducument code
CREATE_FILE PROC NEAR PUBLIC USES CX,
FILENAME_P:WORD
MOV DX,FILENAME_P
MOV AH,3CH
MOV CX,0 ;file attrubute
INT 21H
RET
CREATE_FILE ENDP
;-------------------------------------------------
;input :1.doc_code;2.file_length;3.(pointer)seg buff;4.(pointer)offset buff
;output:
WRITE_FILE PROC NEAR PUBLIC,
DOC_CODE_P:WORD,FILE_LENGTH_P:WORD,SEG_BUFF_P:WORD,OFFSET_BUFF_P:WORD
PUSH DS
MOV BX,DOC_CODE_P
MOV CX,FILE_LENGTH_P
MOV DX,OFFSET_BUFF_P
MOV AX,SEG_BUFF_P
MOV DS,AX
MOV AH,40H
INT 21H
POP DS
RET
WRITE_FILE ENDP
;-------------------------------------------------
;input : doc_code
;output:
CLOSE_FILE PROC NEAR PUBLIC,
DOC_CODE_P:WORD
MOV BX,DOC_CODE_P
MOV AH,3EH
INT 21H
RET
CLOSE_FILE ENDP
;-------------------------------------------------
;input :pointer to a NULL-termilated string(file name)
;output :ax==document code
OPEN_FILE PROC NEAR PUBLIC,
FILENAME_P:WORD
MOV DX,FILENAME_P
MOV AL,02
MOV AH,3DH
INT 21H
RET
OPEN_FILE ENDP
;-------------------------------------------------
;input :1.document code;2.read length;3.seg buff;4.offset buff
;output :
READ_FILE PROC NEAR PUBLIC,
DOC_CODE_P:WORD,FILE_LENGTH_P:WORD,SEG_BUFF_P:WORD,OFFSET_BUFF_P:WORD
PUSH DS
MOV BX,DOC_CODE_P
MOV CX,FILE_LENGTH_P
MOV DX,OFFSET_BUFF_P
MOV AX,SEG_BUFF_P
MOV DS,AX
MOV AH,3FH
INT 21H
POP DS
RET
READ_FILE ENDP
;-------------------------------------------------
CODE ENDS
END SHOW_CHAR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -