2010-10-08 16 views

Antwort

32

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.

+6

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

+1

Beachten Sie auch, dass die Standardsegmentregister DS und ES überschrieben werden können, um andere Segmentregister zu verwenden. –

+5

@I. J. Kennedy: Nur die 'ds' können außer Kraft gesetzt werden. Die 'es' sind festgelegt. –

7

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.