global asm_reload_segments section .text align 4 asm_reload_segments: push 0x08 lea rax, [rel .reload_cs] push rax retfq ; 0z10 is 16 bytes in decimal, so this should reload the segment correctly .reload_cs: mov ax, 0x10 mov ds, ax mov es, ax mov fs, ax mov gs, ax mov ss, ax ret