-2
votes

Quelqu'un peut-il ici à me faire comprendre ce programme et quelle sortie vais-je passer à travers cela?

DATA SEGMENT
STRING1 DB 11H,22H,33H,44H,55H
MSG1    DB "FOUND$"
MSG2    DB "NOT FOUND$"
SE      DB 34H
DATA ENDS

PRINT MACRO MSG
    MOV AH, 09H
    LEA DX, MSG
    INT 21H
    INT 3
ENDM

CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
    MOV AX, DATA
    MOV DS, AX
    MOV AL, SE
    LEA SI, STRING1
    MOV CX, 04H

UP:
    MOV BL,[SI]
    CMP AL, BL
    JZ FO
    INC SI
    DEC CX
    JNZ UP

    PRINT MSG2
    JMP END1
FO:
    PRINT MSG1
END1:
    INT 3

CODE ENDS
END START

3 commentaires

Avez-vous essayé de le courir dans un débogueur pour voir ce que ça fait et pourquoi?


Oui, j'ai essayé de le courir et j'ai eu une sortie aussi ... mais je n'ai pas compris ce programme et comment comprendre la sortie que j'ai eue raison ou mal.


Mon vote est l'équivalent de memchr , plus une sortie conviviale. man7.org/linux/man-pages/man3/memchr.3. HTML


3 Réponses :


0
votes

Mon vote est l'équivalent de Memchr (S, C, N) , où s est dans SI (incrémenté chaque itération), C est dans BL (par rapport à la chose obtenu de Si pour "élément trouvé" condition de sortie) et n est dans CX < / Code> (décrémenté, à zéro si l'élément de tableau égal à BL non trouvé, qui étant une autre condition de sortie) plus une sortie sympathique (macro contenant des appels INT21H). Voir http://man7.org/linux/man-pages/man3 /memchr.3.html


0 commentaires

0
votes

Il cherche la valeur 33h dans le tableau d'octets 11h, 22h, 33h, 44h, 55H xxx


0 commentaires

3
votes

Le programme recherche l'octet '34H' dans la séquence 11H, 22h, 33h, 44h.

La section de démarrage effectue les éléments suivants: p>

  • SET DS: Si à l'adresse de String1. li>
  • Set Al pour l'octet à rechercher pour. li>
  • Set CX pour le nombre d'octets à rechercher dans String1 (4 octets). li> ul>

    La section de boucle effectue les éléments suivants: p>

    • Chargez l'octet à DS: Si (de String1) dans BL LI>
    • Comparez-le avec l'octet à rechercher (dans AL) LI>
    • Si les octets sont égaux (zéro drapeau = 1) puis imprimez "trouvé" li>
    • sinon (non égal) Aller à l'octet suivant (Inc SI), décrémenter le compteur (CX) LI>
    • Si le compteur est zéro, quittez la boucle et imprimez "non trouvé" li> ul>

      Imprimer Macro: P>

      MOV AH, 09H
      INT 21H 
      


1 commentaires

Vous avez raison de rechercher uniquement les 4 premiers éléments du tableau d'octets. CX Bein 5 serait correct si l'intention était de rechercher le tout.