Ich bin auf diese beiden Anweisungen in der The Intel 64 and 32 Bit Architectures Software Developer Manual gestoßen, und frage mich einfach, was die Unterschiede zwischen den beiden sind, und wenn ich einen von ihnen über den anderen verwenden sollte.Wann sollte MOVS verwendet werden, das MOV in Assembly entgegengesetzt ist?
Antwort
Der Befehl MOVS
ist im Allgemeinen für eine mehrmalige Verwendung vorgesehen, da er die Werte von edi
und esi
automatisch inkrementiert oder dekrementiert. Inkrementieren oder Dekrementieren hängt davon ab, ob das Richtungsflag gelöscht oder gesetzt ist. Dies kann mit dem Präfix REP
verwendet werden, um es zu wiederholen, indem ecx
dekrementiert wird, bis es Null erreicht.
Laut einiger Dokumentation, die ich gelesen habe, war die Geschichte der movs
Anweisung, Zeichenfolgen um ein Byte nach dem anderen zu verschieben, obwohl Sie größere Elemente (Wörter und Quadwörter, speziell) verschieben können. Es wird automatisch edi
und esi
um den richtigen Betrag ändern, aber es wird immer nur ecx
um eins dekrementieren, also seien Sie vorsichtig, wenn Sie zum Beispiel Unicode-Zeichenfolgen verschieben.
Die Seite unter http://x86.renejeschke.de/html/file_module_x86_id_279.html erklärt die genauen Bedingungen für das rep
Präfix und seine Varianten.
Die MOVS-Anweisung führt Speicherkopien von beliebiger Größe aus. Der MOV-Befehl führt 8-, 16-, 32- oder 64-Bit-Register-zu-Register-, Register-zu-Speicher- oder Speicher-zu-Register-Kopien durch. –
[Dies könnte eine bessere Referenz sein] (http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction- set-reference-manual-325383.pdf) für Sie (siehe Kapitel 3). – vcsjones
Sobald Sie wissen, was 'mov' und' movs' tun (und weil Sie darüber im Intel-Handbuch gelesen haben, wissen Sie ** was ** sie tun), wird die Frage nach ** wann ** zu einer grenzwertigen Meinung -basierend. –