Je suis encore très jeune à l'assemblage et seulement ce soir j'ai commencé à commencer à comprendre la majorité de ce que je voudrais faire, donc je peux avoir beaucoup de problèmes mais c'est dur pour moi de dire où en raison du manque d'expérience.Copier une chaîne dans l'assemblage x86 en utilisant l'adressage indirect
Je tente de copier une chaîne de la source à la cible en utilisant l'adressage indirect dans l'assemblage x86. J'essaie d'appliquer la compréhension que j'ai de cette explication, mais j'ai du mal à comprendre comment copier exactement les données @ esi dans edi.
.data
val1 BYTE 10h,20h,30h
.code
mov esi,OFFSET val1
mov al,[esi] ; dereference ESI (AL = 10h)
inc esi
mov al,[esi] ; AL = 20h
inc esi
mov al,[esi] ; AL = 30h
C'est ce que je l'ai fait jusqu'à présent et je l'ai fait Gotten à courir (!!!), mais malheureusement, il ne copie pas du tout. Je pense que ma boucle est mauvais (je ne sais pas exactement comment sortir correctement) et il y a quelque chose de fou se passe avec ma copie, mais je ne sais pas où je me trompe:
INCLUDE Irvine32.inc
.data
source BYTE "Source string I want to copy",0
target BYTE SIZEOF source DUP(0)
.code
main PROC
mov esi,OFFSET source
mov edi,OFFSET target
L1:
mov al,[esi] ; get char from source
mov [edi],al ; store it in target
inc esi ;move to next char in source
inc edi ;move to next position in target
cmp al, 28 ;compare al to 28 (the number of chars in source string)
JNZ L1 ;repeat the loop if al != 28 (length of source string)
mov edx, OFFSET source
call WriteString ;Prints out source string (working fine)
mov edx, OFFSET target
call WriteString ;Prints out dest string (working fine)
Les writestrings fonctionnent correctement en bas parce que j'ai été en mesure de l'obtenir à la sortie "Chaîne source que je veux copySource chaîne que je veux copier" dans la console lors de l'exécution en utilisant l'adressage indexé.
vous devriez comparer al avec 28, pas esi. et votre chaîne source devrait se terminer par un "#" puis – Tommylee2k
bien sûr, votre chaîne source n'est pas terminée par "'#" ;-) – Tommylee2k
Je n'ai jamais vu cela auparavant et je ne sais pas où cela est supposé aller/Pourquoi. Pourriez-vous expliquer ce que cela fait et où exactement cela se passe-t-il? J'ai essayé dans les citations de la chaîne, juste à l'extérieur, et juste après 0 et il continue de s'écraser. La recherche Google/stackoverflow ne montre pas grand-chose sur les chaînes se terminant par "#". – zr0z