Системски софтвер/К1 Октобар 2020

Извор: SI Wiki
< Системски софтвер
Датум измене: 28. март 2022. у 22:21; аутор: KockaAdmiralac (разговор | доприноси) (Oktobar 2020)
(разл) ← Старија измена | Тренутна верзија (разл) | Новија измена → (разл)
Пређи на навигацију Пређи на претрагу

Поставка

Написати еквивалентан програм на C програмском језику за дати изворни асемблерски код. Изворни асемблерски код је написан у складу са System V ABI.

        .intel_syntax noprefix
        .text
        .global foo
        .type foo, @function
foo:
        push rbp
        mov rbp, rsp
        mov QWORD PTR -24[rbp], rdi
        mov QWORD PTR -32[rbp], rsi
        mov rax, QWORD PTR -24[rbp]
        mov rax, QWORD PTR 16[rbp+rax*8]
        mov QWORD PTR -8[rbp], rax
        mov rax, QWORD PTR -32[rbp]
        mov rdx, QWORD PTR [rax]
        mov rax, QWORD PTR -8[rbp]
        add rdx, rax
        mov rax, QWORD PTR -32[rbp]
        mov QWORD PTR [rax], rdx
        mov rax, QWORD PTR -8[rbp]
        pop rbp
        ret

Решење

typedef struct {
    long array[16];
} InputStruct;

long foo(long arg1, long* arg2, InputStruct niz) {
    long var = niz.array[arg1];
    *arg2 += var;
    return var;
}