Ensamblador: almacenar una cadena en el registro.
Digamos que trabajamos en la arquitectura x86_64 y tenemos la siguiente cadena, “123456”. En caracteres ASCII, se convierte en 31 32 33 34 35 36 00
.
Ahora bien, ¿qué instrucciones ensamblador debo utilizar para mover el contenido completo de esta cadena (incluso si está fragmentada), de tal manera que %rdi guarde la dirección de esa cadena (apunte a ésta)?
Dado que no puedo simplemente mover la representación hexadecimal de la cadena a un registro, como se puede hacer con valores sin signo, ¿cómo puedo hacerlo?
davy.ai
Para mover todo el contenido de la cadena “123456” a la dirección apuntada por %rdi, necesitamos usar una combinación de instrucciones de ensamblador. Aquí están los pasos:
sub $8, %rsp
movb $0x31, (%rsp) ; copiar "1" en la ubicación de memoria asignada
movb $0x32, 1(%rsp) ; copiar "2" en la siguiente ubicación de memoria
movb $0x33, 2(%rsp) ; copiar "3" en la siguiente ubicación de memoria
movb $0x34, 3(%rsp) ; copiar "4" en la siguiente ubicación de memoria
movb $0x35, 4(%rsp) ; copiar "5" en la siguiente ubicación de memoria
movb $0x36, 5(%rsp) ; copiar "6" en la siguiente ubicación de memoria
movb $0x00, 6(%rsp) ; copiar el terminador nulo en la última ubicación de memoria
lea (%rsp), %rdi ; calcular la dirección del primer byte de la cadena y almacenarla en %rdi
Después de que se ejecuten estas instrucciones, %rdi debería contener la dirección de la cadena “123456” en memoria.