Системски софтвер/К 2023
Пређи на навигацију
Пређи на претрагу
Колоквијум 2023. године одржан је 12.4.2023. на РТИ и трајао је 90 минута.
Поставка
Написати еквивалентан програм на C програмском језику за дати изворни асемблерски код. Изворни асемблерски код је написан у складу са System V ABI.
.intel_syntax noprefix
.text
.globl foo
.type foo, @function
foo:
endbr64
push rbp
mov rbp, rsp
mov rax, rsi
mov r10, rdi
mov rsi, r10
mov rdi, r11
mov rdi, rax
mov QWORD PTR -64[rbp], rsi
mov QWORD PTR -56[rbp], rdi
mov QWORD PTR -80[rbp], rdx
mov QWORD PTR -72[rbp], rcx
mov rax, QWORD PTR -64[rbp]
mov rdx, QWORD PTR -56[rbp]
mov QWORD PTR -32[rbp], rax
mov QWORD PTR -24[rbp], rdx
mov rax, QWORD PTR -80[rbp]
mov rdx, QWORD PTR -72[rbp]
mov QWORD PTR -48[rbp], rax
mov QWORD PTR -40[rbp], rdx
mov rdx, QWORD PTR -32[rbp]
mov rax, QWORD PTR -48[rbp]
cmp rdx, rax
jle .L2
mov rax, QWORD PTR -32[rbp]
mov QWORD PTR -8[rbp], rax
jmp .L3
.L2:
mov rax, QWORD PTR -48[rbp]
mov QWORD PTR -8[rbp], rax
.L3:
movzx edx, BYTE PTR -24[rbp]
movzx eax, BYTE PTR -40[rbp]
cmp dl, al
jge .L4
movzx eax, BYTE PTR -24[rbp]
mov BYTE PTR -9[rbp], al
jmp .L5
.L4:
movzx eax, BYTE PTR -40[rbp]
mov BYTE PTR -9[rbp], al
.L5:
mov r8, QWORD PTR -8[rbp]
mov r9b, BYTE PTR -9[rbp]
mov rax, r8
mov rdx, r9
pop rbp
ret
Решење
typedef struct{
long l1;
char c1;
} StructType;
StructType foo(StructType arg1, StructType arg2)
{
StructType local1 = arg1;
StructType local2 = arg2;
long local3;
char local4;
if( local1.l1 > local2.l1 ){
local3 = local1.l1;
}
else{
local3 = local2.l1;
}
if ( local1.c1 < local2.c1 ){
local4 = local1.c1;
}
else{
local4 = local2.c1;
}
return (StructType){local3, local4};
}