📄 sq5b.asm
字号:
;.386
PORT EQU 3f8H
DATA SEGMENT
MES DB 'You can play a key on the keybort!',0AH,0DH
DB 'ESC quit to dos!',0AH,0DH,'$'
filename db 15,?,16 dup(?),'$'
filename1 db 15,?,16 dup(?)
buff db 200h dup(?)
fcb db 3h
db 8 dup(20h)
db 'txt'
db 25 dup(0)
handle1 dw 0
handle dw 0
cmd db 15 dup(?)
fileinfo db 5 dup(0),'$'
msg1 db 0dh,0ah,'some body transport a ','$'
msg2 db 0dh,0ah,'file,do you receve?(y/n) ','$'
msg3 db 0dh,0ah,'input a filename save as:','$'
msg4 db 0dh,0ah,'file transport complet!','$'
msg5 db 0dh,0ah,'Bad command!','$'
msg6 db 0dh,0ah,'waiting for anwser....','$'
msg7 db 0dh,0ah,'refuse you file','$'
errmsg db 0dh,0ah,'can not find file!','$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AL,80H
MOV DX,PORT+3
OUT DX,AL
MOV AL,13 ;set light divisor
MOV DX,PORT
OUT DX,AL
MOV AL,00 ;set low divisor 9600 boud
MOV DX,PORT+1
OUT DX,AL
MOV AL,00011011B ;8 bits 1 stop
MOV DX,PORT+3
OUT DX,AL
MOV AL,00H
MOV DX,PORT+1
OUT DX,AL ;interrupt enable all off
MOV DX,OFFSET MES
MOV AH,09H
INT 21H
mov dx,port+5
mov al,00h
out dx,al
mov si,offset cmd
;jmp near ptr exit
;*************************************************************
input: ;mov bx,offset cmd
;cmp si,bx
;jnz next0
;mov dl,'>'
;mov ah,2
;int 21h
next0: mov ah,1
int 16h
jz check
mov ah,0
int 16h
cmp al,0dh
jz chuli1
cmp al,1bh
jz exit1
mov [si],al
inc si
mov dl,al
mov ah,2
int 21h
jmp check
exit1:mov ah,4ch
int 21h
chuli1:jmp chuli
;************************************************************
check: mov di,offset fileinfo
MOV DX,PORT+5
IN AL,DX ;GET LINE STATUS
TEST AL,1
JZ input
mov dx,port
in al,dx
mov [di],al
mov cx,4
wait8: MOV DX,PORT+5
IN AL,DX
TEST AL,1
jz wait8
mov dx,port
in al,dx
inc di
mov [di],al
loop wait8
mov dx,offset msg1
mov ah,9
int 21h
mov dx,offset fileinfo
add dx,2
mov ah,9
int 21h
mov dx,offset msg2
mov ah,9
int 21h
mov ah,1
int 21h
mov dx,port
out dx,al
cmp al,'y'
jz wom
mov si,offset cmd
jmp near ptr input
wom: mov dx,offset msg3
mov ah,9
int 21h
mov dx,offset filename1
mov ah,0ah
int 21h
mov bx,dx
mov si,[bx+1]
and si,00ffh
add si,2
mov byte ptr[bx+si],00h
add dx,2
mov ah,3ch
mov cx,00
int 21h
; jc error1 can't creat file fbdfbfdbdfbdfbdfbdfbfdb
mov handle1,ax
next1: mov dx,port
out dx,al
jmp near ptr input
wait6:
mov bl,fileinfo[0]
mov bh,fileinfo[1]
cmp bx,200h
jb wait7
sub bx,200h
mov cx,200h
jmp next8
wait7:mov cx,bx
mov bx,0
next8:mov fileinfo[0],bl
mov fileinfo[1],bh
push cx
mov di,offset buff
mov dx,port
mov al,'c'
out dx,al
wait9: mov dx,port+5
in al,dx
test al,1
jz wait9
in al,dx
mov [di],al
inc di
loop wait9
;call write
mov ah,40h
mov bx,handle1
pop cx
mov dx,offset buff
int 21h
;jc error
mov al,fileinfo[0]
mov ah,fileinfo[1]
cmp ax,0
jnz wait6
ov2: mov bx,handle1
mov ah,3eh
int 21h
mov dx,offset msg4
mov ah,9
int 21h
ov3:mov si,offset cmd
jmp near ptr input
;*****************************************************************
chuli:
mov si,offset cmd
cmp byte ptr[si],'t'
jz wmo;jnz next2
mov dx,offset msg5
mov ah,9
int 21h
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
int 21h
mov si,offset cmd
jmp near ptr input
wmo: add si,2
mov di,offset fcb
add di,1
mov cx,8
nba:cmp byte ptr[si],'.'
jz out1
;movsb
mov dl,[si]
mov [di],dl
inc si
inc di
loop nba
out1:inc si
;mov si,offset cmd
;add si,11
mov di,offset fcb
add di,9
mov cx,3
fifa: mov dl,[si]
mov [di],dl
cmp cx,1
jz out2
inc si
inc di
out2:loop fifa
inc si
mov byte ptr[si],00h
mov dx,offset fcb
mov ah,0fh
int 21h
or al,al
; jnz error:"con't find file"
jz ooa
mov dx,offset errmsg
mov ah,9
int 21h
jmp near ptr ov1
ooa:mov dx,offset fcb
mov bx,dx
;mov word ptr[bx+0eh],200h
mov ax,[bx+10h]
mov fileinfo[0],al
mov fileinfo[1],ah
mov cx,3
mov si,offset fcb
add si,9
mov di,offset fileinfo
add di,2
fifa2: mov dl,[si]
mov [di],dl
inc si
inc di
loop fifa2
mov dx,offset fileinfo
mov ah,9
int 21h
mov dx,offset fcb ;close file
mov ah,10h
int 21h
mov ah,3dh
mov al,00
mov dx,offset cmd ;open file
add dx,2
int 21h
;jc error:can't open
mov handle,ax
mov di,offset fileinfo
mov cx,5
;jmp near ptr exit
; mov dx,port+5
; mov al,00h
;out dx,al
wait2:;mov dx,port+5
;in al,dx
;test al,20h
;jz wait2
push cx
mov cx,40h
loop1:loop loop1
pop cx
mov dx,port
mov al,[di]
out dx,al
inc di
loop wait2
mov dx,offset msg6
mov ah,9
int 21h
wait1: MOV DX,PORT+5
IN AL,DX
TEST AL,1
jz wait1
mov dx,port
in al,dx
cmp al,'y'
jz next3
mov dx,offset msg7
mov ah,9
int 21h
jmp ov1
next3:
mov bl,fileinfo[0]
mov bh,fileinfo[1]
cmp bx,200h
jb next4
sub bx,200h
mov cx,200h
jmp next5
next4:mov cx,bx
mov bx,0
next5:mov fileinfo[0],bl
mov fileinfo[1],bh
push cx
;call read
mov ah,3fh
mov bx,handle
mov dx,offset buff
int 21h
or al,al
;jnz error
wait5: mov dx,port+5
in al,dx
test al,1
jz wait5
;mov dx,port
;in al,dx
;cmp al,'c'
;jnz error
pop cx
mov di,offset buff
wait3: ;!!!!!!!!!!!!!!!!!!!!!!!==============
mov dx,port+5
in al,dx
test al,20h
jz wait3
mov al,[di]
out dx,al
inc di
loop wait3
mov al,fileinfo[0]
mov ah,fileinfo[1]
cmp ax,0
jnz next3
tov:
mov dx,offset msg4
mov ah,9
int 21h
mov bx,handle
mov ah,30h
int 21h
jmp ov1
next2:mov dx,offset msg5
mov ah,9
int 21h
ov1: mov si,offset cmd
jmp near ptr input
;*****************************************************
;mov al,'b'
;mov dx,port
;out dx,al
EXIT: MOV AH,4CH
INT 21H
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -