cの構造体とassembler

#include <stdio.h>

typedef char String[1024];

int main(void) {

    typedef struct {
        String name;
        int hp;
        int attack;
    } Monster;

    Monster seiryu = {"青竜", 100, 15};
    printf(seiryu.name, seiryu.hp, seiryu.attack);
    return 0;
}
|$LN3|
        stp         fp,lr,[sp,#-0x10]!
        mov         fp,sp
        bl          __security_push_cookie
        sub         sp,sp,#0x410
        add         x8,sp,#8
        str         x8,[sp]
        ldr         x9,[sp]
        adrp        x8,|$SG4988|
        add         x8,x8,|$SG4988|
        ldr         w10,[x8]
        str         w10,[x9]
        ldrsh       w10,[x8,#4]
        strh        w10,[x9,#4]
        ldrsb       w8,[x8,#6]
        strb        w8,[x9,#6]
        add         x0,sp,#0xF
        mov         x2,#0x3F9
        mov         w1,#0
        bl          memset
        mov         w8,#0x64
        str         w8,[sp,#0x408]
        mov         w8,#0xF
        str         w8,[sp,#0x40C]
        mov         w0,#0
        add         sp,sp,#0x410
        bl          __security_pop_cookie
        ldp         fp,lr,[sp],#0x10
        ret

        ENDP  ; |main|

もう少しシンプルにする

int main(void) {

    typedef struct {
        String name;
    } Monster;

    Monster seiryu = {"青竜"};
    // printf(seiryu.name, seiryu.hp, seiryu.attack);
    return 0;
}
|main|  PROC
|$LN3|
        stp         fp,lr,[sp,#-0x10]!
        mov         fp,sp
        bl          __security_push_cookie
        sub         sp,sp,#0x400
        add         x8,sp,#8
        str         x8,[sp]
        ldr         x9,[sp]
        adrp        x8,|$SG4986|
        add         x8,x8,|$SG4986|
        ldr         w10,[x8]
        str         w10,[x9]
        ldrsh       w10,[x8,#4]
        strh        w10,[x9,#4]
        ldrsb       w8,[x8,#6]
        strb        w8,[x9,#6]
        add         x0,sp,#0xF
        mov         x2,#0x3F9
        mov         w1,#0
        bl          memset
        mov         w0,#0
        add         sp,sp,#0x400
        bl          __security_pop_cookie
        ldp         fp,lr,[sp],#0x10
        ret

x8, x9に入れたものをw10にstr, ldr
ldrshは16ビットにstr

構造体定義だと複雑なことをするのね