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