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

📄

📁 汇编语言课程设计,文本方式下的字编辑程序
💻
字号:
window macro a1,a2,a3,a4,a5,a6    ;建立窗口
         mov ah,06h
         mov al,a1
         mov bh,a2
         mov ch,a3
         mov cl,a4
         mov dh,a5
         mov dl,a6
         int 10h
endm
curPosition macro op1,op2,op3               ;定义光标位置
         mov ah,2
         mov bh,op1
         mov dh,op2
         mov dl,op3
         int 10h
endm
getPosition  macro                             ;显示光标位置
         mov ah,03h
         mov bh,0
         int 10h
endm
data     segment                           ;定义数据段
         handle   dw ?
         message1 db ' Please input file name:','$'
         message2 db ' Please input save file name:','$'
         message3 db ' Please input open file name:','$'
         path     db 50 dup(0),'$'
         buffer   db 2000 dup(?)
         line     db ?
         row      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
getChar:                             ;读字符
         call get_char
get_char proc near                         ;定义功能鍵
        getPosition
        mov  row,dh
        mov  line,dl
first:
        curPosition 0,row,line
        mov ah,0
        int 16h                        ;从键盘读字符 ah=扫描码 al=字符码
        lea dx,buffer
        mov buffer[bx],al
        inc bx
        cmp  ah,3bh                    ;F1
        jz   new
        cmp  ah,3ch                    ;F2
        jz   open
        cmp  ah,3dh                    ;F3
        jz   quit 
        cmp  ah,48h                    ;上
        jz   up
        cmp  ah,50h                    ;下
        jz   down
        cmp  ah,4bh                    ;左
        jz   left
        cmp  ah,4dh                    ;右
        jz   right
        cmp  ah,1ch                    ;回车
        jz   enter
        call function
        mov ah,2
        mov dl,al
        int 21h
        ret
left:                                   ;光标左移
        getPosition
        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:                                 ;光标右移
        getPosition
        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

up:                                     ;上移光标
        getPosition
        mov row,dh
        mov dl,line
        dec row
        cmp row,0
        je  stop1
        jmp first
stop1:  
        mov row,1
        jmp first
down:                                    ;下移光标
        getPosition
        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:                                   ;回车换行
        getPosition
        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
new:                        ;新建文件
        getPosition
        push dx
        window 0,07h,15,10,17,61
        window 0,24h,14,9,16,60,
        mov dh,15
        mov dl,9
        mov bh,0
        mov ah,2                     ;定义光标位置继而显示message1字符串
        int 10h
        lea dx,message1
        cmp al,0dh
        mov ah,9
        int 21h
        mov bx,0
x1:
        mov ah,1
        int 21h
        cmp al,0dh
        je  x2
        mov path[bx],al
        inc bx
        jmp x1
x2:
        window 0,3fh,15,9,17,61 
        pop dx
        curPosition 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
        window 0,3eh,1,0,23,79
        mov dh,1
        mov dl,0
        mov bh,0
        mov ah,2
        int 10h
        jmp start
open:                            ;打开文件 
        window 0,07h,15,10,17,61    
        window 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
y1: 
        mov ah,1
        int 21h
        cmp al,13
        je  y2
        mov path[bx],al
        inc bx
        jmp y1
y2:
        window 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
        window 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 start


quit:                     ;退出
        window 0,07h,15,10,17,61
        window 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
z1: 
        mov ah,1
        int 21h
        cmp al,0dh
        je  z2
        mov path[bx],al
        inc bx
        jmp z1
z2:
        window 0,07h,15,10,17,61
        window 0,3eh,14,9,16,60
        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 
        window 0,07h,0,0,24,79
        mov ah,4ch
        int 21h
        ret
get_char     endp
main     endp
function proc near                 ;功能键子程序  
next:  
        cmp ah,47h                ;home
        jz  home
        cmp ah,4fh                ;end
        jz  _end
        cmp ah,0eh                ;backspace
        jz  back_space
        cmp ah,53h
        jz  del
        ret

home:                             ;HOME键的功能
        getPosition
        mov row,dh
        mov line,0
       
        jmp first    
_end:                             ;END键的功能
        getPosition
        mov row,dh
        mov line,79
       
        jmp first
back_space:                           ;退格键的功能
        getPosition
        mov row,dh
        mov line,dl
        cmp line,0
        je  stop
        dec line
        jmp ab
stop:	
        mov line,0 
ab:     
        getPosition 0,row,line
        mov ah,2
        mov dl,00
        int 21h
        
        jmp first
del:                                ;DEL删除
        getPosition
        mov row,dh
        mov line,dl
        dec line
        getPosition 0,row,line
        mov ah,2
        mov dl,00
        int 21h
        inc line
        
        jmp first
cm:     
        cmp line,00
        jz  pos_cm
pos_cm:
        curPosition 0,0,0
        jmp first
function endp 
code    ends                           
        end start                          ;结束
      

⌨️ 快捷键说明

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