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 Réponses :
Mon vote est l'équivalent de Memchr (S, C, N) CODE>, où
s code> est dans
SI code> (incrémenté chaque itération),
C code> est dans
BL code> (par rapport à la chose obtenu de Si pour "élément trouvé" condition de sortie) et
n code> est dans
CX < / Code> (décrémenté, à zéro si l'élément de tableau égal à
BL code> 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 P>
Il cherche la valeur 33h code> dans le tableau d'octets
11h, 22h, 33h, 44h, 55H code>
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>
La section de boucle effectue les éléments suivants: p>
Imprimer Macro: P>
MOV AH, 09H INT 21H
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.
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 code>, plus une sortie conviviale. man7.org/linux/man-pages/man3/memchr.3. HTML