鱼C论坛

 找回密码
 立即注册
查看: 2179|回复: 4

17.3字符串输入的问题

[复制链接]
发表于 2012-8-12 23:10:10 | 显示全部楼层 |阅读模式
1鱼币
完整程序如下,
不明白的地方是:
dl,dh置光标怎么实现?
以及top用于字符进出,top初始值应该是一个偏移地址

  1. assume cs:code,ds:data

  2. data segment
  3.   dw 128 dup (0)
  4. data ends
  5.          
  6. code segment
  7.         start:
  8.                 mov ax,data
  9.         mov ds,ax
  10.         mov si,0
  11.         mov dl,0  ;设置行
  12.         mov dh,0  ;设置列

  13.         call getstr

  14.         mov ax,4c00h
  15.         int 21h

  16.         getstr:
  17.                 push ax

  18.         getstrs:
  19.                 mov ah,0
  20.         int 16h

  21.         cmp al,20h
  22.         jb nochar
  23.                
  24.         mov ah,0
  25.         call charstack

  26.         mov ah,2
  27.         call charstack
  28.         
  29.                 jmp getstrs

  30.     nochar:
  31.                 cmp ah,0eh
  32.         je backspace

  33.         cmp ah,1ch
  34.         je charenter
  35.            
  36.                 jmp getstrs

  37.         backspace:
  38.                 mov ah,1
  39.         call charstack
  40.                
  41.         mov ah,2
  42.         call charstack
  43.                
  44.         jmp getstrs

  45.    charenter:
  46.                 mov al,0
  47.         mov ah,0
  48.         call charstack
  49.         
  50.                 mov ah,2
  51.         call charstack

  52.         pop ax
  53.         ret


  54.         charstack:
  55.                 jmp short charstart
  56.         table dw charpush,charpop,charshow
  57.         top dw 0

  58.         charstart:
  59.                 push bx
  60.         push dx
  61.         push di
  62.         push es

  63.         cmp ah,2
  64.         ja sret

  65.            
  66.                 mov bl,ah
  67.         mov bh,0
  68.         add bx,bx
  69.         jmp word ptr table[bx]

  70.         charpush:
  71.                 mov bx,top ;这句中的top不理解怎么用。
  72.         mov [si][bx],al
  73.         inc top
  74.         jmp sret

  75.         charpop:
  76.                 cmp top,0
  77.         je sret
  78.         dec top
  79.         mov bx,top
  80.         mov al,[si][bx]
  81.         jmp sret

  82.         charshow:
  83.                 mov bx,0b800h
  84.         mov es,bx
  85.                
  86.         mov al,160;感觉从这4句没有什么用吧?似乎可以注释掉啊
  87.         mov ah,0
  88.         mul dh
  89.         mov di,ax

  90.         add dl,dl
  91.         mov dh,0
  92.         add di,dx

  93.         mov bx,0
  94.         charshows:
  95.                 cmp bx,top
  96.         jne noempty
  97.         mov byte ptr es:[di],' '
  98.         jmp sret

  99.         noempty:
  100.                 mov al,[si][bx]
  101.         mov es:[di],al
  102.         mov byte ptr es:[di+2],' '
  103.         inc bx
  104.         add di,2
  105.         jmp charshows

  106.         sret:
  107.                 pop es
  108.         pop di
  109.         pop dx
  110.         pop bx
  111.         ret
  112. code ends
  113. end start
复制代码

最佳答案

查看完整内容

dh中存放行号,dl中存放列号,用dh*160+dl*2来定位显示位置,top中存放的是字符栈中字符的个数。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-8-12 23:10:11 | 显示全部楼层
dh中存放行号,dl中存放列号,用dh*160+dl*2来定位显示位置,top中存放的是字符栈中字符的个数。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2012-8-20 17:38:43 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-8-20 18:35:53 | 显示全部楼层
用10h中断3号功能可以得到当前光标位置:dl为列,dh为行,bh为页号
10h中断2号功能可以设置光标(寄存器功能同上)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2012-8-21 11:30:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 18:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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