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

📄 sq5b.asm

📁 汇编写的串口通讯程序,可传送64kb大小之内的文件
💻 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 + -