From 33db0e98593b1a020f79688366e22fa81c4a825b Mon Sep 17 00:00:00 2001
From: b21202065 <niels.bauquin@etu.univ-amu.fr>
Date: Fri, 22 Mar 2024 17:09:44 +0100
Subject: [PATCH] geg

---
 src/nasm/C3a2nasm.java          | 72 ++++++++++++++++++++++++++++-----
 test/pre-nasm-ref/add1.pre-nasm |  2 +-
 2 files changed, 62 insertions(+), 12 deletions(-)

diff --git a/src/nasm/C3a2nasm.java b/src/nasm/C3a2nasm.java
index 9e9dce5..c159c73 100644
--- a/src/nasm/C3a2nasm.java
+++ b/src/nasm/C3a2nasm.java
@@ -52,14 +52,41 @@ public class C3a2nasm implements C3aVisitor <NasmOperand> {
     }
 
     public NasmOperand visit(C3aInstCall inst){
-        NasmOperand address = (inst.label != null) ?
-                inst.label.accept(this)
-                : null;
-        nasm.ajouteInst(new NasmCall(null, address, ""));
+
+
+        NasmRegister register = nasm.newRegister();
+        register.colorRegister(Nasm.REG_ESP);
+        nasm.ajouteInst(new NasmSub(null, register, new NasmConstant(4),"allocation mémoire pour la valeur de retour"));
+        nasm.ajouteInst(new NasmCall(null, inst.op1.accept(this), ""));
+        nasm.ajouteInst(new NasmPop(null, inst.result.accept(this),"récupération de la valeur de retour"));
         return null;
     }
     public NasmOperand visit(C3aInstFBegin inst){
+        NasmRegister register = nasm.newRegister();
+        register.colorRegister(Nasm.REG_EBP);
+        nasm.ajouteInst(new NasmPush(new NasmLabel(inst.val.getIdentif()), register,"sauvegarde la valeur de ebp"));
+
+        NasmRegister register1 = nasm.newRegister();
+        register1.colorRegister(Nasm.REG_ESP);
+        nasm.ajouteInst(new NasmMov(null, register, register1, "nouvelle valeur de ebp"));
+
+        NasmRegister register2 = nasm.newRegister();
+        register2.colorRegister(Nasm.REG_EAX);
+        nasm.ajouteInst(new NasmPush(null, register,"sauvegarde la valeur de eax"));
+
+        NasmRegister register3 = nasm.newRegister();
+        register3.colorRegister(Nasm.REG_EBX);
+        nasm.ajouteInst(new NasmPush(null, register,"sauvegarde la valeur de ebx"));
+
+        NasmRegister register4 = nasm.newRegister();
+        register4.colorRegister(Nasm.REG_ECX);
+        nasm.ajouteInst(new NasmPush(null, register,"sauvegarde la valeur de ecx"));
+
+        NasmRegister register5 = nasm.newRegister();
+        register5.colorRegister(Nasm.REG_EDX);
+        nasm.ajouteInst(new NasmPush(null, register,"sauvegarde la valeur de edx"));
 
+        nasm.ajouteInst(new NasmSub(null, register1, new NasmConstant(0), "allocation des variables locales"));
 
         return null;
     }
@@ -117,17 +144,40 @@ public class C3a2nasm implements C3aVisitor <NasmOperand> {
         return null;
     }
     public NasmOperand visit(C3aInstStop inst){
-
+        NasmRegister register1 = nasm.newRegister();
+        register1.colorRegister(Nasm.REG_EBX);
+        NasmRegister register2 = nasm.newRegister();
+        register2.colorRegister(Nasm.REG_EAX);
+        nasm.ajouteInst(new NasmMov(null, register1, new NasmConstant(0)," valeur de retour du programme"));
+        nasm.ajouteInst(new NasmMov(null, register2, new NasmConstant(1)," code de sortie"));
+        nasm.ajouteInst(new NasmInt(null,null));
         return null;
     }
 
-    public NasmOperand visit(C3aConstant oper){return null;}
-    public NasmOperand visit(C3aBooleanConstant oper){return null;}
-    public NasmOperand visit(C3aLabel oper){return null;}
+    public NasmOperand visit(C3aConstant oper){
+
+
+        System.out.println(oper.getClass());
+        return new NasmConstant(oper.val);}
+    public NasmOperand visit(C3aBooleanConstant oper){
+        System.out.println(oper.getClass());
+        return null;}
+    public NasmOperand visit(C3aLabel oper){
+        System.out.println(oper.getClass());
+        return null;}
     public NasmOperand visit(C3aTemp oper){
-        return null;
+
+
+        System.out.println(oper.getClass());
+        return new NasmRegister(oper.num);
     }
-    public NasmOperand visit(C3aVar oper){return null;}
-    public NasmOperand visit(C3aFunction oper){return null;}
+    public NasmOperand visit(C3aVar oper){
+        System.out.println(oper.getClass());
+        return null;}
+    public NasmOperand visit(C3aFunction oper){
+
+
+        System.out.println(oper.getClass());
+        return new NasmLabel(oper.val.identif);}
     
 }
diff --git a/test/pre-nasm-ref/add1.pre-nasm b/test/pre-nasm-ref/add1.pre-nasm
index a85129f..ead0968 100644
--- a/test/pre-nasm-ref/add1.pre-nasm
+++ b/test/pre-nasm-ref/add1.pre-nasm
@@ -9,7 +9,7 @@ _start:
 	sub	esp,	4	;allocation mémoire pour la valeur de retour
 	call	main
 	pop	@0	;récupération de la valeur de retour
-	mov	ebx,	0	; valeur de retour du programme
+	mov	ebx,	0	; valeur de retour du programme>
 	mov	eax,	1	; code de sortie
 	int 0x80
 main :	push	ebp	;sauvegarde la valeur de ebp
-- 
GitLab