Заменить все большие семи члены массива числом 7. Подсчитать количество таких членов - Assembler

Формулировка задачи:

Задание: Задан одномерный массив. Заменить все большие семи члены массива числом 7. Подсчитать количество таких членов. Массив задать в сегменте данных или ввести с клавиатуры. Программа запускается, но результат нет вообще никакого. Не могу ошибку найти. помогите пожалуйста)
.model small              ;model pamati small
outmsg macro msg
    mov ah,09h
    lea dx,msg
    int 21h
endm
.stack 100h              ;stek zanimaet 256 baitov
.data                     ;segment dannyh 
    array db 1,8,4,5,6,2,3,4,5,9,"$"
    mess1 db "V massive $"
    mess2 db " bolshe 7 $"
    Exit_Mess db "Programma zavershena, najmite lubuyu lklavishu $"
    do db "do $"
.code
 
 
exit:
    ;vivod soobsheniya o vihode
    outmsg Exit_Mess       
    ;ozhidanie nazhatija klavishi
     mov ah,00h          ;v ah zanosim funkciju 00h  
     int 16h             ;vyzov preryvanija 16h
    ;vyhod iz programmy  
     mov ah,4ch          ;v ah zanosim funkciju 4Ch DOS  
     int 21h             ;vyzov preryvanija 21h  
     
main:   
    mov ax,@data
    mov ds,ax
    mov cx,10 ;zapolnyaem schetchik
    mov si,0   ;zapolnyaem ukazatel na element massiva
    mov di,0    ;zapolnyaem kolichestvo izmeneniy
step:
    lea ax,array[si] ; ukazivaem adres tekushego elementa
    cmp ax,7    ;sravnivaem s 7
    jg swap     ;esli ax bolshe 7 to perehodim k swap
    inc si      ;uvelichivaem nomer elementa
    
    loop step ;cikl step
    jmp last    ;perehodim k poslednemu shagu
    
swap:
    mov array[si],7 ;menyaem znachenie elementa na 7
    dec cx  ;umenshaem schetchik
    inc si  ;uvelichivaem nomer elementa
    inc di  ;uvelichivaem shetchik ismeneniy
    jmp step   ;perehodim k step
    
 ;vivodim resultat na ekran i zakrivaem programmu   
last:
    outmsg mess1
    mov ah,09h
    mov dx,di ;
    int 21h
    outmsg mess2
    jmp exit   
end main

Код к задаче: «Заменить все большие семи члены массива числом 7. Подсчитать количество таких членов - Assembler»

textual
.model small              ;model pamati small
outmsg macro msg
    mov ah,09h
    lea dx,msg
    int 21h
endm
.stack 100h              ;stek zanimaet 256 baitov
.data                     ;segment dannyh 
    array db 1,8,4,5,6,2,3,4,5,9,"$"
    mess1 db "V massive $"
    mess2 db " bolshe 7 $"
    Exit_Mess db "Programma zavershena, najmite lubuyu lklavishu $"
    do db "do $"
.code 
;procedura vyvodit chislo iz registra ax na ekran
prints proc  ;pechataet soderjimoe ax
      mov cx,10         ;v cx zanosim delitel 10
    xor di,di           ;ochistka di (kolichestvo cifr v chisle)
    ;esli ax<0, to pechataem '-' i delaem ax polozhitelnym 
    or ax,ax            ;proveraem ax
    jns conv            ;esli ax>0 (SF=0), to perehod na metku conv
    push ax             ;pomeschaem ax v stek
    mov dx,'-'          ;zanosim v dx '-'
    mov ah,2                ;vyvod '-' na ekran
    int 21h
    pop ax              ;vosstanavlivaem ax
    neg ax              ;delaem ax polozhitelnym
 conv:
    xor dx,dx           ;ochistka dx
    div cx                      ;dl = ax mod 10, 
    add dl,'0'          ;perevodim ostatok v simvol
    inc di              ;uvelichivaem kolichestvo cifr v chisle na 1
    push dx                     ;ostatok pomeschaem v stek
    or ax,ax            ;proveraem ax (chastnoe)
    jnz conv            ;esli ax<>0, to perehod na metku conv
                    ;i povtoraem delenie
    ;vyvod cifr iz steka na ekran
print:
    pop dx              ;izvlekaem iz steka ocherednoj simvol
    mov ah,2            ;vyvodim ego na ekran
    int 21h
    dec di              ;umenshaem schetchik cifr
    jnz print           ;esli di<>0 (ZF=0), to perehod na metku print
                    ;i povtoraem pechat' simvola
    ret             ;vyhod iz procedury          
prints endp    
 
main:   
    mov ax,@data
    mov ds,ax
    mov cx,10 ;zapolnyaem schetchik
    mov si,0   ;zapolnyaem ukazatel na element massiva
    mov di,0    ;zapolnyaem kolichestvo izmeneniy
 
step:
    
    mov al,array[si] ; ukazivaem adres tekushego elementa
    cmp al,7    ;sravnivaem s 7
    jg swap     ;esli ax bolshe 7 to perehodim k swap
    inc si    ;uvelichivaem nomer elementa 
    loop step ;cikl step
    jmp last    ;perehodim k poslednemu shagu
    
swap:
    mov array[si],7 ;menyaem znachenie elementa na 7
    dec cx  ;umenshaem schetchik
    inc si  ;uvelichivaem nomer elementa
    inc di  ;uvelichivaem shetchik ismeneniy
    jmp step   ;perehodim k step
    
 ;vivodim resultat na ekran i zakrivaem programmu   
last:
    mov ax,di 
    call prints
exit:
    ;vivod soobsheniya o vihode
    outmsg Exit_Mess       
    ;ozhidanie nazhatija klavishi
     mov ah,00h          ;v ah zanosim funkciju 00h  
     int 16h             ;vyzov preryvanija 16h
    ;vyhod iz programmy  
     mov ah,4ch          ;v ah zanosim funkciju 4Ch DOS  
     int 21h             ;vyzov preryvanija 21h    
end main

5   голосов, оценка 4.600 из 5


СОХРАНИТЬ ССЫЛКУ