INT21H的0Ah号功能实现原理

相关链接:INT21H的0Ah号功能实现原理

http://topic.csdn.net/u/20100711/11/9326a3e5-000e-4db8-a05b-8c71e46c0d6a.html

 

 ;int21h的0ah号功能实现原理
 assume cs:code,ds:data
 
 data segment 
 string db 0dh,0ah,'Press any kry to exit...$'
 buffer db 5,0,5 dup (0) 
 data ends 

  code segment 
   start: mov ax,data
     mov ds,ax
     mov dx,offset buffer
     mov ah,0ah
;以下部分实现int21h的0ah号功能
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
     push si
     push bx
     push ax

     mov si,dx
     mov bx,[si] ;0,0ffh
     dec bx
     add si,2
  getkey:
     mov ah,0
     int 16h ;读键盘
     cmp al,08 ;Backspace //行内编辑功能功能1

     jz @del
     cmp al,0 ;!!!!!!!! //过滤部分输入
     jnz cheshi
     cmp ah,4bh ;方向键"<-" //行内编辑功能功能2

     jnz  skip
@del: or bh,bh ;cmp bh,0
     jz skip
     mov ax,0e08h
     int 10h
     mov al,20h
     int 10h
     mov al,08h
     int 10h
     dec si
     dec bh
skip:jmp getkey
cheshi:
     cmp bh,bl
     jb yes
     cmp al,0dh
     jz yes
     mov ax,0e07h ;超出缓冲区警告
     int 10h
     jmp  getkey
 yes: mov [si],al ;存入缓冲区
     inc si
     cmp al,0dh ;回车结束输入
     jz quit
     mov ah,0eh
     int 10h ;在当前光标处显示
     inc bh ;Byte计数,最多为255个
     jmp getkey
 quit: mov si,dx
     mov [si+1],bh

     pop ax
     pop bx
     pop si
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
     mov dx,offset string
     mov ah,9
     int 21h
     mov ah,0
     int 16h
     mov ax,4c00h
     int 21h 

   code ends
   end start

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值