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

📄 textedit11.asm

📁 武汉理工大学计算机学院 汇编语言课程设计之乐曲程序源代码
💻 ASM
字号:
readchar macro	;读取字符宏定义
    mov ah,0
    int 16h
endm

string macro p1	;输入字符光标
	mov ah,9
	lea dx,p1
	int 21h
endm

win macro opr1,opr2,opr3,opr4,opr5,opr6	;建立窗口
	mov ah,06h
	mov al,opr1
	mov bh,opr2
	mov ch,opr3
	mov cl,opr4
	mov dh,opr5
	mov dl,opr6
	int 10h
endm

setcurse macro op1,op2,op3	;定义光标位置
	mov ah,2
	mov bh,op1
	mov dh,op2
	mov dl,op3
	int 10h
endm

getcurse macro	;显示光标位置
	mov ah,03h
	mov bh,0
	int 10h
endm

data segment	;定义数据段
	menu1 db ' F1:New','$'
	menu2 db ' F2:Open','$'
	menu3 db ' F3:Save','$'
	handle dw ?
	message1 db ' Please input file name:','$'
	message2 db ' Please input save file name:','$'
	message3 db ' Please input open file name:','$'
	message4 db ' The file is not save! Save it now? (Y/N): ','$'
	path db 50 dup(0),'$'
	buffer db 2000 dup(?)
	bak db 3850 dup(0)
	line db ?
	row db ?
	char db ?
data ends

code segment
	main proc far	;主程序
			assume cs:code,ds:data
		start:
			push ds
			sub  ax,ax
			push ax
			mov  ax,data
			mov  ds,ax
			call wind
			call edit                                
			ret
	main endp
	
	wind proc near	;创建窗口子程序
			win 1,4eh,0,0,0,79	;菜单栏
			win 0,1fh,1,0,24,79	;主窗体
		show:	;显示菜单
			setcurse 0,0,1			 
			mov ah,9
			lea dx,menu1
			int 21h
			setcurse 1,0,1
			mov ah,9
			lea dx,menu2
			int 21h
			setcurse 2,0,1
			mov ah,9
			lea dx,menu3
			int 21h
	wind endp
	
	edit proc near
		char_get:	;读字符
			call com
			
			com proc near                         ;定义功能鍵
			        getcurse
			        mov  row,dh
			        mov  line,dl
				first:
			        setcurse 0,row,line
				j00:
					mov ah,0
			        int 16h	;从键盘读字符 ah=扫描码 al=字符码
			        push ax
			        lea dx,buffer
			        mov buffer[bx],al
			        inc bx
			        cmp ah,48h	;上
			        jz up_1
			        cmp ah,50h	;下
			        jz down_1
			        cmp ah,4bh	;左
			        jz left
			        cmp ah,4dh	;右
			        jz right
			        cmp ah,1ch	;回车
			        jz enter_1
			        call fuc_key
			        mov ah,2
			        mov dl,al
			        int 21h
			        pop ax
			        call menu_show
			        jmp j6
				down_1:
			        jmp down
				enter_1:
			        jmp enter_2
				up_1:
					jmp up
				left:	;光标左移
			        getcurse
			        mov row,dh
			        mov dl,line
			        cmp line,0
			        jnz direct
			        mov line,79
			        dec row
			        cmp row,0
			        je stop2                                            
			        jmp first
				stop2:
			        mov row,1
			        jmp first
				direct:
			        dec line
			        jmp first
				right:	;光标右移
			        getcurse
			        mov row,dh
			        mov dl,line
			        cmp line,79
			        jnz direct2
			        mov line,0
			        inc row
			        cmp row,24
			        je  returns1
			        jmp first
				direct2:
			        inc  line
			        jmp first
				enter_2:
			        jmp enter
				up:	;上移光标
			        getcurse
			        mov row,dh
			        mov dl,line
			        dec row
			        cmp row,0
			        je  stop1
			        jmp first
				stop1:  
			        mov row,1
			        jmp first
				down:	;下移光标
			        getcurse
			        mov row,dh
			        mov dl,line   
			        inc row
			        cmp row,24
			        je  stop3
			        jmp first
				stop3:  
			        mov row,23
			        jmp first
				returns1:
			        jmp returns
				enter:	;回车换行
			        getcurse
			        mov row,dh
			        mov line,dl
			        inc row
			        cmp row,24
			        je  returns
			        mov line,0
			        jmp first
				returns:
			        mov row,24
				 	mov line,0
					jmp first
				j6: ret
			com endp
		
			fuc_key proc near;功能键子程序  
			 	next: 
			 	    cmp ah,3bh  ;F1键
			 	    jz new_n
			 	    cmp ah,3ch   ;F2
			 	    jz open_o
			 	    cmp ah,3dh   ;F3
			 	    jz save_s 			
			        cmp ah,0eh	;退格键
			        jz bak_sp
			        cmp ah,53h
			        jz del
			        ret
			    new_n:
			        call new
			    open_o:
			        call open
			    save_s:
			        call save
				bak_sp:	;退格键的功能
			        getcurse
			        mov row,dh
			        mov line,dl
			        cmp line,0
			        je stop
			        dec line
			        jmp ab
				stop:
			        mov line,0 
				ab:
			        getcurse 0,row,line
			        mov ah,2
			        mov dl,00
			        int 21h
			        jmp first
				del:	;DEL删除
			        getcurse
			        mov row,dh
			        mov line,dl
			        dec line
			        getcurse 0,row,line
			        mov ah,2
			        mov dl,00
			        int 21h
			        inc line
			        jmp first
				cm:     
			        cmp line,00
			        jz pos_cm
				pos_cm:
			        setcurse 0,0,0
			        jmp first
			fuc_key endp
			
			menu_show proc near  ;定义菜单的背景字体颜色
			        getcurse
			        push dx
			        win 0,06h,2,1,7,11
			        win 0,65h,1,0,6,10
			        setcurse 0,1,0
			        string menu1
			        string menu2
			        string menu3
			        pop dx
			        dec dl
			        setcurse 0,dh,dl
			menu_show endp
		
		new proc near	;新建文件
			        getcurse
			        push dx
			        call backdisplay
			        win 0,07h,15,10,17,61
			        win 0,24h,14,9,16,60,
			        mov dh,15
			        mov dl,9
			        mov bh,0
			        mov ah,2
			        int 10h
			        lea dx,message1
			        cmp al,0dh
			        mov ah,9
			        int 21h
			        mov bx,0
				all:
			        mov ah,1
			        int 21h
			        cmp al,0dh
			        je  alll
			        mov path[bx],al
			        inc bx
			        jmp all
				alll:
			        win 0,3eh,15,9,17,61 
			        pop dx
			        setcurse 0,dh,dl
			        lea dx,path
			        mov ah,3ch
			        mov cx,00
			        int 21h
			        mov handle,ax
			        mov bx,ax
			        mov ah,3eh
			        int 21h
			        win 0,3eh,1,0,23,79
			        mov dh,1
			        mov dl,0
			        mov bh,0
			        mov ah,2
			        int 10h
			        jmp char_get
			new endp
		
			open_2:
				jmp open

			open proc near	;打开文件
			        call backdisplay 
			        win 0,07h,15,10,17,61    
			        win 0,24h,14,9,16,60
			        mov dh,15
			        mov dl,9
			        mov bh,0
			        mov ah,2
			        int 10h
			        lea  dx,message3
			        mov ah,9
			        int 21h
			        mov bx,0
				cll: 
			        mov ah,1
			        int 21h
			        cmp al,13
			        je  clll
			        mov path[bx],al
			        inc bx
			        jmp cll
				clll:
			        win 0,3eh,1,0,23,79
			        lea dx,path
			        mov ah,3dh
			        mov al,0
			        int 21h
			        mov handle,ax
			        lea dx,buffer
			        mov bx,handle
			        mov cx,2000
			        mov ah,3fh
			        int 21h
			        win 0,3eh,1,23,1,79
			        mov dh,1
			        mov dl,0
			        mov bh,0
			        mov ah,2
			        int 10h
			        mov cx,1000
			        sub bx,bx
				replay:
			        mov dl,buffer[bx]
			        inc bx
			        mov ah,2
			        int 21h
			        loop replay
			        mov bx,handle
			        mov ah,3eh
			        int 21h
			        mov dh,1
			        mov dl,0
			        mov bh,0
			        mov ah,2
			        int 10h
			        mov cx,10
			        mov bx,0
				cleapath_3:
			        mov bl,0
			        mov path[bx],bl
			        loop cleapath_3
			        jmp char_get
			open endp
			
			save proc near	;保存文件
			        getcurse
			        push dx
			        win 0,3eh,1,0,6,10
			        call backdisplay
			        mov ah,path
			        cmp ah,21h
			        jl j_3
			        jmp j_4
				j_3: 
			        win 0,07h,15,10,17,61
			        win 0,24h,14,9,16,60,
			        mov dh,15
			        mov dl,9
			        mov bh,0
			        mov ah,2
			        int 10h
			        lea dx,message2
			        mov ah,9
			        int 21h
			        mov bx,0
				dll: 
			        mov ah,1
			        int 21h
			        cmp al,0dh
			        je dlll
			        mov path[bx],al
			        inc bx
			        jmp dll
				dlll:
			        win 0,3eh,1,0,23,79
			        pop dx
			        setcurse 0,dh,dl 
				j_4:
					lea dx,path
			        mov ah,3ch
			        mov cx,00
			        int 21h
			        mov handle,ax
			        lea dx,buffer
			        mov bx,handle
			        mov cx,2000
			        mov ah,40h
			        int 21h
			        mov bx,handle
			        mov ah,3eh
			        int 21h
			        call backdisplay
			        jmp char_get
			save endp
		backdisplay proc near
			        push ax
			        push bx
			        push cx
			        push dx
			        push ds
			        mov bx,0d
			        mov cx,3840d
				loop11:
			        mov ax,data
			        mov ds,ax
			        mov dl,bak[bx]
			        mov ax,0b800h
			        mov ds,ax
			        mov ds:[bx],dl
			        inc bx
			        loop loop11
			        pop ds
			        pop dx
			        pop cx
			        pop bx
			        pop ax
			        ret
			backdisplay endp
	edit endp 
code ends
	end start

⌨️ 快捷键说明

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