Floatingpointrechner Muster

Reading time ~1 minute

Die Lösung für diese Aufgabe wurde uns freundlicherweise von Thomas zur Verfügung gestellt.

## Framework in C
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>

extern double calc(double, double, char);

int main(int argc, char* argv[]) {
	if(argc < 4) {
		puts("Not enough arguments!");
		puts("Usage: ./calc <op1> +/- <op2>");
		return EXIT_FAILURE;
	}

	double op1 = atof(argv[1]);
	double op2 = atof(argv[3]);

	double res = calc(op1, op2, argv[2][0]);
	printf("%lf %c %lf = %lf\n", op1, argv[2][0], op2, res);

	return EXIT_SUCCESS;
}

Floatingpointrechner in NASM

GLOBAL calc

SECTION .text
calc:
	XOR rax, rax
	CMP rdi, 43 ; 43 ist ASCII fuer +
	JNE _noAdd
		addsd xmm0, xmm1
		RET
	_noAdd:
	CMP rdi, 45 ; 45 ist ASCII fuer -
	JNE _noOp
		subsd xmm0, xmm1
		RET
	_noOp:
	subsd xmm0, xmm0
	RET