Не понимаю как пройтись по массиву

Я хочу пройтись по массиву чисел duration с помощью регистра si. Но у меня не выходит правильно. Если я передаю лишь одно число dur, то оно работает нормально, если хочу проитерировать, то оно зависает и больше ничего. Объясните ошибку. Спасибо!

sseg    segment stack
        db      256 dup(?)
sseg    ends
dseg    segment
    music       dw  4063, 2559, 3835
    duration    dd  270000, 360000, 180000
    dur         dd 270000
    len         dw  3
dseg    ends
cseg    segment
        assume ss:sseg,cs:cseg,ds:dseg
start:  jmp main
main:   push    ds
        xor     ax,ax
        push    ax
        mov     ax,dseg
        mov     ds,ax
        cli
        ;------------------------------
        xor     di,di
        xor     si,si
cycle:
        mov     al,10110110b
        out     43h,al
        
        in      al,61h
        or      al,3
        out     61h,al
        ;------------
        mov     ax,music[si]
        out     42h,al
        mov     al,ah
        out     42h,al

        les     dx,dur      ;duratin[si]
        mov     cx,es
        mov     ah,86h
        int     15h
        ;------------
        in      al,61h
        and     al,11111100b
        out     61h,al
        ;------------
        inc     si
        inc     di
        cmp     si,len
        jnae    cycle
        ;------------------------------
exit:
        sti
        mov     ax,4c00h
        int     21h     
cseg    ends
        end start

Ответы (0 шт):