为什么我这个loop循环和cx不搭?

data segment
string db "abcdef"
data ends
code segment
assume cs:code,ds:data

start:
mov ax,data
mov ds,ax

mov cx,5

mov ah,02h

here: mov dl,'a'
int 21h
loop here

mov ah,4ch
int 21h

code ends
end

我发现把
mov ax,data
mov ds,ax去掉之后就可以正确循环了,如果不去掉就循环了好多好多好多次。

和编译器有关系 我在dosbox里编译也是会循环很多次 在EMU8086里编译就只循环5次