设计内容:
本组负责设计一个文本编辑器(EDITOR),我主要编写光标的移动和清除屏幕模块,
实现光标的移动和屏幕的清空。
算法思想:
A. 光标移动:
(1) 该程序从键盘上操作;
(2) 向上的箭头,表示光标要向上移动;
(3) 向左的箭头表示光标要向左移动;
(4) 向下的箭头表示光标要向下移动;
(5) 向右的箭头表示光标要向右移动;
该模块中,当输入¥时,则退出程序;然后,当以键盘输入箭头时,就进入循环来辨别箭头所实现的光标是向左向右还是向上向下
B. 清除屏幕模块
(1) 键盘输入前要清除屏幕;
(2) 使整个屏幕的底色显示蓝色;
光标移动主要使用循环和子程序调用。子程序中都用到了BIOS 中断和DOS的功能调用。
编辑过程中的:
这次我们编辑的是一个文本编辑器。 在此次的编写过程中,我充分的认识到,实践与理论相结合重要性。以前在学习汇编的过程中,感觉有一些的枯燥,但看这小小的光标在蓝色的屏幕上跳动,不尽的想:原来程序与现实距离是这么近。
1. 不足之处:程序编写的有些复杂。在程序的调试和联接过程中,出现了一些错误,但都及时的解决。
2. 经验:要加强动手能力,多多的编程,多多的上机。
程序过程如下:
lxx segment
a db ?
han1 dw ?
lxx ends
prognam segment
main proc far
assume cs:prognam,ds:lxx
start:
push ds
mov ax,0
push ax
mov ax,lxx
mov ds,ax
call clen
repea:
mov ah,07h
int 21h
mov a,al
cmp a,$
je en
cmp al,48h ;行减一
jne x1
call y1
jmp repea
x1:
cmp a,4bh ;列减一
jne x2
call y2
jmp repea
x2:
cmp a,50h ;行减一
jne x3
call y3
jmp repea
x3:
cmp a,4dh ;列减一
jne repea
call y4
jmp repea
en:
ret
main endp
;-----------------------------------------------
y1 proc near
push ax
push bx
push dx
mov ah,3
int 10h
mov ah,2 ;行减一
dec dh
int 10h
pop dx
pop bx
pop ax
ret
y1 endp
;----------------------------------------
y2 proc near
push ax
push bx
push dx
mov ah,3
int 10h
mov ah,2
sub dl,2 ;列减一
int 10h
pop dx
pop bx
pop ax
ret
y2 endp
;--------------------------------------
y3 proc near
push ax
push bx
push dx
mov ah,3
int 10h
mov ah,2
inc dh ;行加一
int 10h
pop dx
pop bx
pop ax
ret
y3 endp
;----------------------------------------
y4 proc near
mov ah,3
int 10h
mov ah,2
inc dl ;列加一
int 10h
ret
y4 endp
;----------------------------------------------------
clen proc near
mov dh,1
mov han1,25d
cle:
mov ah,2h
mov dl,0
int 10h
mov ah,09h
mov al,
mov bl,90h
mov bh,0h ;yan se
mov cx,80
int 10h
inc dh
dec han1
cmp han1,01h
jne cle
ret
clen endp
;-------------------------------------
prognam ends
end start