鱼C论坛

 找回密码
 立即注册
查看: 1753|回复: 0

[技术交流] 字符输入删除和显示。

[复制链接]
发表于 2014-6-10 11:05:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
assume CS:code

code segment
start:
  CALL getstr

  MOV AX,4c00h
  INT 21h
  

charstack: 
  JMP short charstart
table DW charpush,charpop,charshow    ;定义3个方法
top DW 0

charstart:
  PUSH bx
  PUSH DX
  PUSH DI
  PUSH ES

  CMP AH,2                ;如果大于 2 就结束,没有这个功能
  JA sret
  
  MOV BL,AH             ;功能号 加上本身 得到偏移
  MOV BH,0
  ADD bx,bx
  JMP WORD ptr table[bx];调用对应的功能

;入栈
charpush:
  MOV bx,top         ;top代表栈顶
  MOV[SI][bx],AL
  INC top
  JMP sret 

;出栈
charpop:
  CMP top,0
  JE sret
  DEC top
  MOV bx,top
  MOV AL,[SI][bx]
  JMP sret

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

  MOV bx,0

charshows:
  CMP bx,top     ;字符栈是否为空
  JNE noempty
  ;MOV BYTE ptr ES:[DI],' '
  JMP sret

noempty:
  MOV AL,[SI][bx]
  MOV ES:[DI],AL
  MOV BYTE ptr ES:[DI+2],' '
  INC bx 
  ADD DI,2
  JMP charshows

sret:
  POP ES
  POP DI
  POP DX
  POP bx 
  RET 


getstr:
  PUSH AX

getstrs:
  MOV AH,0
  INT 16h
  
  CMP AL,20h    ;小于20的都不是字符
  JB nochar
  
  MOV AH,0      ;字符入栈
  CALL charstack
  
  MOV AH,2      ;显示字符
  CALL charstack
  
  JMP getstrs 

nochar:
  CMP AH,0eh   ;表示按下的是退格键
  JE backspace
  
  CMP AH,1ch
  JE ENTER1 
  JMP getstrs

backspace:     ;删除一个,在显示
  MOV AH,1    
  CALL charstack
  MOV AH,2
  CALL charstack
  JMP getstrs

ENTER1:        ;如果是回车键,al给0 写入到字符栈里面
   MOV AL,0
   MOV AH,0
   CALL charstack
   MOV AH,2
   CALL charstack
   POP AX
   RET   
  
code ends
end 

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 06:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表