📄 wordedit.asm
字号:
call backdisplay
mov ah,path
cmp ah,21h
jl j_3
jmp j_4
j_3:
win 0,06h,15,10,17,61
win 0,70h,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
pos_get
mov tempLine,dl ;保存菜单中第一个待输入实际字符的位置
mov bx,0
dll:
mov ah,0 ;输入一个字符
int 16h
cmp ah,1ch ;回车
je dlll
cmp ah,0eh ;退格
je backD
mov ah,2
mov dl,al
int 21h
pos_get
cmp dl,60 ;判断字符输入是否已达最大值
je tempD1
mov path[bx],al
inc bx
jmp dll
backD:
pos_get
cmp dl,59 ;判断光标不否到窗口末端
je tempD3
cmp dl,tempLine ;判断光标是否到达输入窗口的前端
jbe tempD2
dec dl
jmp tempD2
tempD3: ;光标在窗口末端时,删除光标当前的字符
mov ah,2
mov dl,00
int 21h
pos_get
dec dl
dec dl
tempD2: ;删除光标前一个字符
pos_curse 0,dh,dl
mov ah,2
mov dl,00
int 21h
pos_get
dec dl
pos_curse 0,dh,dl
jmp dll
tempD1: ;光标向前移一位
pos_get
dec dl
pos_curse 0,dh,dl
jmp dll
dlll:
win 0,1fh,1,0,23,79
pop dx
pos_curse 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
pop dx
pop cx
pop bx
pop ax
jmp char_get
save endp
;-------------------------被动保存文件------------------------------
save_p proc near
push ax
push bx
push cx
push dx
pos_get
push dx
win 0,3eh,1,0,6,10
call backdisplay
mov ah,path
cmp ah,21h
jl k_3
jmp k_4
k_3:
win 0,06h,15,10,17,61
win 0,70h,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
ell:
mov ah,1
int 21h
cmp al,0dh
je elll
mov path[bx],al
inc bx
jmp ell
elll:
win 0,1fh,1,0,23,79
pop dx
pos_curse 0,dh,dl
k_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
pop dx
pop cx
pop bx
pop ax
save_p endp
savedisplay proc near
push ax
push bx
push cx
push dx
push ds
mov ax,0002h
int 33h
mov bx,0d
mov cx,3840d
loop1:
mov ax,0b800h
mov ds,ax
mov dl,ds:[bx]
mov ax,data
mov ds,ax
mov bak[bx],dl
inc bx
loop loop1
mov ax,0001h
int 33h
pop ds
pop dx
pop cx
pop bx
pop ax
ret
savedisplay 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
quitt proc near ;退出
call backdisplay
push ax
push bx
push cx
push dx
win 0,07h,15,10,17,61
win 0,70h,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
qll:
mov ah,1
int 21h
cmp al,0dh
je qlll
mov path[bx],al
inc bx
jmp qll
qlll:
win 0,07h,15,10,17,61
win 0,3eh,14,9,16,60
call backdisplay
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
win 0,07h,0,0,24,79
mov ah,4ch
int 21h
pop dx
pop cx
pop bx
pop ax
ret
quitt endp
edit endp
;----------------------显示日期-------------------------------
win3 proc near
push ax
push bx
mov ah,2ah
int 21h
mov bl,10d
mov ax,0
mov al,dh
div bl
add ax,3030h
mov [date+6],al
mov [date+7],ah
mov ax,0
mov al,dl
div bl
add ax,3030h
mov [date+9],al
mov [date+10],ah
win 0,74h,0,60,0,79 ;灰底红字
pos_curse 0,0,67
mov dx,offset date
mov ah,09h
int 21h
pop bx
pop ax
ret
win3 endp
;--------------------------显示行//列----------------------------
win4 proc near
push ax
push bx
mov ah,2
mov bh,0
int 10H
mov ah,03h
mov bh,0
int 10h
mov bl,100d
mov bh,10d
mov ax,0
mov al,dh
div bl
add al,30h
mov [hanglie+0],al
mov al,ah
mov ah,0
div bh
add ax,3030h
mov [hanglie+1],al
mov [hanglie+2],ah
mov ax,0
mov al,dl
div bl
add al,30h
mov [hanglie+5],al
mov al,ah
mov ah,0
div bh
add ax,3030h
mov [hanglie+6],al
mov [hanglie+7],ah
win 0,74h,24,60,24,70 ;灰底红字
pos_curse 0,24,61
mov dx,offset hanglie
mov ah,09h
int 21h
pop bx
pop cx
ret
win4 endp
;----------------------------插入编辑-------------------------------
insert proc near
push ax
push bx
push cx
push dx
push ax ;ax里面存放的扫描码,和字符码
pos_get ;获得光标位置
mov cur,dx
mov row,dh
mov line,dl
cmp al,0dh ;是否为回车
jz enter1
mov al,line ;列号给al
cbw ;al扩展为ax
mov cx,ax ;列号保存到cx中
mov bl,80 ;每行80个
mov al,row ;;获得行号
dec al
mul bl ;行号*80
add ax,cx
mov addr,ax ;ax为输入位子在缓冲区中的下标
lea si,buffer
add si,80
add si,1838
;mov addr,1838 ;源串的末地址
;mov si,addr
mov di,si
inc di ;目的串末地址
mov bx,1839
sub bx,ax ;后移的个数
mov cx,bx ;cx存放后移的个数
std ;反向移动
rep movsb
lea bx,buffer
;mov addr,ax ;addr为输入位子在缓冲区中的下标
pop ax ;ax中存放为扫描码,和字符码
mov byte ptr addr[bx],al ;插入
jmp disp
enter1:
mov al,dl ;dl是列值
cbw
mov cx,80 ;每行80个
sub cx,ax
push cx ;补cx个零
push ax ;列值入栈
mov bl,80 ;填入空格的个数
mov al,dh ;行数
dec al
mul bl ;行数*80
mov cx,ax ;ax值为行数*80
pop ax ;ax出栈,列值
add cx,ax ;cx为输入位子在缓冲区中的下标
mov addr,cx ;addr为输入位子在缓冲区中的下标
pop cx ;补零数出栈
push cx ;补零数入栈
lea di,buffer
add di,1839 ;目的串末地址
mov si,di ;源串末地址
sub si,cx
inc si ;si=di-cx+1
std
rep movsb
pop cx ;补零数出栈
lea bx,buffer
next1: mov addr[bx],20h ;补0
add addr,1
loop next1
disp: pos_curse 0,1,0
mov cx,1840
mov si,0
next2: mov al,buffer[si]
;mov al,31h
mov bx,0700
mov ah,0eh
int 10h
;mov dl,al
;mov ah,02h
;int 21h
inc si
loop next2
mov dx,cur
mov row,dh
mov line,dl
add line,1
pos_curse 0,row,line
pop dx
pop cx
pop bx
pop ax
ret
insert endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -