您的位置:首页 > 移动开发 > IOS开发

第十七章 使用BIOS进行键盘的输入和磁盘读写

2012-03-19 20:20 726 查看
1、int 9中断例程对键盘输入的处理:键盘缓冲区中有16个字单元,可以存储15个按键的扫描码和对应的ASCII码。int 16中断例程读取键盘缓冲区:读取键盘输入的功能编号为0。他们相互配合,实现对键盘的输入和读取。

2、字符串的输入:字符的输入和输出是按照栈的访问规则进行的,即后进先出。这样我们就可以用栈的方式来管理字符串的存储空间,也就是说,字符串的存储空间实际上是一个字符栈,字符栈中的所有字符,从栈底到栈顶,组成一个字符串。

View Code

;最基本的字符串输入程序,需要具备下面的功能:
;(1) 在输入的同时需要显示这个字符串;
;(2)一般在输入回车符后,字符串输入结束;
;(3)能够删除已经输入的字符。

;编写一个接收字符串的输入子程序,实现上面三个基本功能。
;因为在输入的过程中需要显示,子程序的参数如下:
;    (dh)、(dl)=字符串在屏幕上显示的行、列位置;
;    ds:si 指向字符串的存储空间,字符串以O 为结尾符。

11
assume cs:code
13
code segment
start:
call getstr
17
return:
mov ax,4c00h
int 21h
21
;完整的接收字符串输入的子程序

getstr:
push ax
26
getstrs:
mov ah,0
int 16h
30
cmp al,20h
jb nochar
mov ah,0;
call charstack
mov ah,2
call charstack
jmp getstrs
38
39
nochar:
cmp ah,0eh
je backspace
cmp ah,1ch
je enter1
jmp getstrs
46
47
backspace:
mov ah,1
call charstack
mov ah,2
call charstack
jmp getstrs
54
enter1:
mov al,0
mov ah,0
call charstack
mov ah,2
call charstack
61
pop ax
ret
64
65
;功能实现子程序

charstack:
jmp short charstart
70
table dw charpush,charpop,charshow
top dw 0
73
charstart:
push bx
push dx
push di
push es
79
cmp ah,2
ja sret
mov bl,ah
mov bh,0
add bx,bx
jmp word ptr table[bx]
86
charpush:
mov bx,top
mov [si][bx],al
inc top
jmp sret
92
charpop:
cmp top,0
je sret
dec top
mov bx,top
mov al,[si][bx]
jmp sret
100
charshow:
mov bx,0b800h
mov es,bx
mov al,160
mov ah,0
mul dh
mov di,ax
add dl,dl
mov dh,0
add di,dx
111
mov bx,0
113
charshows:
cmp bx,top
jne noempty
mov byte ptr es:[di],' '
jmp sret
119
noempty:
mov al,[si][bx]
mov es:[di],al
mov byte ptr es:[di+2],' '
inc bx
add di,2
jmp charshows
127
sret:
pop es
pop di
pop dx
pop bx
ret
134
code ends
end start
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: