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

📄 text.asm

📁 1) 清晰且易于操作的用户界面;动态显示光标的当前位置; 2) 在文本编辑区内接受并保存输入信息; 3) 在文本编辑区内允许光标上移
💻 ASM
字号:
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 + -