2010-10-08 12 views

Respuesta

32

En el modo de 32 bits, esi.

En concreto, movsb copias de un byte ds:esi-es:edi, los ajusta tanto esi y edi por 1, ya sea hacia arriba o hacia abajo dependiendo del indicador de dirección.

+6

Un poco de trivia x86 relacionada para los jóvenes de hoy - 'SI' (o' ESI' en el mundo de 32 bits) significa 'índice de origen' y 'DI' significa 'índice de destino', que proviene del usos para fines especiales de estos registros. –

+1

También tenga en cuenta que los registros de segmento predeterminados DS y ES pueden anularse para usar otros registros de segmento. –

+5

@I. J. Kennedy: Solo el 'ds' puede ser anulado. El 'es' es fijo. –

7

cómo extraer esa información del manual de

Ahora que ha iniciado sesión en osdev.org, es el momento de pagar su deuda moral por hecho aprenderlo. :-)

Intel Manual Volume 2 Instruction Set Reference - 325383-056US September 2015 sección "Datos MOVS/MOVSB ​​/ MOVSW/MOVSD/MOVSQ-Move de String a String" dice:

Mueve el byte, palabra o palabra doble especificado con el segundo operando (fuente operando) a la ubicación especificada con el primer operando (operando de destino). Los operandos de origen y de destino se encuentran en la memoria. La dirección del operando fuente se lee de la DS: ESI o la DS: SI registra

programa de prueba mínima

Por último, hay que hacer un programa mínimo que utiliza la instrucción para ver si has entendido correctamente:

section .data 
    src db 0 
    dest db 1 
section .text 
global _start 
_start: 
    mov esi, src 
    mov edi, dest 
    cld 
    movsb 
    /* dest == 0*/ 

versión Ejecutable de esta con las afirmaciones on GitHub.

Cuestiones relacionadas