Projet-Systemes-Informatiques/operations.c
Raphaël LACROIX 18f64a1653 NOT A COMMIT
2023-04-20 08:15:13 +02:00

107 lines
No EOL
2.7 KiB
C

//
// Created by chepycou on 4/14/23.
//
#include <stdio.h>
#include "table.h"
#include "operations.h"
#include "asmTable.h"
/*prints to the stdout and the out asm file*/
void printOp(char* s){
//printf("%s",s);
addLine(s);
/*FILE* fp;
fp = fopen("asm", "a");
fputs(s, fp);
fclose(fp);*/
}
/*clears the out asm file*/
void clearOp(){
FILE* fp;
fp = fopen("asm", "w");
fclose(fp);
}
/*prints the ASM instruction for the addition computation
* and returns the address of the temporary variable*/
int operation_add(int addr1, int addr2){
int addr = addTempINTAndGetAddress();
char s[ASM_TEXT_LEN];
sprintf(s, "ADD @%d @%d @%d\n", addr, addr1, addr2);
printOp(s);
return addr;
}
/*prints the ASM instruction for the subtraction computation
* and returns the address of the temporary variable*/
int operation_sub(int addr1, int addr2){
int addr = addTempINTAndGetAddress();
char s[ASM_TEXT_LEN];
sprintf(s, "SUB @%d @%d @%d\n", addr, addr1, addr2);
printOp(s);
return addr;
}
/*prints the ASM instruction for the multiplication computation
* and returns the address of the temporary variable*/
int operation_mul(int addr1, int addr2){
int addr = addTempINTAndGetAddress();
char s[ASM_TEXT_LEN];
sprintf(s, "MUL @%d @%d @%d\n", addr, addr1, addr2);
printOp(s);
return addr;
}
/*prints the ASM instruction for the integer division computation
* and returns the address of the temporary variable*/
int operation_divInt(int addr1, int addr2){
int addr = addTempINTAndGetAddress();
char s[ASM_TEXT_LEN];
sprintf(s, "DIV_INT @%d @%d @%d\n", addr, addr1, addr2);
printOp(s);
return addr;
}
/*prints the ASM instruction for the remainder computation
* and returns the address of the temporary variable*/
int operation_divRem(int addr1, int addr2){
int addr = addTempINTAndGetAddress();
char s[ASM_TEXT_LEN];
sprintf(s, "DIV_REM @%d @%d @%d\n", addr, addr1, addr2);
printOp(s);
return addr;
}
/*prints the ASM instruction for the affection of a variable
* EX :
* a = 2;
*/
void operation_afc_nb(int addr, int value){
char s[ASM_TEXT_LEN];
sprintf(s, "AFC @%d #%d\n", addr, value);
printOp(s);
}
/*prints the ASM instruction for the affection of a temporary variable
* EX :
* "1_TEMP = 2"
* and returns the address of the temp variable*/
int operation_afc_nb_tmp(int value){
int addr = addTempINTAndGetAddress();
operation_afc_nb(addr, value);
return addr;
}
/*prints the ASM instruction for the affection of a temporary variable
* EX :
* a = b;
*/
void operation_copy(int addr1, int addr2){
char s[ASM_TEXT_LEN];
sprintf(s, "COP @%d @%d\n", addr1, addr2);
printOp(s);
}