Comment comprendre l'extrait de code ci-dessous [duplicate]

Sep 13 2020

Pour le contexte: en raison des cours en ligne, certains cours d'informatique des universités indiennes se sont réduits aux enseignants qui nous donnent simplement le code et s'attendent à ce que nous apprenions par cœur la chose.

Le programme consiste à compter le nombre de nombres + ve et -ve dans un tableau donné. Le code entier est ici .

Ma question concerne les lignes 45 à 59 (ci-dessous)

mov    esi, arr
mov    ecx,arr_size         ;Array counter i.e. 6 
mov    ebx,0;                   ;counter for     +ve nos
mov    edx,0;                   ;counter for    -ve nos.

next_num:
    mov    eax,[esi]         ; take no. in RAX
    rcl    eax,1             ; rotate left 1 bit to check for sign bit
    jc    negative
positive:
    inc    ebx            ; no carry, so no. is +ve
    jmp    next
negative:
    inc    edx            ; carry, so no. is -ve
next:
    add  esi,4                ; 32 bit nos i.e. 4 bytes
    loop next_num

Dans le code ci-dessus, d'après ce que je peux comprendre, je stocke l'emplacement de départ du tableau dans le registre ESI et scanne chaque élément et vérifie s'il est positif ou non

Cependant, comment savoir quand j'ai atteint la fin du tableau?

Le code maintient le registre ECX mais ne l'utilise pas. Pourquoi cela ne fonctionne-t-il pas sans fin alors?

Une sorte de boucle avec des instructions DEC ECX et JE 0 ne devrait-elle pas être là aussi?

Réponses

1 NateEldredge Sep 13 2020 at 23:37

Une sorte de boucle avec des instructions DEC ECX et JE 0 ne devrait-elle pas être là aussi?

C'est presque exactement ce que fait l' loopinstruction .