zoukankan      html  css  js  c++  java
  • 第十七章 使用BIOS进行键盘的输入和磁盘读写

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

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

     

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

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

    11
    12 assume cs:code
    13
    14 code segment
    15 start:
    16 call getstr
    17
    18 return:
    19 mov ax,4c00h
    20 int 21h
    21
    22 ;完整的接收字符串输入的子程序
    23

    24 getstr:
    25 push ax
    26
    27 getstrs:
    28 mov ah,0
    29 int 16h
    30
    31 cmp al,20h
    32 jb nochar
    33 mov ah,0;
    34 call charstack

    35 mov ah,2
    36 call charstack
    37 jmp getstrs
    38
    39
    40 nochar:
    41 cmp ah,0eh
    42 je backspace
    43 cmp ah,1ch
    44 je enter1
    45 jmp getstrs
    46
    47
    48 backspace:
    49 mov ah,1
    50 call charstack
    51 mov ah,2
    52 call charstack
    53 jmp getstrs
    54
    55 enter1:
    56 mov al,0
    57 mov ah,0
    58 call charstack
    59 mov ah,2
    60 call charstack
    61
    62 pop ax
    63 ret
    64
    65
    66 ;功能实现子程序
    67

    68 charstack:
    69 jmp short charstart
    70
    71 table dw charpush,charpop,charshow
    72 top dw 0
    73
    74 charstart:
    75 push bx
    76 push dx
    77 push di
    78 push es
    79
    80 cmp ah,2
    81 ja sret
    82 mov bl,ah
    83 mov bh,0
    84 add bx,bx
    85 jmp word ptr table[bx]
    86
    87 charpush:
    88 mov bx,top
    89 mov [si][bx],al
    90 inc top
    91 jmp sret
    92
    93 charpop:
    94 cmp top,0
    95 je sret
    96 dec top
    97 mov bx,top
    98 mov al,[si][bx]
    99 jmp sret
    100
    101 charshow:
    102 mov bx,0b800h
    103 mov es,bx
    104 mov al,160
    105 mov ah,0
    106 mul dh
    107 mov di,ax
    108 add dl,dl
    109 mov dh,0
    110 add di,dx
    111
    112 mov bx,0
    113
    114 charshows:
    115 cmp bx,top
    116 jne noempty
    117 mov byte ptr es:[di],' '
    118 jmp sret
    119
    120 noempty:
    121 mov al,[si][bx]
    122 mov es:[di],al
    123 mov byte ptr es:[di+2],' '
    124 inc bx
    125 add di,2
    126 jmp charshows
    127
    128 sret:
    129 pop es
    130 pop di
    131 pop dx
    132 pop bx
    133 ret
    134
    135 code ends
    136 end start

     

  • 相关阅读:
    C# Excel工作表区域Range装入数组
    【Word VBA】批量插入图片到表格
    C# Office Com 开发 创建任务窗格 CustomTaskPane
    C# Office Com 开发 Excel插件与函数dll注册
    视频逐帧转换为图片
    ssh 免密登录
    NPS 内网穿透配置
    php7.3 centos Call to undefined function AdminControllermcrypt_get_block_size()
    Centos 6 安装 php7.3.x
    nginx配置之proxy_pass路径加斜杠/以及包含路径的区别
  • 原文地址:https://www.cnblogs.com/quantumplan/p/2406575.html
Copyright © 2011-2022 走看看