📄 notepad.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 + -