dest = source
The movsx instruction moves the source value (second operand) to the destination register and propagates the high order bit of the source through the rest of the destination. The source can be a 64, 32, 16 or 8 bit register or memory location. The source must be a smaller size than the destination. The purpose of the instruction is to move a signed integer into a larger register and use it as a signed integer.
If the source is 32 bits, the instruction mnemonic is "movsxd" rather than "movsx". Technically it is a different bit pattern, but it would have been handier to allow "movsx" to work for all cases. Most programmers are unconcerned about the actual bits used for the instruction.
movsx rax, dx ; moves dx to ax
; fills the rest of rax with dx bit 15
movsx eax, dx ; moves dx to ax
; fills the rest of eax with dx bit 15
; zeroes out the rest of rax
movsx ax, dl ; moves dl to al
; fills bits ah with dl bit 7
; leaves the rest of rax alone
movsx rax, word [x] ; moves 16 bit variable x to ax
; fills the rest of rax with x sign bit
movsxd rax, dword [x] ; moves 32 bit variable x to eax
; fills the rest of rax with x bit 31
movsx rax, byte [x] ; moves 8 bit variable x to al
; files the rest of rax with x bit 7