2016-03-28 13 views
0

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?

+4

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. –

+1

[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

+0

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. –

Antwort

2

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.