2009-09-27 11 views

Antwort

22

Wenn Sie Anweisungen wie MOVSB ​​verwenden, wird Si als ource Register s betrachtet, während di als d estination Register angesehen wird. Aber sie sind beide normale x86-Register.

10

Mein Assembly ist ein bisschen eingerostet, aber der Source-Index, der andere der Destination-Index. Eine Anweisung wie movsb kopiert ein Byte von der Speicherstelle, auf die SI zeigt, und verschiebt es an die Speicherstelle, auf die DI zeigt, und inkrementiert beides. Wenn Sie also das unter SI+1 gespeicherte Byte in DI+1 kopieren wollen, dann nur nimmt eine weitere movsb-Anweisung.

0

wie oben erwähnt di steht für den Zielindex und si steht für den Quellindex, wenn wir Daten aus dem Speicher verschieben wollen, benutzen wir si zB mov ax, [si]. und wenn wir Daten in den Speicher verschieben möchten, verwenden wir di. zB mov [di] ax

sind beide 16-Bit-Register und nicht in 8 Bit aufgespalten werden kann

+2

Sie können sowohl mov [si], ax und mov ax, [di] verwenden, wenn Sie einfache MOV-Anweisung verwenden, sind sie im Grunde die gleichen, so wie Sie mov [bx], ax verwenden können. Wenn Sie Anweisungen wie MOVSB ​​verwenden, nimmt die CPU an, dass die SI Quelle und DI Ziel ist, aber wenn Sie es manuell tun, können Sie beides entweder tun. – Bob

5

SI steht für Quellindex. Der Quellindex wird als Zeiger auf das aktuelle Zeichen verwendet, das in einem String-Befehl (LODS, MOVS oder CMPS) gelesen wird. Der Quellindex ist auch als Offset verfügbar, um Bx oder Bp hinzuzufügen, wenn eine indirekte Adressierung durchgeführt wird.
Beispiel:

MOV [Bx + SI] , Ax 

Dieser Befehl kopiert den Inhalt von Ax in den Speicherplatz, dessen Adresse die Summe der Bx und SI.

DI steht für den Zielindex, der als Zeiger auf das aktuelle Zeichen verwendet wird, das in einer String-Anweisung geschrieben oder verglichen wird.

Es ist auch als Offset wie SI erhältlich.