registers - add assembly
¿Cuál es la diferencia práctica entre los registros SI y DI? (4)
No entiendo cuál es la diferencia.
Cuando está utilizando instrucciones como movsb, si se considera como el registro de origen, mientras que di se considera como el registro de estimación. Pero ambos son registros x86 normales.
Mi montaje está un poco oxidado, pero uno es el índice de origen, el otro es el índice de destino. Una instrucción como movsb
copiará un byte de la ubicación de memoria apuntada por SI
, y lo moverá a la ubicación de memoria apuntada por DI
, y luego incrementará ambas, así que si quiere copiar el byte almacenado en SI+1
a DI+1
, solo requiere una instrucción movsb adicional.
como dijimos anteriormente di significa índice de destino y si significa índice de fuente, cuando queremos mover datos de la memoria usamos si eg, mov ax, [si]. y cuando queremos mover datos a la memoria usamos di. por ejemplo, mov [di], hacha
ambos son de 16 bits y no se pueden dividir en 8 bits
SI
significa índice de fuente. El índice de origen se usa como un puntero al carácter actual que se lee en una instrucción de cadena (LODS, MOVS o CMPS). El índice de origen también está disponible como un desplazamiento para agregar Bx o Bp al hacer direccionamiento indirecto.
ejemplo:
MOV [Bx + SI] , Ax
Esta instrucción copia el contenido de Axe en la ubicación de la memoria cuya dirección es la suma de Bx y SI.
DI
significa índice de destino, utilizado como un puntero al carácter actual que se está escribiendo o comparando en una instrucción de cuerda.
También está disponible como un desplazamiento al igual que SI.