I am in an introductory assembly class in university. I am using the yasm assembler, and I understand that movsx
moves a lower sized value to the higher sized register. I also understand that movsxd
is for moving a double word
into a higher sized, 64bit, register. But, when I test things out, movsx
and movsxd
have to same behavior with double words
.
Here is my example code:
segment .data
a dd 0xf000000f ; -268435441
segment .text
global main
main:
movsx rax, dword [a]
movsxd rbx, dword [a]
ret
I feel since movsxd
exists it should have some different behavior then movsx
but when I run the code above and look at the values in the registers, there is no difference. Maybe I am not understanding it's intended use, or maybe I am misunderstanding something else.
Any help would be great, thanks!
---Edit---
Also forgot to mention I am on Windows 11 x64