¿Cómo mover 3 bytes (24 bits) de la memoria a un registro?

Puedo mover elementos de datos almacenados en la memoria, a un registro de propósito general de mi elección, usando elMOV instrucción.

MOV r8, [m8]
MOV r16, [m16]
MOV r32, [m32]
MOV r64, [m64]

Ahora, no me disparen, pero cómo se logra lo siguiente:MOV r24, [m24]? (Agradezco que esto último no sea legal).

En mi ejemplo, quiero mover los caracteres "Pip", es decir, 0x706950h, para registrarrax.

section .data           ; Section containing initialized data

14      DogsName: db "PippaChips"
15      DogsNameLen: equ $-DogsName

Primero consideré que podía mover los bytes por separado, es decir, primero un byte, luego una palabra o alguna combinación de los mismos. Sin embargo, no puedo hacer referencia a las "mitades superiores" deeax, rax, así que esto se cae en el primer obstáculo, ya que terminaría sobreescribiendo los datos que se movieron primero.

Mi solución:

26    mov al, byte [DogsName + 2] ; move the character “p” to register al
27    shl rax, 16                 ; shift bits left by 16, clearing ax to receive characters “pi”
28    mov ax, word [DogsName]     ; move the characters “Pi” to register ax

Podría declarar "Pip" como un elemento de datos inicializado, pero el ejemplo es solo eso, un ejemplo, quiero entender cómo hacer referencia a 24 bits en el ensamblaje, o 40, 48 ... para el caso.

¿Hay alguna instrucción más parecida aMOV r24, [m24]? ¿Hay alguna manera de seleccionar un rango de direcciones de memoria, en lugar de proporcionar el desplazamiento y especificar un operador de tamaño? ¿Cómo mover 3 bytes de la memoria para registrarse en ASM x86_64?

NASM versión 2.11.08 Arquitectura x86

Respuestas a la pregunta(3)

Su respuesta a la pregunta