Welches x86-Register bezeichnet die Quellposition in der movsb-Anweisung?Welches x86-Register bezeichnet die Quelle in der movsb-Anweisung?
Antwort
Im 32-Bit-Modus esi
.
In bestimmten, movsb
Kopien ein Byte von ds:esi
zu es:edi
, die sowohl esi
einstellt und edi
durch 1, entweder nach oben oder nach unten auf der Flagge Richtung abhängig.
Ein bisschen verwandtes x86-Wissen für die heutige Jugend - 'SI' (oder' ESI' in der 32-Bit-Welt) steht für 'source index' und 'DI' steht für 'destination index', was von der Zweckbestimmung dieser Register. –
Beachten Sie auch, dass die Standardsegmentregister DS und ES überschrieben werden können, um andere Segmentregister zu verwenden. –
@I. J. Kennedy: Nur die 'ds' können außer Kraft gesetzt werden. Die 'es' sind festgelegt. –
Wie diese Informationen aus dem Handbuch
Jetzt zu extrahieren, dass Sie in osdev.org angemeldet haben, ist es Zeit, um wirklich zu lernen es Ihre moralische Schuld zu bezahlen. :-)
Intel Manual Volume 2 Instruction Set Reference - 325383-056US September 2015 Abschnitt "MOVS/MOVSB / MOVSW/MOVSD/MOVSQ-Move Daten von String in String", sagt:
das Byte, Wort Verschiebt oder mit dem zweiten Operanden angegeben Doppelwort (Quelle Operand) an den angegebenen Ort mit dem ersten Operanden (Zieloperand). Sowohl der Quell- als auch der Zieloperand befinden sich im Speicher. Die Adresse des Quellenoperanden aus der DS lesen: ESI oder dem DS: SI-Register
Minimal Testprogramm
Schließlich müssen Sie ein minimales Programm, das die Anweisung verwendet, um zu sehen, ob Sie haben es richtig verstanden:
section .data
src db 0
dest db 1
section .text
global _start
_start:
mov esi, src
mov edi, dest
cld
movsb
/* dest == 0*/
Runnable-Version dieser mit Behauptungen on GitHub.
Das ist die Einstiegsfrage von 'osdev.org'! –
genau !. vielleicht sogar ich hatte gegoogelt, als ich bei osdev sein wollte – geek1000
@ManuHegde Hey, zumindest ist es dann unwahrscheinlich, dass du ein Bot bist. Um was sollte sich die Frage eigentlich kümmern? ;-) –