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