为什么小弟我编的代码运行是乱码?

为什么我编的代码运行是乱码??
data   segment
    buf1   db   "y=1$ "
    buf2   db   "y=0$ "
    buf3   db   "y=-1$ "
    block   db   5,-4,0,3,100,-51
data   ends
code   segment
assume   cs:code,ds:data
mov   ax,data  
mov   ds,ax
xor   ax,ax
mov   cx,6
mov   al,[block]
L1:
      cmp   al,0
      inc   al
      jge   next1
      mov   dx,offset   buf3
      mov   ah,9
      int   21h
      dec   cx
      loop   L1
next1:je   next2
      mov   dx,offset   buf1
      mov   ah,9
      int   21h
      dec   cx
      loop   L1
next2:
      mov   dx,offset   buf2
      mov   ah,9
      int   21h
      dec   cx
      loop   L1
done:
      mov   ah,4ch
      int   21h
code   ends
end

这是我的代码

------解决方案--------------------
data segment
buf1 db "y=1$ "
buf2 db "y=0$ "
buf3 db "y=-1$ "
block db 5,-4,0,3,100,-51
data ends

code segment
assume cs:code,ds:data
main: mov ax,data
mov ds,ax
xor bx,bx

mov cx,6
L1: mov al,block[bx]
cmp al,0
;inc al
jge next1
mov dx,offset buf3
mov ah,9
int 21h
;dec cx
jmp short ss2 ;为什么要强制跳转?因为程序是顺序执行的。
;如果不跳转,那是负数时还会执行next1的指令
next1:
je next2 ;如果等于0则跳至标号next2处
mov dx,offset buf1
mov ah,9
int 21h
;dec cx
jmp short ss2 ;类似于上一条jmp short ss2指令
next2:
mov dx,offset buf2
mov ah,9
int 21h
;dec cx
ss2: inc bx ;为引用下一个数据做准备
loop L1 ;执行完一次loop指令,cx自动减一,无须手动去减
;建议把概念先弄清楚

mov ah,4ch
int 21h
code ends
end main ;main指明程序起始位置