Ich verstehe nicht, was der Unterschied ist.Was ist der praktische Unterschied zwischen den Registern SI und DI?
Antwort
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.
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.
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
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.
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