三田学校 发表于 2012-8-12 23:10:10

17.3字符串输入的问题

完整程序如下,
不明白的地方是:
dl,dh置光标怎么实现?
以及top用于字符进出,top初始值应该是一个偏移地址

assume cs:code,ds:data

data segment
dw 128 dup (0)
data ends
         
code segment
      start:
                mov ax,data
      mov ds,ax
      mov si,0
      mov dl,0;设置行
      mov dh,0;设置列

      call getstr

      mov ax,4c00h
      int 21h

      getstr:
                push ax

      getstrs:
                mov ah,0
      int 16h

      cmp al,20h
      jb nochar
               
      mov ah,0
      call charstack

      mov ah,2
      call charstack
      
                jmp getstrs

    nochar:
                cmp ah,0eh
      je backspace

      cmp ah,1ch
      je charenter
         
                jmp getstrs

      backspace:
                mov ah,1
      call charstack
               
      mov ah,2
      call charstack
               
      jmp getstrs

   charenter:
                mov al,0
      mov ah,0
      call charstack
      
                mov ah,2
      call charstack

      pop ax
      ret


      charstack:
                jmp short charstart
      table dw charpush,charpop,charshow
      top dw 0

      charstart:
                push bx
      push dx
      push di
      push es

      cmp ah,2
      ja sret

         
                mov bl,ah
      mov bh,0
      add bx,bx
      jmp word ptr table

      charpush:
                mov bx,top ;这句中的top不理解怎么用。
      mov ,al
      inc top
      jmp sret

      charpop:
                cmp top,0
      je sret
      dec top
      mov bx,top
      mov al,
      jmp sret

      charshow:
                mov bx,0b800h
      mov es,bx
               
      mov al,160;感觉从这4句没有什么用吧?似乎可以注释掉啊
      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:,' '
      jmp sret

      noempty:
                mov al,
      mov es:,al
      mov byte ptr es:,' '
      inc bx
      add di,2
      jmp charshows

      sret:
                pop es
      pop di
      pop dx
      pop bx
      ret
code ends
end start

gmy205 发表于 2012-8-12 23:10:11

dh中存放行号,dl中存放列号,用dh*160+dl*2来定位显示位置,top中存放的是字符栈中字符的个数。

(^o^)/ 发表于 2012-8-20 17:38:43

augustus 发表于 2012-8-20 18:35:53

用10h中断3号功能可以得到当前光标位置:dl为列,dh为行,bh为页号
10h中断2号功能可以设置光标(寄存器功能同上)

(^o^)/ 发表于 2012-8-21 11:30:12

页: [1]
查看完整版本: 17.3字符串输入的问题