Does imm32 click end with imm64?

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- .

+1

All Articles