汇编 实时写入文字 实现 换行 删除 操作
assume cs:codestack segment
db 128 dup(0)
stack ends
;backspace 0EhEnter 1c
code segment
start:
mov ax,stack
mov ss,ax
mov sp,128
mov ax,0b800h
mov es,ax
s:
mov ah,0
int 16H
cmp al,'0'; 0退出
je s_end
cmp ah,0eh ;删除键
je backspace
cmp ah,1ch
je _Enter ; 回车键
mov ah,0
push ax
call rash ;call 会将地址压入栈中
jmp s
s_end:
mov ax,4c00h
int 21h
;删除键
backspace:; 这里的删除 最后卡了我一下 随然pop了sp移了 但注意显存里的数据还在
pop bp
mov bp,' ';所以要把空格放进去刷新显存
push bp
call rash
pop bp; 再在栈中删除这个位置
jmp s
;回车键
_Enter:
mov ax,1ch
push ax
jmp s
;刷新显存
rash:
mov cx,sp
mov di,126
mov bh,14 ;行数
mov bl,20;起始位置
mov al,160
mul bh
add al,bl
mov si,ax;显存偏移地址
s0:
cmp di,cx
jna send
mov ax,ss:
cmp al,1ch
jne s1;换行
inc bh;行数+1
push ax;保存ax
mov al,160
mul bh ;行数*160
add al,bl; 加起始位置
mov si,ax;放入显存偏移
pop ax;放回ax
sub di,2 ; 这里要注意 di是要+2的要过1ch这个回车
jmp s0
s1:
mov byte ptr es:,al
mov byte ptr es:,2
sub di,2
add si,2
jmp s0
jne s0
send:
ret
code ends
end start
自己独立完成 开心开心{:10_254:}
可能可读性有点不足 个人觉得还算清晰明了
页:
[1]