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

📄 notepad.asm

📁 用汇编语言编写的简短小巧的记事本程序
💻 ASM
字号:
;*******************************************************************************************
data      segment
notice    db  'ZQJ',27h,'s NotePad$'
n1        db  'Welcome to zqj',27h,'s NotePad!$'
n2        db  'It',27h,'s done by Zhu Qijun(class 3 of CS).Thank you for use!$'
n3        db  '1.Press ',27h, 'Esc',27h,' to quit$'
n4        db  '2.Press ',27h,'F1',27h,' to choose color$'
n5        db  'Now,press ',27h,'Enter',27h,' to continue!$'
win_width     equ   80
win_ulc       equ   0
win_ulr       equ   0
win_lrc       equ   79
win_lrr       equ   24
x_coord   db   0
y_coord   db   0
Esc_key       equ  1bh
Enter_key     equ  0dh
F1_key        equ  3bh
Space_key     equ  20h
wcolor    db   0
bcolor    db   1
color     db   012h
count     db   20
sign      db   0
ifquit    db   0
col     equ    320
row     equ    240
r1      equ    50
r2      equ    100
r       dw     50
fcolor  db     1
freq    equ    330
data      ends
;****************************************************************************************
code      segment
main      proc     far
          assume   cs:code,ds:data
start:
          mov    ax,data
          mov    ds,ax
          
          mov    ah,00h
          mov    al,03h
          int    10h
;show notes-----------------------------------------------------------------------------          
          call   near ptr clear
          mov    dl,25
          mov    dh,5
          mov    bh,0
          mov    ah,2
          int    10h
          mov    ah,9
          mov    dx,offset notice
          int    21h
          mov    dl,10
          mov    dh,8
          mov    ah,2
          int    10h
          mov    ah,9
          mov    dx,offset n1
          int    21h
          mov    dl,10
          mov    dh,9
          mov    ah,2
          int    10h
          mov    ah,9
          mov    dx,offset n2
          int    21h
          mov    dl,12
          mov    dh,11
          mov    ah,2
          int    10h
          mov    ah,9
          mov    dx,offset n3
          int    21h
          mov    dl,12
          mov    dh,12
          mov    ah,2
          int    10h
          mov    ah,9
          mov    dx,offset n4
          int    21h
          mov    dl,10
          mov    dh,14
          mov    ah,2
          int    10h
          mov    ah,9
          mov    dx,offset n5
          int    21h
check1:    
          mov    ah,7
          int    21h
          cmp    al,Enter_key
          jnz    check1
;enter the notepad--------------------------------------------------------------------
          call   near ptr clear
          mov  al,win_ulc
          mov  x_coord,al
          mov  al,win_ulr
          mov  y_coord,al
row_rep:
          mov    cx,win_width
col_rep:          
          push   cx
          mov    dl,x_coord
          mov    dh,y_coord
          mov    bh,0
          mov    ah,2
          int    10h
          mov    ah,7
          int    21h
          cmp    al,Esc_key
          jz     exit1
          cmp    al,Enter_key
          jz     next_row
          cmp    al,F1_key
          jnz    next0 
          call   near ptr choose_color
          jmp    row_rep
next0:          
          mov    ah,09h
          mov    bl,color
          mov    cx,01h
          int    10h
          pop    cx
          inc    x_coord
          loop   col_rep
next_row:          
          mov   al,win_ulc
          mov    x_coord,al
          mov    al,win_lrr
          cmp    y_coord,al
          jz     next1
          inc    y_coord
          jmp    next2
next1:            
          mov    ah,6
          mov    al,1
          mov    ch,win_ulr
          mov    cl,win_ulc
          mov    dh,win_lrr
          mov    dl,win_lrc
          mov    bh,7
          int    10h
next2:          
          jmp    row_rep
exit1:          
          call   near ptr clear
          mov    ah,4ch
          int    21h
main      endp
;---------------------------------------------------------------------------------------
clear     proc   near
          push   ax
          push   bx
          push   cx
          push   dx
          mov    ah,6
          mov    al,0
          mov    bh,7
          mov    ch,0
          mov    cl,0
          mov    dh,24
          mov    dl,79
          int    10h
          mov    dx,0
          mov    ah,2
          int    10h
          pop    dx
          pop    cx
          pop    bx
          pop    ax
          ret
clear     endp
;----------------------------------------------------------------------------------------
choose_color     proc   near
          push   ax
          push   bx
          push   cx
          push   dx
          
          mov    ax,data
          mov    ds,ax

          mov    ah,00h
          mov    al,12h
          int    10h

          mov    wcolor,0
          mov    bcolor,1
          mov    al,win_ulc
          mov    x_coord,al
          mov    al,win_ulr
          mov    y_coord,al
          mov    ifquit,0   
          mov    sign,0

next8:        
          mov    al,1ch
          mov    ah,35h
          int    21h
          push   es
          push   bx
          push   ds

          mov    dx,offset change_color
          mov    ax,seg change_color
          mov    ds,ax
          mov    al,1ch
          mov    ah,25h
          int    21h

          pop    ds
          in     al,21h
          and    al,11111110b
          out    21h,al
          sti
          
check2:
          cmp    ifquit,1
          jnz    check2
         
          pop    dx
          pop    ds
          mov    al,1ch
          mov    ah,25h
          int    21h
         
          mov    ax,data
          mov    ds,ax
          
          mov    ah,7
          int    21h
          cmp    al,Enter_key
          jz     next6
          mov    ifquit,0 
          jmp    next8 
next6:
          cmp    sign,0
          jnz    next7
          inc    sign
          mov    ifquit,0
          jmp    next8 
next7:

          mov    al,bcolor
          mov    cl,4
          shl    al,cl
          add    al,wcolor
          mov    color,al
     
          mov    ah,00h
          mov    al,03h
          int    10h
      
          pop    dx
          pop    cx
          pop    bx
          pop    ax
          ret
choose_color     endp 
;-------------------------------------------------------------------------------------
change_color     proc     near
          push   ds
          push   ax
          push   cx
          push   dx

          mov    ax,data
          mov    ds,ax
          sti
           
          dec    count
          jz     change
          call   near ptr check_key
          jmp    exit2            
change:
          mov    count,20
;ring------------------------------------------------------------------------------
          mov    di,freq
          mov    bx,1000
        
          mov    al,0b6h
          out    43h,al
          mov    dx,12h
          mov    ax,348ch
          div    di
          out    42h,al
          mov    al,ah
          out    42h,al
          in     al,61h
          mov    ah,al
          or     al,3
          out    61h,al
wait1:    
          mov    cx,55afh
delay:    
          loop   delay
          dec    bx
          jne    wait1
          mov    al,ah
          out    61h,al

          cmp    sign,0
          jz     next3
          cmp    bcolor,7
          jz     next4
          inc    bcolor
          jmp    draw_circles 
next3:
          cmp    wcolor,15
          jz     next5
          inc    wcolor
          jmp    draw_circles
next4:
          mov    bcolor,0
          jmp    draw_circles    
next5:
          mov    wcolor,0 
;draw twe circles------------------------------------------------------------------------ 
draw_circles:          
          mov    ax,r2
          mov    r,ax
          mov    al,bcolor
          mov    fcolor,al
          call   near ptr draw_circle
          mov    ax,r1
          mov    r,ax
          mov    al,wcolor
          mov    fcolor,al
          call   near ptr draw_circle
          
          call   near ptr check_key                            
exit2:
          cli
          pop    dx
          pop    cx
          pop    ax
          pop    ds
          iret
change_color     endp
;------------------------------------------------------------------------------------
check_key     proc    near
          push   ax
          push   dx

          mov    ah,0bh
          int    21h
          cmp    al,0ffh
          jnz    exit3
          mov    ah,6
          mov    dl,0ffh
          int    21h
          cmp    al,Space_key
          jnz    exit3    
          inc    ifquit
exit3:
          pop    dx
          pop    ax
          ret
check_key        endp
;------------------------------------------------------------------
draw_circle       proc     near
              push   ax
              push   bx
              push   cx
              push   dx

              mov    ax,col
              mov    bx,row
              sub    bx,r   
              call   near ptr draw_points
              mov    ax,0
              mov    bx,r
              mov    dx,1
              sub    dx,r
back2:
              cmp    ax,bx
              jnb    end_draw       
              cmp    dx,0
              js     draw_next
              push   ax
              push   dx
              sub    ax,bx
              mov    cx,2
              mul    cx
              pop    dx
              add    dx,ax
              add    dx,5
              pop    cx
              inc    cx
              push   cx
              mov    ax,col
              add    ax,cx
              dec    bx
              push   bx
              mov    cx,bx
              mov    bx,row
              sub    bx,cx
draw:
              call   near ptr draw_points
              pop    bx
              pop    ax
              jmp    back2
draw_next:
              push   ax
              push   dx
              mov    cx,2
              mul    cx
              pop    dx
              add    dx,ax
              add    dx,3
              pop    cx
              inc    cx
              push   cx
              push   bx
              mov    ax,col
              add    ax,cx
              mov    cx,bx
              mov    bx,row
              sub    bx,cx
              jmp    draw
end_draw:                                              
              pop    dx
              pop    cx
              pop    bx
              pop    ax
              ret
draw_circle   endp
;--------------------------------------------------------------------------------------
draw_points       proc    near
              push   ax
              push   bx
              push   cx
              push   dx
              call   near ptr draw_point
              push   bx
              push   ax
              mov    ax,row
              mov    cx,2
              mul    cx
              sub    ax,bx
              mov    bx,ax
              pop    ax
              call   near ptr draw_point
              mov    cx,col
              add    cx,row
              sub    cx,ax
              mov    bx,cx
              pop    cx
              mov    dx,row
              add    dx,col
              sub    dx,cx
              mov    ax,dx
              call   near ptr draw_point
              push   ax
              mov    ax,row
              mov    cx,2
              mul    cx
              sub    ax,bx
              mov    bx,ax
              pop    ax
              call   near ptr draw_point
              pop    dx
              pop    cx
              pop    bx
              pop    ax
              ret
draw_points    endp
;----------------------------------------------------------------------------------------
draw_point       proc    near
              push   ax
              push   bx
              push   cx
              push   dx

              push   bx
              push   ax
              mov    cx,ax
              mov    dx,bx
              mov    ah,0ch
              mov    al,fcolor
              mov    bh,0
              int    10h

              pop    ax
              mov    cx,ax
              mov    ax,col
              mov    bx,2
              mul    bx
              sub    ax,cx
              mov    cx,ax
              pop    dx

              mov    ah,0ch
              mov    al,fcolor
              mov    bh,0
              int    10h

              pop    dx
              pop    cx
              pop    bx
              pop    ax
              ret
draw_point     endp
;---------------------------------------------------------------------------------------
code      ends
          end    start
;****************************************************************************************

⌨️ 快捷键说明

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