Системски софтвер/К1 Август 2020 — разлика између измена
Пређи на навигацију
Пређи на претрагу
м (Izmena povratnog tipa zasad) |
(→Решење) |
||
Ред 46: | Ред 46: | ||
== Решење == | == Решење == | ||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
typedef | typedef struct { | ||
int arr[10]; | |||
} StructType; | |||
} | |||
StructType foo(int esi) { | |||
StructType temp_struct; | |||
for(int i = 0; i < 9; ++i) { | |||
temp_struct.arr[i] = esi; | |||
} | |||
return temp_struct; | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> |
Верзија на датум 4. април 2022. у 14:57
Поставка
Написати еквивалентан програм на C програмском језику за дати изворни асемблерски код. Изворни асемблерски код је написан у складу са System V ABI.
.intel_syntax noprefix
.text
.globl foo
.type foo, @function
foo:
push rbp
mov rbp, rsp
push rbx
sub rsp, 88
mov QWORD PTR -88[rbp], rdi
mov DWORD PTR -92[rbp], esi
mov DWORD PTR -68[rbp], 0
jmp label_2
label_1:
mov eax, DWORD PTR -68[rbp]
cdqe
mov edx, DWORD PTR -92[rbp]
mov DWORD PTR -64[rbp+rax*4], edx
add DWORD PTR -68[rbp], 1
label_2:
cmp DWORD PTR -68[rbp], 9
jle label_1
mov rax, QWORD PTR -88[rbp]
mov rcx, QWORD PTR -64[rbp]
mov rbx, QWORD PTR -56[rbp]
mov QWORD PTR [rax], rcx
mov QWORD PTR 8[rax], rbx
mov rcx, QWORD PTR -48[rbp]
mov rbx, QWORD PTR -40[rbp]
mov QWORD PTR 16[rax], rcx
mov QWORD PTR 24[rax], rbx
mov rdx, QWORD PTR -32[rbp]
mov QWORD PTR 32[rax], rdx
mov rax, QWORD PTR -88[rbp]
add rsp, 99
pop rbx
pop rbp
ret
Решење
typedef struct {
int arr[10];
} StructType;
StructType foo(int esi) {
StructType temp_struct;
for(int i = 0; i < 9; ++i) {
temp_struct.arr[i] = esi;
}
return temp_struct;
}