回 帖 发 新 帖 刷新版面

主题:[讨论]求助啊!!悬赏中.....

要求很简单,就是输入一个字符串,然后显示出来,第一个源程序怎么都不行,
stack segment stack                  
      db 1024 dup(0)
stack ends

data segment
     buf1 = 256
     buf db buf1
         db 0
         db buf1 dup(0)
data ends

code segment
     assume cs:code,ds:data,ss:stack

start:
     mov ax,data
     mov ds,ax
     mov dx,offset buf
     mov ah,0ah     
     int 21h 
     mov dl,0ah
     mov ah,02h
     int 21h
     mov dx,offset buf+2
     mov ah,09h
     int 21h
     mov ah,4ch
     int 21h

code ends
     end start
不知道错到哪里了......然后我改了一下,单个输出可以了,
stack segment stack                  
      db 1024 dup(0)
stack ends

data segment
     buf1 = 128
     buf db buf1
         db 0
         db buf1 dup(0)
data ends

code segment
     assume cs:code,ds:data,ss:stack

start:
     mov ax,data
     mov ds,ax
     mov dx,offset buf
     mov ah,0ah     
     int 21h 
     mov dl,0ah
     mov ah,02h
     int 21h
     mov bx,offset buf+1
     mov cl,[bx]
     mov ch,0
again:
     add bx,1
     mov dl,[bx]
     mov ah,02h
     int 21h
     loop again
     mov ah,4ch
     int 21h    

code ends
     end start

回复列表 (共4个回复)

沙发

第一个到底怎么错了呢??唉.....

板凳

赫赫
我已经找出错误了,不麻烦大家了.....

3 楼

原因是用9号功能显示字符串的时候,字符串需由'$'结束。其实你不需要象第二段代码那样一个字符一个字符地输出。只需要把data段的内容如下更改就行了:

buf db buf1-1
    db 0
    db buf1 dup('$')

把缓冲全用'$'覆盖,然后大小减一,这样就能保证至少最后一个字节是'$'。

4 楼


stack segment stack                  
      db 1024 dup(0)
stack ends

data segment
     buf1 = 128
     buf db buf1
         db ?
         db buf1 dup(0)
data ends

code segment
     assume ds:data,cs:code,ss:stack
start:
     mov ax,data      
     mov ds,ax
     mov dx,offset buf
     mov ah,0ah
     int 21h
     mov dl,0ah
     mov ah,02h
     int 21h
     mov dx,seg buf
     mov ds,dx 
     mov dx,offset buf+2
     mov ah,09h
     int 21h
     mov ah,4ch
     int 21h
code ends
     end start  

这个程序在输入字符串的时候,用$结束时,就可以正确的显示了
还是非常感谢楼上的!!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册