|
主题 : : 自己写的 17.3 所有功能完美实现 [待解决] |
回复[ 1次 ]
点击[ 527次 ] | |
荣誉值:30
信誉值:0
注册日期:2009-04-09 10:05 |
;自己独立设计的17.3完整程序,输入显示字符窜允许删除,enter键表示输入结束,报错非ASCII显示
assume cs:code,ss:charstack
charstack segment
db 1024 dup(0)
table dw a,b
a db 'please input some string :',0
b db 'Warning:can not show it',0
charstack ends
code segment
start: mov ax,charstack
mov ss,ax
mov sp,128
mov di,16*160
mov si,ss:table[0]
mov bx,2 ;前后景
call showstr
;显示请求输入字符窜,输入字符窜在请求信息后
mov bx,7 ;默认前后景
mov si,0
input:mov ah,0
int 16h
cmp al,20h
jb nochar
mov ss:[si],al
call showstr
jmp input
;显示输入的字符窜,对于非ASCII码字符转入nochar
nochar: cmp ah,1ch
je enter
cmp ah,0eH
je backspace
push si
mov si,ss:table[2]
push di
mov di,23*160
push bx
mov bl,4
call showstr
pop bx
pop di
pop si
jmp input
;nochar作用,报错无ASCII码字符并返回等待重新输入,处理backspace键和enter键
backspace:cmp si,0
je input
push bx
mov bh,1
call showstr
pop bx
mov byte ptr ss:[si],0
dec si
jmp input
enter: mov ax,4c00h
int 21h
showstr:push ds
push es
push si
mov si,ss
mov ds,si
mov si,0b800h
mov es,si
pop si
cmp bh,1
je subshowstr
cld
ls:cmp byte ptr ds:[si],0
je over
movsb
mov byte ptr es:[di],bl
inc di
jmp ls
subshowstr:dec di
dec di
mov word ptr es:[di],' '
over: pop es
pop ds
ret
;showstr作用:显示字符,必要参数si=源地址址,di=目标地址
; 默认参数 ds=ss,es=0b800h
; 可选参数 bx, bl=颜色,bh=1为启动subshowstr
code ends
end start
;老规矩所有代码直接copy到.txt 然后做成exe文件用debug载入即可 非ASCII字符红字提示 enter结束 backspace删除字符 搞了5小时全是自己独立完成的 | | |