Системски софтвер/К1 Август 2020 — разлика између измена
Пређи на навигацију
Пређи на претрагу
(→Решење) |
(→Решење) |
||
Ред 52: | Ред 52: | ||
StructType foo(int esi) { | StructType foo(int esi) { | ||
StructType temp_struct; | StructType temp_struct; | ||
for(int i = 0; i < 9; ++i) { | for(int i = 0; i <= 9; ++i) { | ||
temp_struct.arr[i] = esi; | temp_struct.arr[i] = esi; | ||
} | } |
Тренутна верзија на датум 4. април 2022. у 15:29
Поставка
Написати еквивалентан програм на 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;
}