From the Intel help manual :
68 id PUSH imm32
This means that pressing dword-size directiates is valid in a 64-bit program.
So, I wrote the following program:
section .text
global _start
_start:
call _foo
mov rax, 60
syscall
_foo:
push word 0xFFFF ;ok
pop ax ;ok
push dword 0xFFFFFFFF ; warning: signed dword value exceeds bounds
pop rax
call _bar
ret
_bar:
ret
Why did I receive this warning? From Intel Help:
The size of the operand (16, 32, or 64 bits) determines the amount by which the stack pointer decreases (2, 4, or 8). If the source operand is immediately smaller than the size of the operand, the extended character value is pushed onto the stack.
In my case, the operand size is 32 bits. This is not less than the size of the operand. Therefore, I expected that everything would be fine. But when the program was executed, after the push dword 0xFFFFFFFFextension of the 64-bit character was actually pressed.
, push imm32 64- .
pop eax ;instruction not supported in 64-bit mode
, 32- , 32- .