Sistemski softver/K1 Oktobar 2020

Izvor: SI Wiki
Pređi na navigaciju Pređi na pretragu

Postavka

Napisati ekvivalentan program na C programskom jeziku za dati izvorni asemblerski kod. Izvorni asemblerski kod je napisan u skladu sa 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

Rešenje

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

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