Системски софтвер/К 2023

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу

Колоквијум 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};
}