--*- coding: utf-8; -*-- INF2270 L?sningsforslag oppgaver uke 13 2015 # Navn: pluss. # Synopsis: Legger sammen to float-verdier. # C-signatur: float pluss (float a, float b) # Registre: Kun flyt-tallsstakken .globl pluss pluss: pushl %ebp # Standard movl %esp,%ebp # funksjonsstart. flds 8(%ebp) # Legg a flds 12(%ebp) # og b p? f-stakken. faddp # Legg dem sammen. popl %ebp # Standard ret # retur. # Navn: gjsnitt # Synopsis: Beregner gjennomsnittet av tre float-verdier. # C-signatir: float gjsnitt (float a, float b, float c) # Registre: Kun f-stakken. .globl gjsnitt gjsnitt:pushl %ebp # Standard movl %esp,%ebp # funksjonsstart. fildl v3 # Legg 3.0 p? f-stakken. flds 8(%ebp) # Legg a, flds 12(%ebp) # b og flds 16(%ebp) # c p? f-stakken. faddp # Legg sammen b, c faddp # og a. fdivp # Del p? 3.0. popl %ebp # Standard ret # retur. .data v3: .long 3 # Verdien 3 (som heltall) .text # Navn: pyt. # Synopsis: Pythagoras' formel. # C-signatur: float pyt (float x, float y) # Registre: Kun f-stakken. .globl pyt pyt: pushl %ebp # Standard movl %esp,%ebp # funksjonsstart. flds 8(%ebp) # Beregn f?rst x fmuls 8(%ebp) # * x og la ligge p? f-stakken. flds 12(%ebp) # Beregn s? y fmuls 12(%ebp) # * y. faddp # Legg to to sammen fsqrt # og beregn kvadratroten. popl %ebp # Standard ret # retur. # Navn: f. # Synopsis: Beregner f(a,b) = (a+b)/(a*b). # C-signatur: float f (float a, float b). # Registre: Kun f-stakken. .globl f f: pushl %ebp # Standard movl %esp,%ebp # funksjonsstart. cmpl $0,8(%ebp) # Hvis a==0, jz f_0 # hopp til f_0. cmpl $0,12(%ebp) # Hvis b==0, jz f_0 # hopp til f_0. flds 8(%ebp) # Beregn f?rst a fmul 12(%ebp) # * b. flds 8(%ebp) # Beregn s? a fadd 12(%ebp) # + b. fdivp # Beregn (a+b)/(a*b) jmp f_x # og hopp til utgangen. f_0: fldz # Legg svaret 0.0 p? f-stakken. f_x: popl %ebp # Standard ret # retur.