鱼C论坛

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

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

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

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

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

x
  1. assume CS:code

  2. code segment
  3. start:
  4.   CALL getstr

  5.   MOV AX,4c00h
  6.   INT 21h
  7.   

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

  12. charstart:
  13.   PUSH bx
  14.   PUSH DX
  15.   PUSH DI
  16.   PUSH ES

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

  24. ;入栈
  25. charpush:
  26.   MOV bx,top         ;top代表栈顶
  27.   MOV[SI][bx],AL
  28.   INC top
  29.   JMP sret

  30. ;出栈
  31. charpop:
  32.   CMP top,0
  33.   JE sret
  34.   DEC top
  35.   MOV bx,top
  36.   MOV AL,[SI][bx]
  37.   JMP sret

  38. charshow:
  39.   MOV bx,0b800h
  40.   MOV ES,bx

  41.   ;计算行
  42.   MOV AL,160
  43.   MOV AH,0
  44.   MUL DH

  45.   ;计算列
  46.   MOV DI,AX
  47.   ADD DL,DL
  48.   MOV DH,0

  49.   ;行加列
  50.   ADD DI,DX

  51.   MOV bx,0

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

  57. noempty:
  58.   MOV AL,[SI][bx]
  59.   MOV ES:[DI],AL
  60.   MOV BYTE ptr ES:[DI+2],' '
  61.   INC bx
  62.   ADD DI,2
  63.   JMP charshows

  64. sret:
  65.   POP ES
  66.   POP DI
  67.   POP DX
  68.   POP bx
  69.   RET


  70. getstr:
  71.   PUSH AX

  72. getstrs:
  73.   MOV AH,0
  74.   INT 16h
  75.   
  76.   CMP AL,20h    ;小于20的都不是字符
  77.   JB nochar
  78.   
  79.   MOV AH,0      ;字符入栈
  80.   CALL charstack
  81.   
  82.   MOV AH,2      ;显示字符
  83.   CALL charstack
  84.   
  85.   JMP getstrs

  86. nochar:
  87.   CMP AH,0eh   ;表示按下的是退格键
  88.   JE backspace
  89.   
  90.   CMP AH,1ch
  91.   JE ENTER1
  92.   JMP getstrs

  93. backspace:     ;删除一个,在显示
  94.   MOV AH,1   
  95.   CALL charstack
  96.   MOV AH,2
  97.   CALL charstack
  98.   JMP getstrs

  99. ENTER1:        ;如果是回车键,al给0 写入到字符栈里面
  100.    MOV AL,0
  101.    MOV AH,0
  102.    CALL charstack
  103.    MOV AH,2
  104.    CALL charstack
  105.    POP AX
  106.    RET   
  107.   
  108. code ends
  109. end
复制代码


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-25 12:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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