?? 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 ;保存菜單中第一個(gè)待輸入實(shí)際字符的位置
mov bx,0
dll:
mov ah,0 ;輸入一個(gè)字符
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 ;判斷字符輸入是否已達(dá)最大值
je tempD1
mov path[bx],al
inc bx
jmp dll
backD:
pos_get
cmp dl,59 ;判斷光標(biāo)不否到窗口末端
je tempD3
cmp dl,tempLine ;判斷光標(biāo)是否到達(dá)輸入窗口的前端
jbe tempD2
dec dl
jmp tempD2
tempD3: ;光標(biāo)在窗口末端時(shí),刪除光標(biāo)當(dāng)前的字符
mov ah,2
mov dl,00
int 21h
pos_get
dec dl
dec dl
tempD2: ;刪除光標(biāo)前一個(gè)字符
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: ;光標(biāo)向前移一位
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
;-------------------------被動(dòng)保存文件------------------------------
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 ;獲得光標(biāo)位置
mov cur,dx
mov row,dh
mov line,dl
cmp al,0dh ;是否為回車
jz enter1
mov al,line ;列號給al
cbw ;al擴(kuò)展為ax
mov cx,ax ;列號保存到cx中
mov bl,80 ;每行80個(gè)
mov al,row ;;獲得行號
dec al
mul bl ;行號*80
add ax,cx
mov addr,ax ;ax為輸入位子在緩沖區(qū)中的下標(biāo)
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 ;后移的個(gè)數(shù)
mov cx,bx ;cx存放后移的個(gè)數(shù)
std ;反向移動(dòng)
rep movsb
lea bx,buffer
;mov addr,ax ;addr為輸入位子在緩沖區(qū)中的下標(biāo)
pop ax ;ax中存放為掃描碼,和字符碼
mov byte ptr addr[bx],al ;插入
jmp disp
enter1:
mov al,dl ;dl是列值
cbw
mov cx,80 ;每行80個(gè)
sub cx,ax
push cx ;補(bǔ)cx個(gè)零
push ax ;列值入棧
mov bl,80 ;填入空格的個(gè)數(shù)
mov al,dh ;行數(shù)
dec al
mul bl ;行數(shù)*80
mov cx,ax ;ax值為行數(shù)*80
pop ax ;ax出棧,列值
add cx,ax ;cx為輸入位子在緩沖區(qū)中的下標(biāo)
mov addr,cx ;addr為輸入位子在緩沖區(qū)中的下標(biāo)
pop cx ;補(bǔ)零數(shù)出棧
push cx ;補(bǔ)零數(shù)入棧
lea di,buffer
add di,1839 ;目的串末地址
mov si,di ;源串末地址
sub si,cx
inc si ;si=di-cx+1
std
rep movsb
pop cx ;補(bǔ)零數(shù)出棧
lea bx,buffer
next1: mov addr[bx],20h ;補(bǔ)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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -