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

📄 103_a_x.asm

📁 用汇编语言编的一个霓虹灯演示程序
💻 ASM
字号:
 data_seg    segment

 line_on1    db ?
 col_on1     db ?
 line_on2    db ?
 col_on2     db ?
 char        db ?
 count       db ?
 count0      db ?
 count1      db ?
 char0       db ?
 cool0       db ?
 cool1       db ?
 cool2       db ?
 count_cx    dw ?
 data_seg    ends
;--------------------------------------------
 code_seg    segment
           assume cs:code_seg,ds:data_seg
 main        proc  far
             push  ds
             sub   ax,ax
             sub   cx,cx
             push  ax
             push  cx
             mov   ax,data_seg
             mov   ds,ax

             mov   char,2
             mov   count,2
             mov   char0,4
             mov   cool1,0eh
             mov   cool2,0ah
             mov   count0,8
             mov   count1,10
 again:      call  clear_screen
             mov   line_on1,4
             mov   col_on1,4
             call  must_2
             mov   count,1
 again1:             
             mov   line_on1,4
             mov   col_on1,4
             call  must_21
             cmp   count,1
             jne   exit0
             mov   cool1,0eh
             mov   cool2,0ah
             inc   count
             jmp   exit12
 exit0:      mov   cool1,0ch
             mov   cool2,03h
             dec   count
 exit12:     dec   count1
             jne   again1

             mov   line_on1,4
             mov   col_on1,4
             mov   line_on2,16
             mov   col_on2,3
             call  must_22
             pop   cx
             ret
 main        endp

 ;----------------------------
 clear_screen proc near
             push   ax
             push   bx
             push   cx
             push   dx
             mov    ah,6
             mov    al,0
             mov    ch,4
             mov    cl,4
             mov    dh,16
             mov    dl,74
             mov    bh,7
             int    10h
             pop     dx
             pop     cx
             pop     bx
             pop     ax
             ret
 clear_screen  endp
 ;-----------------------------------------
 ;----------------------------------------------
 must_2       proc near
                push ax
                push bx
                push dx
                mov  ah,0fh
                int  10h
                mov  cool0,1
  plot_next:
             mov  dh,line_on1
             mov  dl,col_on1
             mov  ah,2
             int  10h
             mov  al,40h
             mov  bl,0ch
             push cx
             mov  cx,1
             mov  ah,09
             int  10h
             pop  cx
             call dly_qrtr
             call dly_qrtr
             call dly_qrtr
             mov  dl,cool0
             cmp  char0,dl
             je   exit3
             call erase
             jmp  plot_next

 exit3:      cmp  col_on1,74
             je   exit1
             cmp  col_on1,38
             jne  exit7
             add  col_on1,2
             mov  cool0,1
             mov  line_on1,4
             jmp  plot_next

 exit7:      add  col_on1,2
             mov  cool0,1
             mov  line_on1,4
             cmp  count,1
             je   exit5
             cmp  char0,5
             je   exit4
             inc  char0
             jmp  plot_next
 exit5:      cmp  char0,1
             je   exit6
             dec  char0
             jmp  plot_next
 exit4:      dec  count
             dec  char0
             jmp  plot_next
 exit6:      inc  count
             inc  char0
             jmp  plot_next
 exit1:       
             pop  dx
             pop  bx
             pop  ax
 must_2     endp
;----------------------------------------
  must_21    proc near
                push ax
                push bx
                push dx
                mov  ah,0fh
                int  10h
 plot_next1:
             mov  dh,line_on1
             mov  dl,col_on1
             mov  ah,2
             int  10h
             mov  ah,8
             int  10h

             cmp  al,' '
             je   exit9
             cmp  al,40h
             jne  exit10
             mov  bl,cool1
             jmp  exit11
 exit10:     mov  al,'*'    
             mov  bl,cool2
 exit11:     push cx
             mov  cx,1
             mov  ah,09
             int  10h
             pop  cx
 exit9:      cmp  col_on1,74
             je   exit8 
             add  col_on1,2
             jmp  plot_next1
 exit8:      call dly_qrtr
             dec  count0
             jne  exit8
             mov  count0,10
             mov  col_on1,4             
             inc  line_on1
             cmp  line_on1,9
             jne  plot_next1
             pop  dx
             pop  bx
             pop  ax
             ret
 must_21   endp
;---------------------------------------
;----------------------------------------
 must_22      proc near
                push ax
                push bx
                push dx
             mov  count,10
             mov  dh,line_on1
             mov  dl,col_on1
 plot_next2:
             mov  ah,2
             int  10h
             mov  al,40h    
             mov  bl,0ch
             push cx
             mov  cx,1
             mov  ah,09
             int  10h
             pop  cx
             cmp  char,1
             je   exit17
             cmp  dl,74
             je   exit19
             jmp  exit18
 exit17:     cmp  dl,75
             je   exit19
 exit18:     add  dl,2
             jmp  plot_next2

 exit19:     cmp  char,1
             je   exit14
             mov  dh,line_on2
             mov  dl,col_on2
             dec  char
             jmp  plot_next2

 exit14:     cmp  line_on2,4
             je   exit16
             call dly_qrtr
             dec  count
             jne  exit14
             call erase1
             mov  dh,line_on1
             mov  dl,col_on1
             mov  char,2
             mov  count,10
             call dly_qrtr
             jmp  plot_next2
 exit16:     pop  dx
             pop  bx
             pop  ax
             ret
  must_22  endp
 ;-------------------------------------------------
 erase       proc       near
             mov        dh,line_on1
             mov        dl,col_on1
             mov        ah,2
             int        10h
             mov        al,'*'
             mov        bl,03h
             push       cx
             mov        cx,1
             mov        ah,9
             int        10h
             pop        cx
             inc        cool0
             inc        line_on1
             ret
 erase       endp
;-----------------------------------------
 erase1       proc       near
             mov        char,2
             mov        dh,line_on1
             mov        dl,col_on1
 erase_next:
             mov        ah,2
             int        10h
             mov        al,'*'
             mov        bl,03h
             push       cx
             mov        cx,1
             mov        ah,9
             int        10h
             pop        cx
             cmp        char,1
             je         exit20
             cmp        dl,74
             je         left
             jmp        exit21
 exit20:     cmp        dl,75
             je         left
 exit21:     add        dl,2
             jmp        erase_next
 left:       cmp        char,1
             je         exit15
             mov        dh,line_on2
             mov        dl,col_on2
             dec        char
             jmp        erase_next
 exit15:     inc        line_on1
             dec        line_on2
             mov        col_on1,4
             mov        col_on2,3
             ret
 erase1       endp
;-----------------------------------------
;-----------------------------------------
 dly_qrtr    proc       near
             push       cx
             push       dx
             mov        dx,25
 dll:        mov        cx,65530
 dl2:        loop       dl2
             dec        dx
             jnz        dll
             pop        dx
             pop        cx
             ret
 dly_qrtr    endp
 ;---------------------------------------
 code_seg    ends
             end    main
 ;---------------------------------

⌨️ 快捷键说明

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