注册 登录
编程论坛 汇编论坛

求高手找错。

发布于 2010-06-23 01:28, 605 次点击
简单的字符串输入输出:输入一个单词后,总是输出不出来,有的字符串还缺了字母。
还有就是字符串最后的终止符,如何来赋值。
data segment
    string db 'Please input one word:$'
    str db 10,10 dup(0)
    sentence db 'Press enter to quit$'
data ends
code segment
    assume cs:code,ds:data
    start:    mov ax,data
        mov ds,ax
        mov dx,offset string
        mov ah,09h
        int 21h
        
        lea dx,str
        mov ah,0ah
        int 21h
        
        mov bx,dx
        add bx,0ah
        mov word ptr [bx],'$'
        mov ah,09h
        int 21h
        

        lea dx,sentence
        mov ah,09h
        int 21h

        mov ah,01h
        int 21h

        mov ah,4ch
        int 21h
code ends
    end start
1 回复
#2
东海一鱼2010-06-24 16:11
楼上的兄弟主要是没有搞清楚int 21h 0ah号功能调用的详细使用方法,所以才会困惑。

调用前,输入缓冲区的第一字节必须标示输入缓冲区的长度(<81),调用后第二字节的内容为用户真实的输入字串长度。第三字节开始是真实输入缓冲区内容。

所以程序得这样写:
data segment
    string db 'Please input one word:$'
    str db 10,10 dup(0)
    sentence db 'Press enter to quit$'
data ends
code segment
    assume cs:code,ds:data
    start:    mov ax,data
        mov ds,ax
        mov dx,offset string
        mov ah,09h
        int 21h
        
        lea dx,str
        mov ah,0ah
        int 21h
        
        lea si,str                          //缓冲区寻址
        mov dx,si                           //为了显示调用

        mov al,byte ptr[si+1]               //计算要移动的偏移
        movzx ax,al                         //长度对齐
        add si,ax                           //移动指针
        add si,2                            //加上前两个字节的长度
        mov byte ptr[si],'$'                //放入字符串终止符
   
        add dx,2
        mov ah,09h
        int 21h
        

        lea dx,sentence
        mov ah,09h
        int 21h

        mov ah,01h
        int 21h

        mov ah,4ch
        int 21h
code ends
    end start

BTW:
没有处理换行,楼主自己在琢磨一下吧。
1