回 帖 发 新 帖 刷新版面

主题:我是初学者,帮忙看看一个小问题

stack    segment    stack
    dw    100 dup (?)
stack    ends
data    segment    
    x1    db    'please input a letter','$'    ;必须'$'结尾
    x2    db    'zhongyunde','$'        ;
data    ends
code    segment
    assume    cs:code,ds:data,ss:stack
start:    
    mov    ax,data
    mov    ds,ax
    mov    ah,1h
    int    21h
    cmp    al,0
    jz    start
    
    call    far ptr xx2  
code    ends

xx2    proc    far
    push    ds
    xor    ax,ax
    push    ax
    mov    ax,data
    mov    ds,ax
    mov    dx,offset    x2
    mov    ah,    9h
    int    21h    
    ret
xx2    endp
    end    start

下面是出错提示
data emitted with no segment??
不知为什么有问题?

回复列表 (共17个回复)

沙发


;简单的改了一下,不知你的程序的本意是什么
stack    segment    stack
    dw    100 dup (?)
stack    ends
data    segment    
    x1    db    'please input a letter','$'    ;必须'$'结尾
    x2    db    'zhongyunde','$'        ;
data    ends
code    segment
    assume    cs:code,ds:data,ss:stack
start:    
    mov    ax,data
    mov    ds,ax
    mov    ah,1h
    int    21h
    cmp    al,0
    jz    start
    
    call   xx2

xx2    proc
    mov    dx, offset    x2
    mov    ah,    9h
    int    21h    
    ret
xx2    endp

code    ends
    end    start

板凳

stack    segment    stack
    dw    100 dup (?)
stack    ends
data    segment    
    x1    db    'please input a letter','$'    ;必须'$'结尾
    x2    db    'zhongyunde','$'        ;
data    ends
code    segment
    assume    cs:code,ds:data,ss:stack
start:           //这地方似乎要分配段基址
    mov    ax,data
    mov    ds,ax
    mov    ah,1h
    int    21h
    cmp    al,0
    jz    start
    
    call    far ptr xx2  
code    ends

xx2    proc    far
    push    ds
    xor    ax,ax
    push    ax
    mov    ax,data
    mov    ds,ax
    mov    dx,offset    x2
    mov    ah,    9h
    int    21h    
    ret
xx2    endp
    end    start


3 楼

想输出两个字符串

但是输第二个串的时候需要按0确定,否则只输出第一个串

还是没有输出呀 ?
不知怎么改

错误提示
unknown opcode byte: 65h
there is no such 8086 instruction
make sure you JMP over any DB or DW data declarations.

4 楼

为什么总是没有输出
那个窗口一闪就没有拉

5 楼

DATA   SEGMENT   
    x1    db    'please input a letter:'  ;必须'$'结尾
          db   0ah,0dh,"$"
    x2    db    'zhongyunde','$'        ;
DATA    ends

code    segment
       assume    cs:code,ds:data
start:    
       mov    ax,DATA
       mov    ds,ax
jie:   lea    dx,x1
       mov    ah,09h
       int    21h
    
      mov   ah,1h
      int    21h
      cmp    al,"0"
      loopnz  jie

     
     mov   dx,offset x2
     mov    ah,09h
     int    21h
   

      MOV       AH,4ch
      INT       21h
code       ENDS
           END    start          

6 楼

cmp    al,"0"

cmp    al,'0'有什么区别

7 楼

没有区别
两个用法是一样的

8 楼

难道汇编中字符串与字符是不分的吗??

9 楼

谢谢你们的帮忙,一直没有给你们这些功臣加分 ,不好意思哦

现在终于明白拉  
原来只是窗口显示时间太短,来不及观看而已
谢谢大家拉

10 楼

服了
程序中的call ***有个屁用啊
既然是直接引用下面的子程序
那就不需要子程序了
直接一点就好,而且  你的程序call完后还得执行 下面的子程序语句
然后最后 ret 返回多了,那原先dos 压栈的内容就被你弹到cs:ip中
那就是中断的 int 20h
所以就返回了

我来回复

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