'How to print "Hello World" in x86_64 assembly language using stack memory? [duplicate]

I am trying to write a "Hello World" program using stack memory.

section .text
global _start

_start:
    mov     al  , 0x01
    mov     dil , al                    

    push    0x0a646c72  ; text: "\nrld"
    push    0x6f57206f  ; text: "o Wo"
    push    0x6c6c6548  ; text: "Hell"

    mov     rsi , rsp
    mov     dl  , 0x0c
    syscall

    mov     al  , 0x3c
    xor     dil , dil
    syscall

But it is only printing "Hello Wo".
I understand stack memory follow the LIFO method.
There is no change in result, if I move this hex codes(Hello World\n) into three registers such as -

mov     r10 , 0x0a646c72
push    r10
mov     r11 , 0x6f57206f
push    r11
mov     r12 , 0x6c6c6548
push    r12

So, why this first push "rld\n" is not printing?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source