Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • main
1 result

Target

Select target project
No results found
Select Git revision
  • main
1 result
Show changes
128 files
+ 4150
30
Compare changes
  • Side-by-side
  • Inline

Files

Original line number Diff line number Diff line
@@ -104,6 +104,8 @@ public class Compiler
			scRoot.apply(sc2sa);
			saRoot = sc2sa.getRoot();
		} catch (Exception ignored) {
		    System.out.println("exception construction arbre abstrait");
		    ignored.printStackTrace();
		}
		PrintStream out = System.out;
		if (verboseLevel > 1) {
@@ -132,7 +134,8 @@ public class Compiler
			System.err.print("ERREUR TABLE DES SYMBOLES : ");
			System.err.println(e.getMessage());
			System.exit(e.getCode());
		} catch (Exception ignored) {
		} catch (Exception e) {
		    e.printStackTrace();
		}
		if (verboseLevel > 1) {
			System.out.println("[PRINT TS]");
+4 −0
Original line number Diff line number Diff line
@@ -30,12 +30,14 @@ saexpinf = 'SaExpInf';
saexpint = 'SaExpInt';
saexplire = 'SaExpLire';
saexpmult = 'SaExpMult';
saexpmodulo = 'SaExpModulo';
saexpnot = 'SaExpNot';
saexpor = 'SaExpOr';
saexpsub = 'SaExpSub';
saexpvar = 'SaExpVar';
saexpvrai = 'SaExpVrai';
sainstaffect = 'SaInstAffect';
saincr= 'SaIncr';
sainstbloc = 'SaInstBloc';
sainstecriture = 'SaInstEcriture';
sainstretour = 'SaInstRetour';
@@ -73,6 +75,7 @@ exp = {add} po saexpadd [op1]:exp [op2]:exp pf
    | {equal}     po saexpequal [op1]:exp [op2]:exp pf
    | {inf}       po saexpinf   [op1]:exp [op2]:exp pf
    | {mult}      po saexpmult  [op1]:exp [op2]:exp pf
    | {modulo}    po saexpmodulo [op1]:exp [op2]:exp pf
    | {or}        po saexpor    [op1]:exp [op2]:exp pf
    | {sub}       po saexpsub   [op1]:exp [op2]:exp pf
    | {not}       po saexpnot         exp pf
@@ -85,6 +88,7 @@ exp = {add} po saexpadd [op1]:exp [op2]:exp pf
    ;

inst = {affect}   po sainstaffect   var exp pf
     | {incr}     po saincr         var exp pf
     | {bloc}     po sainstbloc     linst pf
     | {ecriture} po sainstecriture exp pf
     | {retour}   po sainstretour   exp pf
Original line number Diff line number Diff line
@@ -159,6 +159,19 @@ public class LoadSa extends DepthFirstAdapter {
        outAMultExp(node);
    }

    @Override
    public void caseAModuloExp(AModuloExp node)
    {
        inAModuloExp(node);
        node.getOp1().apply(this);
        SaExp op1 = (SaExp) returnValue;
        node.getOp2().apply(this);
        SaExp op2 = (SaExp) returnValue;
        returnValue = new SaExpModulo(op1,op2);
        outAModuloExp(node);
    }


    // exp = {or}        po saexpor    [op1]:exp [op2]:exp pf
    @Override
    public void caseAOrExp(AOrExp node)
@@ -267,6 +280,20 @@ public class LoadSa extends DepthFirstAdapter {
        outAAffectInst(node);
    }

    @Override
    public void caseAIncrInst(AIncrInst node)
    {
        inAIncrInst(node);
        node.getVar().apply(this);
        SaVar var = (SaVar) returnValue;
        node.getExp().apply(this);
        SaExp exp = (SaExp) returnValue;
        returnValue = new SaIncr(var, exp);
        outAIncrInst(node);
    }



// inst = {bloc}     po sainstbloc     linst pf
    @Override
    public void caseABlocInst(ABlocInst node)
Original line number Diff line number Diff line
@@ -187,6 +187,15 @@ public class SaDepthFirstVisitor <T> implements SaVisitor <T>{
	return null;
    }

	public T visit(SaIncr node) throws Exception
	{
		defaultIn(node);
		node.getLhs().accept(this);
		node.getRhs().accept(this);
		defaultOut(node);
		return null;
	}
    
    // LDEC -> DEC LDEC 
    // LDEC -> null 
    /*    public T visit(SaLDec node) throws Exception
@@ -269,6 +278,15 @@ public class SaDepthFirstVisitor <T> implements SaVisitor <T>{
		return null;
	}

	public T visit(SaExpModulo node) throws Exception
	{
		defaultIn(node);
		node.getOp1().accept(this);
		node.getOp2().accept(this);
		defaultOut(node);
		return null;
	}

	// EXP -> div EXP EXP
    public T visit(SaExpDiv node) throws Exception
    {
+34 −10
Original line number Diff line number Diff line
@@ -246,6 +246,21 @@ public class SaEval extends SaDepthFirstVisitor <TypeVal> {
		defaultOut(node);
		return null;
	}
	public TypeVal visit(SaIncr node) throws Exception
	{
		defaultIn(node);
		TypeVal incr = node.getRhs().accept(this);

		if(node.getLhs() instanceof SaVarIndicee){ // c'est une case de tableau, donc forcément globale
			SaVarIndicee lhsIndicee = (SaVarIndicee) node.getLhs();
			TypeVal indice = lhsIndicee.getIndice().accept(this);
			setVarGlobIndicee(lhsIndicee, indice, new TypeVal(getVarGlobIndicee(lhsIndicee, indice).valInt + incr.valInt));
		} else{
			setVar((SaVarSimple) node.getLhs(), new TypeVal(getVar((SaVarSimple) node.getLhs()).valInt + incr.valInt));
		}
		defaultOut(node);
		return null;
	}

	// LDEC -> DEC LDEC
    // LDEC -> null 
@@ -342,6 +357,15 @@ public class SaEval extends SaDepthFirstVisitor <TypeVal> {
		return new TypeVal(op1.valInt * op2.valInt);
	}

	public TypeVal visit(SaExpModulo node) throws Exception
	{
		defaultIn(node);
		TypeVal op1 = node.getOp1().accept(this);
		TypeVal op2 = node.getOp2().accept(this);
		defaultOut(node);
		return new TypeVal(op1.valInt % op2.valInt);
	}

	// EXP -> div EXP EXP
    public TypeVal visit(SaExpDiv node) throws Exception
    {
+31 −0
Original line number Diff line number Diff line
package sa;

import util.Type;


public class SaExpModulo implements SaExp{
        private SaExp op1;
        private SaExp op2;

        public SaExpModulo(SaExp op1, SaExp op2){
            this.op1 = op1;
            this.op2 = op2;
        }

        public SaExp getOp1(){return this.op1;}
        public SaExp getOp2(){return this.op2;}

        public Type getType(){
            return Type.ENTIER;
        }
        public <T> T accept(SaVisitor <T> visitor) throws Exception{
            return visitor.visit(this);
        }

        @Override
        public String toString() {
            return "(" + this.getClass().getSimpleName() + " " + op1 + " " + op2 + ")";
        }
    }

src/sa/SaIncr.java

0 → 100644
+24 −0
Original line number Diff line number Diff line
package sa;

public class SaIncr implements SaInst{
    private SaVar lhs;
    private SaExp rhs;

    public SaIncr(SaVar lhs, SaExp rhs){
        this.lhs = lhs;
        this.rhs = rhs;
    }
    public SaVar getLhs(){return this.lhs;}
    public SaExp getRhs(){return this.rhs;}

    public <T> T accept(SaVisitor <T> visitor) throws Exception{
        return visitor.visit(this);
    }

    @Override
    public String toString() {
        return "(" + this.getClass().getSimpleName()+ " " + lhs + " " + rhs + ")";
    }
}

Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ interface SaVisitor <T> {
    public T visit(SaExpAdd node) throws Exception;
    public T visit(SaExpSub node) throws Exception;
    public T visit(SaExpMult node) throws Exception;
    public T visit(SaExpModulo node) throws Exception;
    public T visit(SaExpDiv node) throws Exception;
    public T visit(SaExpInf node) throws Exception;
    public T visit(SaExpEqual node) throws Exception;
@@ -35,4 +36,6 @@ interface SaVisitor <T> {
    public T visit(SaExpOr node) throws Exception;
    public T visit(SaExpNot node) throws Exception;
    public T visit(SaLExp node) throws Exception;
    public T visit(SaIncr node) throws Exception;

}
Original line number Diff line number Diff line
@@ -34,5 +34,129 @@ public class ColorGraph {
	}
    }

    /*-------------------------------------------------------------------------------------------------------------*/
    /* associe une couleur à tous les sommets se trouvant dans la pile */
    /*-------------------------------------------------------------------------------------------------------------*/
    
    public void select()
    {
	int t;
	while(!stack.empty()){
	    t = stack.pop();
	    removed.remove(t);
	    if(color[t] == NOCOLOR)
		color[t] = chooseAvailableColor(neighborsColor(t));
	    if(color[t] == NOCOLOR)
		System.out.println("cannot find a color for vertex "+ t);
	}
    }
    
    /*-------------------------------------------------------------------------------------------------------------*/
    /* récupère les couleurs des voisins de t */
    /*-------------------------------------------------------------------------------------------------------------*/
    
    public IntSet neighborsColor(int t)
    {
	IntSet colorSet = new IntSet(colorNb);

	for(NodeList p = int2Node[t].succ(); p!=null; p=p.tail)
	    if(color[p.head.label()] != NOCOLOR)
		colorSet.add(color[p.head.label()]);
	return colorSet;
    }
    
    /*-------------------------------------------------------------------------------------------------------------*/
    /* recherche une couleur absente de colorSet */
    /*-------------------------------------------------------------------------------------------------------------*/
    
    public int chooseAvailableColor(IntSet colorSet)
    {
	for(int c=0; c < colorSet.getSize(); c++)
	    if(!colorSet.isMember(c))
		return c;
	return NOCOLOR;
    }
    
    /*-------------------------------------------------------------------------------------------------------------*/
    /* calcule le nombre de voisins du sommet t */
    /*-------------------------------------------------------------------------------------------------------------*/
    
    public int neighborsNb(int t)
    {
	int nb = 0;
	for(NodeList p = this.int2Node[t].succ(); p!=null; p=p.tail)
	    if(!removed.isMember(p.head.label()))
		nb++;
	return nb;
    }

    /*-------------------------------------------------------------------------------------------------------------*/
    /* simplifie le graphe d'interférence g                                                                        */
    /* la simplification consiste à enlever du graphe les temporaires qui ont moins de k voisins                   */
    /* et à les mettre dans une pile                                                                               */
    /* à la fin du processus, le graphe peut ne pas être vide, il s'agit des temporaires qui ont au moins k voisin */
    /*-------------------------------------------------------------------------------------------------------------*/

    public int simplify()
    {
	boolean removedAtLeastOneTemp = true;
	while(removedAtLeastOneTemp && stack.size() != vertexNb){
	    removedAtLeastOneTemp = false;
	    for(int t = 0; t < vertexNb; t++){
		if(!removed.isMember(t)){
		    int n = neighborsNb(t);
		    //		    System.out.println("node " + t + " has " + n + " neighbours"); 
		    int precolored = (color[t] == NOCOLOR)? 0 : 1;
		    if(n < (colorNb - precolored)){
			stack.push(t);
			removed.add(t);
			//			System.out.println("remove vertex " + t);
			removedAtLeastOneTemp = true;
		    }
		}
	    }
	}
	return stack.size();
    }
    
    /*-------------------------------------------------------------------------------------------------------------*/
    /*-------------------------------------------------------------------------------------------------------------*/
    
    public void spill()
    {
	int t;
	while(stack.size() != vertexNb){ /* some nodes have not been pushed */
	    for(t=0; t < vertexNb; t++){
		if(!removed.isMember(t)){ /* t i still in the graph */
		    System.out.println("vertex " + t + " is a potential spill");
		    spill.add(t);
		    removed.add(t);
		    stack.push(t);
		    simplify();
		}
	    }
	}
    }


    /*-------------------------------------------------------------------------------------------------------------*/
    /*-------------------------------------------------------------------------------------------------------------*/

    public void color()
    {
	this.simplify();
	this.spill();
	this.select();
    }

    public void affiche()
    {
	System.out.println("vertex\tcolor");
	for(int i = 0; i < vertexNb; i++){
	    System.out.println(i + "\t" + color[i]);
	}
    }
    
    

}
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ fibo fbegin #entree fonction
	fend
1	fend
main	fbegin	#entree fonction
	param 9
	param 3
	@7 = call fibo
	write @7	
	fend
Original line number Diff line number Diff line
@@ -18,16 +18,16 @@ ERR_LEX_CODE = 6
SC_COEFF = 4
SA_DIFF_COEFF = 0
TS_DIFF_COEFF = 0
SA_COEFF = 3
SA_COEFF = 4
C3A_DIFF_COEFF = 0
C3A_COEFF = 3
C3A_COEFF = 4
PRE_NASM_DIFF = 0
PRE_NASM_COEFF = 3
NASM_DIFF_COEFF = 0
NASM_COEFF = 3
EXE_COEFF = 0
ERR_TS_COEFF = 2
ERR_TYPE_COEFF = 2
ERR_TYPE_COEFF = 0

# Paths relative to this file (evaluate.py)
inputPath = "./input/"
Original line number Diff line number Diff line
@@ -10,5 +10,5 @@ entier fibo( entier n )

main()
{
  ecrire( fibo( 9 ) );
  ecrire( fibo( 3 ) );
}
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ main : push ebp ;sauvegarde la valeur de ebp
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	0	;allocation des variables locales
	push	9	;Param
	push	3	;Param
	sub	esp,	4	;allocation mémoire pour la valeur de retour
	call	fibo
	pop	eax	;récupération de la valeur de retour
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ main : push ebp ;sauvegarde la valeur de ebp
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	0	;allocation des variables locales
	push	9	;Param
	push	3	;Param
	sub	esp,	4	;allocation mémoire pour la valeur de retour
	call	fibo
	pop	@7	;récupération de la valeur de retour
Original line number Diff line number Diff line
(SaProg null (SaLDecFonc (SaDecFonc fibo entier (SaLDecVar (SaDecVarSimple n entier) null) null (SaInstBloc (SaLInst (SaInstSi (SaExpInf (SaExpVar (SaVarSimple n)) 2) (SaInstBloc (SaLInst (SaInstRetour 1) null)) (SaInstBloc (SaLInst (SaInstRetour (SaExpAdd (SaExpAppel (SaAppel fibo (SaLExp (SaExpSub (SaExpVar (SaVarSimple n)) 1) null))) (SaExpAppel (SaAppel fibo (SaLExp (SaExpSub (SaExpVar (SaVarSimple n)) 2) null))))) null))) null))) (SaLDecFonc (SaDecFonc main nul null null (SaInstBloc (SaLInst (SaInstEcriture (SaExpAppel (SaAppel fibo (SaLExp 9 null)))) null))) null)))
(SaProg null (SaLDecFonc (SaDecFonc fibo entier (SaLDecVar (SaDecVarSimple n entier) null) null (SaInstBloc (SaLInst (SaInstSi (SaExpInf (SaExpVar (SaVarSimple n)) 2) (SaInstBloc (SaLInst (SaInstRetour 1) null)) (SaInstBloc (SaLInst (SaInstRetour (SaExpAdd (SaExpAppel (SaAppel fibo (SaLExp (SaExpSub (SaExpVar (SaVarSimple n)) 1) null))) (SaExpAppel (SaAppel fibo (SaLExp (SaExpSub (SaExpVar (SaVarSimple n)) 2) null))))) null))) null))) (SaLDecFonc (SaDecFonc main nul null null (SaInstBloc (SaLInst (SaInstEcriture (SaExpAppel (SaAppel fibo (SaLExp 3 null)))) null))) null)))
+8 −0
Original line number Diff line number Diff line
	@0 = call main
	stop @0
main	fbegin	#entree fonction
	a = 4
	@1 = a + 1
	a = @1
	write a	
	fend
+8 −0
Original line number Diff line number Diff line
	@0 = call main
	stop @0
main	fbegin	#entree fonction
	a = 4
	@1 = a + 1
	a = @1
	write a	
	fend
+8 −0
Original line number Diff line number Diff line
	@0 = call main
	stop @0
main	fbegin	#entree fonction
	t[1] = 100
	@1 = t[1] + 10
	t[1] = @1
	write t[1]	
	fend
+10 −0
Original line number Diff line number Diff line
	@0 = call main
	stop @0
main	fbegin	#entree fonction
	a = 4
	@1 = 12 * 2
	@2 = a + @1
	@3 = a + @2
	a = @3
	write a	
	fend
+11 −0
Original line number Diff line number Diff line
	@0 = call main
	stop @0
main	fbegin	#entree fonction
	t[1] = 2
	t[2] = 3
	t[3] = 1
	@1 = t[1] * t[2]
	@2 = t[3] + @1
	t[3] = @2
	write t[3]	
	fend
+8 −0
Original line number Diff line number Diff line
	@0 = call main
	stop @0
main	fbegin	#entree fonction
	@1 = 5 / 3
	@2 = 3 * @1
	@3 = 5 - @2
	write @3	
	fend
+9 −0
Original line number Diff line number Diff line
	@0 = call main
	stop @0
main	fbegin	#entree fonction
	@1 = 12 / 7
	@2 = 7 * @1
	@3 = 12 - @2
	@4 = @3 + 5
	write @4	
	fend
+10 −0
Original line number Diff line number Diff line
	@0 = call main
	stop @0
main	fbegin	#entree fonction
	@1 = 2 * 7
	@2 = @1 / 5
	@3 = 5 * @2
	@4 = @1 - @3
	@5 = @4 + 5
	write @5	
	fend
+10 −0
Original line number Diff line number Diff line
	@0 = call main
	stop @0
main	fbegin	#entree fonction
	a = 12
	b = 5
	@1 = a / b
	@2 = b * @1
	@3 = a - @2
	write @3	
	fend
+11 −0
Original line number Diff line number Diff line
	@0 = call main
	stop @0
main	fbegin	#entree fonction
	t[0] = 3164
	t[1] = 152
	@1 = t[0] / t[1]
	@2 = t[1] * @1
	@3 = t[0] - @2
	t[2] = @3
	write t[2]	
	fend

test2024/evaluate.py

0 → 100755
+473 −0
Original line number Diff line number Diff line
#! /usr/bin/python3 -u

import sys
import os
import subprocess
import inspect
import argparse

# code de sortie du compilateur

NOERROR_CODE = 0
ERR_TYPE_CODE = 3
ERR_SYMBOL_TABLE_CODE = 4
ERR_SYNTAX_CODE = 5
ERR_LEX_CODE = 6

# coefficients pour le calcul de la note finale
SC_COEFF = 4
SA_DIFF_COEFF = 0
TS_DIFF_COEFF = 0
SA_COEFF = 4
C3A_DIFF_COEFF = 0
C3A_COEFF = 4
PRE_NASM_DIFF = 0
PRE_NASM_COEFF = 4
NASM_DIFF_COEFF = 0
NASM_COEFF = 4
EXE_COEFF = 0
ERR_TS_COEFF = 0
ERR_TYPE_COEFF = 0

# Paths relative to this file (evaluate.py)
inputPath = "./input/"
errInputPathTs = "./input_err_ts/"
errInputPathType = "./input_err_type/"
refPath = "./"
srcPath = "../src/"
# Keep empty
classpath = ""
# Outputs files (don't change this, it's set in the main)
outErr = sys.stderr
outScore = sys.stdout
outVerbose = open(os.devnull,"w")
outputFilename = "result.txt"

################################################################################
def compileCompiler() :
  global classpath
  for file in ["Compiler.java", "SaVM.java", "C3aVM.java", "NasmVM.java"] :
    if not os.path.isfile(srcPath+file) :
      print("Skipping compilation of %s"%file, file=outVerbose)
      continue
    package = file.lower().split('.')[0].replace('vm', '')
    if package in ["c3a", "nasm"] and not os.path.isdir(srcPath+package) :
      print("Skipping compilation of %s"%file, file=outVerbose)
      continue
    print("Compiling %s..."%file, end="", file=outVerbose)
    proc = subprocess.Popen("cd %s && javac %s %s %s"%(srcPath, "-cp " if len(classpath) > 0 else "", classpath, file), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    errMess = proc.stderr.read().decode('utf8')
    returnCode = proc.wait()
    if returnCode == 0 :
      print("Done", file=outVerbose)
    else :
      print("", file=outVerbose)
      print("ERROR !", file=outErr)
      print(errMess, file=outErr)
      exit(1)
    print("", file=outVerbose)
    classpath = "../xerces-2_12_1/*:%s"%srcPath
  classpath = ""
################################################################################

################################################################################
def deleteClasses() :

  for root, subdirs, files in os.walk("%s.."%srcPath) :
    if ".git" in root :
      continue
    for filename in files :
      if os.path.splitext(filename)[1] == ".class" :
        os.remove(root+"/"+filename)
        
  return classpath
################################################################################

################################################################################
def findClasspath() :
  global classpath

  if len(classpath) > 0 :
    return classpath

  for root, subdirs, files in os.walk("%s.."%srcPath) :
    if ".git" in root :
      continue
    for filename in files :
      if os.path.splitext(filename)[1] in [".class", ".jar"] :
        classpath += ("" if len(classpath) == 0 else ":") + root
        break

  classpath += ("" if len(classpath) == 0 else ":")+"../xerces-2_12_1/*"
  return classpath
################################################################################

################################################################################
def compiler(verbose="-v 2") :
  return "java -classpath %s Compiler %s"%(findClasspath(), verbose)
################################################################################

################################################################################
def green(string) :
  return "\033[92m%s\033[0m"%string
################################################################################

################################################################################
def purple(string) :
  return "\033[95m%s\033[0m"%string
################################################################################

################################################################################
def red(string) :
  return "\033[91m%s\033[0m"%string
################################################################################

################################################################################
def changeExtension(filename, newExtension) :
  return os.path.splitext(filename)[0] + newExtension
################################################################################

################################################################################
def findInputFiles(path) :
  inputFiles = []
  for filename in os.listdir(path) :
    if os.path.splitext(filename)[1] == ".l" :
      inputFiles.append(filename)
  inputFiles.sort()
  return inputFiles
################################################################################

################################################################################
def deleteCompilationOutputs() :
  outputExtensions = [".exe", ".exeout", ".o", ".out", ".sa", ".saout", ".sc", ".ts", ".nasm", ".nasmout", ".pre-nasm", ".pre-nasmout", ".c3a", ".c3aout", ".fg", ".fgs", ".ig"]
  for filename in os.listdir(inputPath) :
    if os.path.splitext(filename)[1] in outputExtensions :
      os.remove(inputPath+filename)
################################################################################

################################################################################
def compileInputFiles(inputFiles) :
  evaluation = getNewEvaluationResult(ERR_SYNTAX_CODE)
  for inputFile in inputFiles :
    lightFilename = inputFile.split("/")[-1]
    print("Compiling %s..."%inputFile, file=outVerbose, flush=True, end='')
    returnCode = subprocess.Popen("{} {}{}".format(compiler(), inputPath, inputFile), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).wait()
    if returnCode == NOERROR_CODE :
      evaluation[1]["correct"].append(lightFilename)
      print("Done", file=outVerbose)
    else :
      evaluation[1]["incorrect"].append(lightFilename)
      print("ERROR !", file=outErr)
  print("", file=outVerbose)
  return evaluation
################################################################################

################################################################################
def getNewEvaluationResult(name) :
  return [name, {"correct" : [], "incorrect" : [], "notfound" : []}]
################################################################################

################################################################################
def evaluateCompilationErrors(inputFiles, expectedCode, name) :
  evaluation = getNewEvaluationResult(name)

  print(file=outVerbose)

  for inputFile in inputFiles :
    if not os.path.isfile(inputFile) :
      print("ERROR : could not find '%s'"%inputFile, file=outErr)
      exit(1)
    lightFilename = inputFile.split("/")[-1]
    print("Compiling %s..."%lightFilename, end="", file=outVerbose)
    returnCode = subprocess.Popen("{} {}".format(compiler(verbose=""), inputFile), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).wait()
    print("Done (%d)"%returnCode, file=outVerbose)
    if returnCode == expectedCode :
      evaluation[1]["correct"].append(lightFilename)
    else :
      evaluation[1]["incorrect"].append(lightFilename)
  print("", file=outVerbose)

  return evaluation
################################################################################

################################################################################
def evaluateDiff(inputFiles, extension, extensionRef, path, name) :
  evaluation = getNewEvaluationResult(name)

  for filename in inputFiles :
    producedFile = changeExtension(filename, extension)
    if not os.path.isfile(inputPath+producedFile) :
      evaluation[1]["notfound"].append(producedFile)
      continue
    
    ref = refPath+path+changeExtension(producedFile, extensionRef)
    if not os.path.isfile(ref) :
      print("ATTENTION : Fichier non trouvé : %s"%ref, file=sys.stderr)
      continue

    refContent = []
    for line in open(ref, "r") :
      line = line.strip()
      if len(line) > 0 :
        refContent.append(line)
    producedContent = []
    for line in open(inputPath+producedFile, "r") :
      line = line.strip()
      if len(line) > 0 :
        producedContent.append(line)

    if producedContent == refContent :
      evaluation[1]["correct"].append(producedFile)
    else :
      evaluation[1]["incorrect"].append(producedFile)

  return evaluation
################################################################################

################################################################################
def evaluateSa(inputFiles) :
  errs = []
  for filename in inputFiles :
    saFilename = inputPath+changeExtension(filename, ".sa")
    outFilename = inputPath+changeExtension(filename, ".saout")
    if not os.path.isfile(saFilename) :
      continue

    command = "java -classpath %s SaVM -sa %s > %s"%(findClasspath(), saFilename, outFilename)
    out = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stderr.read().decode()
    if len(out) != 0 :
      errs.append("ERROR %s for input %s : '%s'"%(inspect.stack()[0][3], filename, out))

  return evaluateDiff(inputFiles, ".saout", ".out", "out-ref/", "Execution de sa"), errs
################################################################################

################################################################################
def evaluateC3a(inputFiles) :
  errs = []
  for filename in inputFiles :
    c3aFilename = inputPath+changeExtension(filename, ".c3a")
    tsFilename = inputPath+changeExtension(filename, ".ts")
    outFilename = inputPath+changeExtension(filename, ".c3aout")
    if not os.path.isfile(c3aFilename) or not os.path.isfile(tsFilename) :
      continue

    command = "java -classpath %s C3aVM -c3a %s -ts %s > %s"%(findClasspath(), c3aFilename, tsFilename, outFilename)
    out = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stderr.read().decode()
    if len(out) != 0 :
      errs.append("ERROR %s for input %s : '%s'"%(inspect.stack()[0][3], filename, out))

  return evaluateDiff(inputFiles, ".c3aout", ".out", "out-ref/", "Execution du c3a"), errs
################################################################################

################################################################################
def evaluatePreNasm(inputFiles) :
  errs = []
  for filename in inputFiles :
    nasmFilename = inputPath+changeExtension(filename, ".pre-nasm")
    outFilename = inputPath+changeExtension(filename, ".pre-nasmout")
    if not os.path.isfile(nasmFilename) :
      continue

    command = "java -classpath %s NasmVM -nasm %s > %s"%(findClasspath(), nasmFilename, outFilename)
    out = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stderr.read().decode()
    if len(out) != 0 :
      errs.append("ERROR %s for input %s : '%s'"%(inspect.stack()[0][3], filename, out))

  return evaluateDiff(inputFiles, ".pre-nasmout", ".out", "out-ref/", "Execution du pre-nasm"), errs
################################################################################

################################################################################
def evaluateNasm(inputFiles) :
  errs = []
  for filename in inputFiles :
    nasmFilename = inputPath+changeExtension(filename, ".nasm")
    outFilename = inputPath+changeExtension(filename, ".nasmout")
    if not os.path.isfile(nasmFilename) :
      continue

    command = "java -classpath %s NasmVM -nasm %s > %s"%(findClasspath(), nasmFilename, outFilename)
    out = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stderr.read().decode()
    if len(out) != 0 :
      errs.append("ERROR %s for input %s : '%s'"%(inspect.stack()[0][3], filename, out))

  return evaluateDiff(inputFiles, ".nasmout", ".out", "out-ref/", "Execution du nasm"), errs
################################################################################

################################################################################
def evaluateExecutable(inputFiles) :
  errs = []
  for filename in inputFiles :
    nasmFilename = changeExtension(filename, ".nasm")
    objectFilename = changeExtension(filename, ".o")
    execFilename = changeExtension(filename, ".exe")
    outFilename = changeExtension(filename, ".exeout")
    if not os.path.isfile(inputPath+nasmFilename) :
      continue

    out = subprocess.Popen("cd {} && nasm -f elf -dwarf -g {}".format(inputPath+"..","input/"+nasmFilename), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stderr.read()
    if not os.path.isfile(inputPath+objectFilename) :
      errs.append("ERROR %s for input %s : '%s'"%(inspect.stack()[0][3], filename, out))
      continue
    out = subprocess.Popen("ld -m elf_i386 -o {}{} {}{}".format(inputPath,execFilename,inputPath,objectFilename), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stderr.read()
    if not os.path.isfile(inputPath+execFilename) :
      errs.append("ERROR %s for input %s : '%s'"%(inspect.stack()[0][3], filename, out))
      continue
    out = subprocess.Popen("{}{} > {}{}".format(inputPath,execFilename,inputPath,outFilename), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stderr.read()
    if not os.path.isfile(inputPath+outFilename) :
      errs.append("ERROR %s for input %s : '%s'"%(inspect.stack()[0][3], filename, out))
      continue

  return evaluateDiff(inputFiles, ".exeout", ".out", "out-ref/", "Execution du binaire"), errs
################################################################################

################################################################################
def printListElements(destination, elements, colorFunction, useColor, resultStr) :
  if len(elements) == 0 :
    return
  maxColumnSize = len(max(elements, key=len))
  for filename in elements :
    if useColor :
      print("\t{}".format(colorFunction(filename)), file=destination)
    else :
      print("\t{:{}} {}".format(filename, maxColumnSize+2, resultStr), file=destination)
################################################################################

################################################################################
def printEvaluationResult(destination, evaluationResult, useColor) :
  name = evaluationResult[0]
  correct = evaluationResult[1]["correct"]
  incorrect = evaluationResult[1]["incorrect"]
  notfound = evaluationResult[1]["notfound"]

  nbCorrect = len(correct)
  nbTotal = len(correct) + len(incorrect) + len(notfound)

  score = 0.0
  if nbTotal > 0 :
    score = 100.0*nbCorrect/nbTotal
  for dest, color in [(destination, useColor), (open(outputFilename, "a"), False)] :
    print("Évaluation de %s :"%name, file=dest)
    print("{}/{} correct ({:6.2f}%)".format(nbCorrect, nbTotal, score), file=dest)
    if nbCorrect+len(incorrect) > 0 :
      printListElements(dest, correct, green, color, "CORRECT")
      printListElements(dest, incorrect, purple, color, "INCORRECT")
      printListElements(dest, notfound, red, color, "NON-EXISTANT")
  return score
################################################################################

################################################################################
if __name__ == "__main__" :
  parser = argparse.ArgumentParser()
  parser.add_argument("--verbose", "-v", default=False, action="store_true",
    help="Verbose output (obsolete, verbose is default).")
  parser.add_argument("--silent", "-s", default=False, action="store_true",
    help="Less verbose output.")
  parser.add_argument("--noColors", default=False, action="store_true",
    help="Disable colors in output.")
  parser.add_argument("--clean", "-c", default=False, action="store_true",
    help="Clean input dir then exit.")
  parser.add_argument("--number", "-n", default=None, type=int,
    help="Restrict tests to n inputs.")
  parser.add_argument("--files", "-f", default=[], nargs="*",
    help="Specify input files.")
  args = parser.parse_args()

  args.verbose = not args.silent

  if args.verbose :
    outVerbose = outScore
  if args.clean :
      deleteCompilationOutputs()
      exit(0)

  with open(outputFilename, "w") as _ :
    pass

  inputFiles = args.files[:args.number]
  if len(inputFiles) == 0 :
    inputFiles = findInputFiles(inputPath)[:args.number]

  errInputFilesTs = [errInputPathTs+"/"+f for f in findInputFiles(errInputPathTs)[:args.number]]
  errInputFilesType = [errInputPathType+"/"+f for f in findInputFiles(errInputPathType)[:args.number]]

  deleteCompilationOutputs()

  compileCompiler()


  scores = []
  names = []
  errors = []
  names.append("SC           ")
  res = compileInputFiles(inputFiles)
  scores.append(printEvaluationResult(outVerbose, res, not args.noColors))
  msg = "Diff de %s"
  dfSa = lambda files : (evaluateDiff(inputFiles, ".sa", ".sa", "sa-ref/", msg%"sa"), [])
  dfTs = lambda files : (evaluateDiff(inputFiles, ".ts", ".ts", "ts-ref/", msg%"ts"), [])
  dfC3a = lambda files : (evaluateDiff(inputFiles, ".c3a", ".c3a", "c3a-ref/", msg%"c3a"), [])
  dfPreNasm = lambda files : (evaluateDiff(inputFiles, ".pre-nasm", ".pre-nasm", "pre-nasm-ref/", msg%"pre-nasm"), [])
  dfNasm = lambda files : (evaluateDiff(inputFiles, ".nasm", ".nasm", "nasm-ref/", msg%"nasm"), [])

  # Evaluation of normal (working) examples
  for evalTarget in [ 
                     ("SA-DIFF      ", dfSa),
                     ("TS-DIFF      ", dfTs),
                     ("SA           ", evaluateSa),
                     ("C3A-DIFF     ", dfC3a),
                     ("C3A          ", evaluateC3a),
                     ("PRE-NASM-DIFF", dfPreNasm),
                     ("PRE-NASM     ", evaluatePreNasm),
                     ("NASM-DIFF    ", dfNasm),
                     ("NASM         ", evaluateNasm),
                     ("EXE          ", evaluateExecutable),
                    ] :
    names.append(evalTarget[0])
    res, err = evalTarget[1](inputFiles)
    scores.append(printEvaluationResult(outVerbose, res, not args.noColors))
    errors += err

  # Evaluation of ill formed examples, that should trigger a compilation error
  for evalTarget in [
                     ("ERR_TS       ", evaluateCompilationErrors, errInputFilesTs, ERR_SYMBOL_TABLE_CODE),
                     ("ERR_TYPE     ", evaluateCompilationErrors, errInputFilesType, ERR_TYPE_CODE),
                    ] :
    names.append(evalTarget[0])
    res = evalTarget[1](evalTarget[2], evalTarget[3], evalTarget[0])
    scores.append(printEvaluationResult(outVerbose, res, not args.noColors))

  deleteClasses()

  # The rest of the script will now print the results

  if not args.noColors :
    print("Légende : {}  {}  {}".format(green("CORRECT"), purple("INCORRECT"), red("NON-EXISTANT")), file=outVerbose)

  errorsStr = ""

  if len(errors) > 0 :
    errorsStr = "%s\n%s"%((30*"-")+("EVALUATION ERRORS")+(30*"-"), "\n\n".join(errors))

  print(errorsStr)
  print(errorsStr, file=open(outputFilename, "a"))

  for i in range(len(scores)):
    print(names[i], "\t", scores[i])
  
  print("Copy-pastable scores :", file=outScore)
  print("\t".join(names), file=outScore)
  print("\t".join(["%6.2f"%scores[i] for i in range(len(scores))]), file=outScore)

  print("\nSauvegardé dans le fichier %s"%outputFilename)

# les coefficients associés à chaque partie pour le calcul de la note finale
  coeffs = [SC_COEFF, SA_DIFF_COEFF, TS_DIFF_COEFF, SA_COEFF, C3A_DIFF_COEFF, C3A_COEFF, PRE_NASM_DIFF, PRE_NASM_COEFF, NASM_DIFF_COEFF, NASM_COEFF, EXE_COEFF, ERR_TS_COEFF, ERR_TYPE_COEFF]

# calcul de la note finale

  note = 0
  for i in range(len(scores)):
    note += scores[i] / 100 * coeffs[i]
  print ("note = ",  note)

################################################################################
+26 −0
Original line number Diff line number Diff line
0 : ( 1 )		sub	esp,	4	;allocation mémoire pour la valeur de retour
1 : ( 2 )		call	main
2 : ( 3 )		pop	@0	;récupération de la valeur de retour
3 : ( 4 )		mov	ebx,	0	; valeur de retour du programme
4 : ( 5 )		mov	eax,	1	; code de sortie
5 : ( 6 )		int 0x80
6 : ( 7 )	main :	push	ebp	;sauvegarde la valeur de ebp
7 : ( 8 )		mov	ebp,	esp	;nouvelle valeur de ebp
8 : ( 9 )		push	eax	;sauvegarde de eax
9 : ( 10 )		push	ebx	;sauvegarde de ebx
10 : ( 11 )		push	ecx	;sauvegarde de ecx
11 : ( 12 )		push	edx	;sauvegarde de edx
12 : ( 13 )		sub	esp,	0	;allocation des variables locales
13 : ( 14 )		mov	dword [a],	4	;Affect
14 : ( 15 )		mov	@1,	dword [a]
15 : ( 16 )		add	@1,	1
16 : ( 17 )		mov	dword [a],	@1	;Affect
17 : ( 18 )		mov	eax,	dword [a]	;Write 1
18 : ( 19 )		call	iprintLF	;Write 2
19 : ( 20 )		add	esp,	0	;désallocation des variables locales
20 : ( 21 )		pop	edx	;restaure edx
21 : ( 22 )		pop	ecx	;restaure ecx
22 : ( 23 )		pop	ebx	;restaure ebx
23 : ( 24 )		pop	eax	;restaure eax
24 : ( 25 )		pop	ebp	;restaure la valeur de ebp
25 : ( )		ret
+26 −0
Original line number Diff line number Diff line
0 : ( 1 )		sub	esp,	4	;allocation mémoire pour la valeur de retour
1 : ( 2 )		call	main
2 : ( 3 )		pop	@0	;récupération de la valeur de retour
3 : ( 4 )		mov	ebx,	0	; valeur de retour du programme
4 : ( 5 )		mov	eax,	1	; code de sortie
5 : ( 6 )		int 0x80
6 : ( 7 )	main :	push	ebp	;sauvegarde la valeur de ebp
7 : ( 8 )		mov	ebp,	esp	;nouvelle valeur de ebp
8 : ( 9 )		push	eax	;sauvegarde de eax
9 : ( 10 )		push	ebx	;sauvegarde de ebx
10 : ( 11 )		push	ecx	;sauvegarde de ecx
11 : ( 12 )		push	edx	;sauvegarde de edx
12 : ( 13 )		sub	esp,	4	;allocation des variables locales
13 : ( 14 )		mov	dword [ebp-4],	4	;Affect
14 : ( 15 )		mov	@1,	dword [ebp-4]
15 : ( 16 )		add	@1,	1
16 : ( 17 )		mov	dword [ebp-4],	@1	;Affect
17 : ( 18 )		mov	eax,	dword [ebp-4]	;Write 1
18 : ( 19 )		call	iprintLF	;Write 2
19 : ( 20 )		add	esp,	4	;désallocation des variables locales
20 : ( 21 )		pop	edx	;restaure edx
21 : ( 22 )		pop	ecx	;restaure ecx
22 : ( 23 )		pop	ebx	;restaure ebx
23 : ( 24 )		pop	eax	;restaure eax
24 : ( 25 )		pop	ebp	;restaure la valeur de ebp
25 : ( )		ret
+34 −0
Original line number Diff line number Diff line
0 : ( 1 )		sub	esp,	4	;allocation mémoire pour la valeur de retour
1 : ( 2 )		call	main
2 : ( 3 )		pop	@0	;récupération de la valeur de retour
3 : ( 4 )		mov	ebx,	0	; valeur de retour du programme
4 : ( 5 )		mov	eax,	1	; code de sortie
5 : ( 6 )		int 0x80
6 : ( 7 )	main :	push	ebp	;sauvegarde la valeur de ebp
7 : ( 8 )		mov	ebp,	esp	;nouvelle valeur de ebp
8 : ( 9 )		push	eax	;sauvegarde de eax
9 : ( 10 )		push	ebx	;sauvegarde de ebx
10 : ( 11 )		push	ecx	;sauvegarde de ecx
11 : ( 12 )		push	edx	;sauvegarde de edx
12 : ( 13 )		sub	esp,	0	;allocation des variables locales
13 : ( 14 )		mov	@8,	1
14 : ( 15 )		imul	@8,	4
15 : ( 16 )		mov	dword [t+@8],	100	;Affect
16 : ( 17 )		mov	@9,	1
17 : ( 18 )		imul	@9,	4
18 : ( 19 )		mov	@1,	dword [t+@9]
19 : ( 20 )		add	@1,	10
20 : ( 21 )		mov	@10,	1
21 : ( 22 )		imul	@10,	4
22 : ( 23 )		mov	dword [t+@10],	@1	;Affect
23 : ( 24 )		mov	@12,	1
24 : ( 25 )		imul	@12,	4
25 : ( 26 )		mov	eax,	dword [t+@12]	;Write 1
26 : ( 27 )		call	iprintLF	;Write 2
27 : ( 28 )		add	esp,	0	;désallocation des variables locales
28 : ( 29 )		pop	edx	;restaure edx
29 : ( 30 )		pop	ecx	;restaure ecx
30 : ( 31 )		pop	ebx	;restaure ebx
31 : ( 32 )		pop	eax	;restaure eax
32 : ( 33 )		pop	ebp	;restaure la valeur de ebp
33 : ( )		ret
+30 −0
Original line number Diff line number Diff line
0 : ( 1 )		sub	esp,	4	;allocation mémoire pour la valeur de retour
1 : ( 2 )		call	main
2 : ( 3 )		pop	@0	;récupération de la valeur de retour
3 : ( 4 )		mov	ebx,	0	; valeur de retour du programme
4 : ( 5 )		mov	eax,	1	; code de sortie
5 : ( 6 )		int 0x80
6 : ( 7 )	main :	push	ebp	;sauvegarde la valeur de ebp
7 : ( 8 )		mov	ebp,	esp	;nouvelle valeur de ebp
8 : ( 9 )		push	eax	;sauvegarde de eax
9 : ( 10 )		push	ebx	;sauvegarde de ebx
10 : ( 11 )		push	ecx	;sauvegarde de ecx
11 : ( 12 )		push	edx	;sauvegarde de edx
12 : ( 13 )		sub	esp,	0	;allocation des variables locales
13 : ( 14 )		mov	dword [a],	4	;Affect
14 : ( 15 )		mov	@1,	12
15 : ( 16 )		imul	@1,	2
16 : ( 17 )		mov	@2,	dword [a]
17 : ( 18 )		add	@2,	@1
18 : ( 19 )		mov	@3,	dword [a]
19 : ( 20 )		add	@3,	@2
20 : ( 21 )		mov	dword [a],	@3	;Affect
21 : ( 22 )		mov	eax,	dword [a]	;Write 1
22 : ( 23 )		call	iprintLF	;Write 2
23 : ( 24 )		add	esp,	0	;désallocation des variables locales
24 : ( 25 )		pop	edx	;restaure edx
25 : ( 26 )		pop	ecx	;restaure ecx
26 : ( 27 )		pop	ebx	;restaure ebx
27 : ( 28 )		pop	eax	;restaure eax
28 : ( 29 )		pop	ebp	;restaure la valeur de ebp
29 : ( )		ret
+46 −0
Original line number Diff line number Diff line
0 : ( 1 )		sub	esp,	4	;allocation mémoire pour la valeur de retour
1 : ( 2 )		call	main
2 : ( 3 )		pop	@0	;récupération de la valeur de retour
3 : ( 4 )		mov	ebx,	0	; valeur de retour du programme
4 : ( 5 )		mov	eax,	1	; code de sortie
5 : ( 6 )		int 0x80
6 : ( 7 )	main :	push	ebp	;sauvegarde la valeur de ebp
7 : ( 8 )		mov	ebp,	esp	;nouvelle valeur de ebp
8 : ( 9 )		push	eax	;sauvegarde de eax
9 : ( 10 )		push	ebx	;sauvegarde de ebx
10 : ( 11 )		push	ecx	;sauvegarde de ecx
11 : ( 12 )		push	edx	;sauvegarde de edx
12 : ( 13 )		sub	esp,	0	;allocation des variables locales
13 : ( 14 )		mov	@9,	1
14 : ( 15 )		imul	@9,	4
15 : ( 16 )		mov	dword [t+@9],	2	;Affect
16 : ( 17 )		mov	@10,	2
17 : ( 18 )		imul	@10,	4
18 : ( 19 )		mov	dword [t+@10],	3	;Affect
19 : ( 20 )		mov	@11,	3
20 : ( 21 )		imul	@11,	4
21 : ( 22 )		mov	dword [t+@11],	1	;Affect
22 : ( 23 )		mov	@12,	1
23 : ( 24 )		imul	@12,	4
24 : ( 25 )		mov	@1,	dword [t+@12]
25 : ( 26 )		mov	@13,	2
26 : ( 27 )		imul	@13,	4
27 : ( 28 )		imul	@1,	dword [t+@13]
28 : ( 29 )		mov	@14,	3
29 : ( 30 )		imul	@14,	4
30 : ( 31 )		mov	@2,	dword [t+@14]
31 : ( 32 )		add	@2,	@1
32 : ( 33 )		mov	@15,	3
33 : ( 34 )		imul	@15,	4
34 : ( 35 )		mov	dword [t+@15],	@2	;Affect
35 : ( 36 )		mov	@17,	3
36 : ( 37 )		imul	@17,	4
37 : ( 38 )		mov	eax,	dword [t+@17]	;Write 1
38 : ( 39 )		call	iprintLF	;Write 2
39 : ( 40 )		add	esp,	0	;désallocation des variables locales
40 : ( 41 )		pop	edx	;restaure edx
41 : ( 42 )		pop	ecx	;restaure ecx
42 : ( 43 )		pop	ebx	;restaure ebx
43 : ( 44 )		pop	eax	;restaure eax
44 : ( 45 )		pop	ebp	;restaure la valeur de ebp
45 : ( )		ret
+32 −0
Original line number Diff line number Diff line
0 : ( 1 )		sub	esp,	4	;allocation mémoire pour la valeur de retour
1 : ( 2 )		call	main
2 : ( 3 )		pop	@0	;récupération de la valeur de retour
3 : ( 4 )		mov	ebx,	0	; valeur de retour du programme
4 : ( 5 )		mov	eax,	1	; code de sortie
5 : ( 6 )		int 0x80
6 : ( 7 )	main :	push	ebp	;sauvegarde la valeur de ebp
7 : ( 8 )		mov	ebp,	esp	;nouvelle valeur de ebp
8 : ( 9 )		push	eax	;sauvegarde de eax
9 : ( 10 )		push	ebx	;sauvegarde de ebx
10 : ( 11 )		push	ecx	;sauvegarde de ecx
11 : ( 12 )		push	edx	;sauvegarde de edx
12 : ( 13 )		sub	esp,	0	;allocation des variables locales
13 : ( 14 )		mov	edx,	0	;mise à 0 des bits de poids fort du dividende
14 : ( 15 )		mov	eax,	5	;affectation des bits de poids faible du dividende
15 : ( 16 )		mov	@12,	3
16 : ( 17 )		idiv	@12
17 : ( 18 )		mov	edx,	edx	;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée
18 : ( 19 )		mov	@1,	eax
19 : ( 20 )		mov	@2,	3
20 : ( 21 )		imul	@2,	@1
21 : ( 22 )		mov	@3,	5
22 : ( 23 )		sub	@3,	@2
23 : ( 24 )		mov	eax,	@3	;Write 1
24 : ( 25 )		call	iprintLF	;Write 2
25 : ( 26 )		add	esp,	0	;désallocation des variables locales
26 : ( 27 )		pop	edx	;restaure edx
27 : ( 28 )		pop	ecx	;restaure ecx
28 : ( 29 )		pop	ebx	;restaure ebx
29 : ( 30 )		pop	eax	;restaure eax
30 : ( 31 )		pop	ebp	;restaure la valeur de ebp
31 : ( )		ret
+34 −0
Original line number Diff line number Diff line
0 : ( 1 )		sub	esp,	4	;allocation mémoire pour la valeur de retour
1 : ( 2 )		call	main
2 : ( 3 )		pop	@0	;récupération de la valeur de retour
3 : ( 4 )		mov	ebx,	0	; valeur de retour du programme
4 : ( 5 )		mov	eax,	1	; code de sortie
5 : ( 6 )		int 0x80
6 : ( 7 )	main :	push	ebp	;sauvegarde la valeur de ebp
7 : ( 8 )		mov	ebp,	esp	;nouvelle valeur de ebp
8 : ( 9 )		push	eax	;sauvegarde de eax
9 : ( 10 )		push	ebx	;sauvegarde de ebx
10 : ( 11 )		push	ecx	;sauvegarde de ecx
11 : ( 12 )		push	edx	;sauvegarde de edx
12 : ( 13 )		sub	esp,	0	;allocation des variables locales
13 : ( 14 )		mov	edx,	0	;mise à 0 des bits de poids fort du dividende
14 : ( 15 )		mov	eax,	12	;affectation des bits de poids faible du dividende
15 : ( 16 )		mov	@13,	7
16 : ( 17 )		idiv	@13
17 : ( 18 )		mov	edx,	edx	;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée
18 : ( 19 )		mov	@1,	eax
19 : ( 20 )		mov	@2,	7
20 : ( 21 )		imul	@2,	@1
21 : ( 22 )		mov	@3,	12
22 : ( 23 )		sub	@3,	@2
23 : ( 24 )		mov	@4,	@3
24 : ( 25 )		add	@4,	5
25 : ( 26 )		mov	eax,	@4	;Write 1
26 : ( 27 )		call	iprintLF	;Write 2
27 : ( 28 )		add	esp,	0	;désallocation des variables locales
28 : ( 29 )		pop	edx	;restaure edx
29 : ( 30 )		pop	ecx	;restaure ecx
30 : ( 31 )		pop	ebx	;restaure ebx
31 : ( 32 )		pop	eax	;restaure eax
32 : ( 33 )		pop	ebp	;restaure la valeur de ebp
33 : ( )		ret
+36 −0
Original line number Diff line number Diff line
0 : ( 1 )		sub	esp,	4	;allocation mémoire pour la valeur de retour
1 : ( 2 )		call	main
2 : ( 3 )		pop	@0	;récupération de la valeur de retour
3 : ( 4 )		mov	ebx,	0	; valeur de retour du programme
4 : ( 5 )		mov	eax,	1	; code de sortie
5 : ( 6 )		int 0x80
6 : ( 7 )	main :	push	ebp	;sauvegarde la valeur de ebp
7 : ( 8 )		mov	ebp,	esp	;nouvelle valeur de ebp
8 : ( 9 )		push	eax	;sauvegarde de eax
9 : ( 10 )		push	ebx	;sauvegarde de ebx
10 : ( 11 )		push	ecx	;sauvegarde de ecx
11 : ( 12 )		push	edx	;sauvegarde de edx
12 : ( 13 )		sub	esp,	0	;allocation des variables locales
13 : ( 14 )		mov	@1,	2
14 : ( 15 )		imul	@1,	7
15 : ( 16 )		mov	edx,	0	;mise à 0 des bits de poids fort du dividende
16 : ( 17 )		mov	eax,	@1	;affectation des bits de poids faible du dividende
17 : ( 18 )		mov	@14,	5
18 : ( 19 )		idiv	@14
19 : ( 20 )		mov	edx,	edx	;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée
20 : ( 21 )		mov	@2,	eax
21 : ( 22 )		mov	@3,	5
22 : ( 23 )		imul	@3,	@2
23 : ( 24 )		mov	@4,	@1
24 : ( 25 )		sub	@4,	@3
25 : ( 26 )		mov	@5,	@4
26 : ( 27 )		add	@5,	5
27 : ( 28 )		mov	eax,	@5	;Write 1
28 : ( 29 )		call	iprintLF	;Write 2
29 : ( 30 )		add	esp,	0	;désallocation des variables locales
30 : ( 31 )		pop	edx	;restaure edx
31 : ( 32 )		pop	ecx	;restaure ecx
32 : ( 33 )		pop	ebx	;restaure ebx
33 : ( 34 )		pop	eax	;restaure eax
34 : ( 35 )		pop	ebp	;restaure la valeur de ebp
35 : ( )		ret
+33 −0
Original line number Diff line number Diff line
0 : ( 1 )		sub	esp,	4	;allocation mémoire pour la valeur de retour
1 : ( 2 )		call	main
2 : ( 3 )		pop	@0	;récupération de la valeur de retour
3 : ( 4 )		mov	ebx,	0	; valeur de retour du programme
4 : ( 5 )		mov	eax,	1	; code de sortie
5 : ( 6 )		int 0x80
6 : ( 7 )	main :	push	ebp	;sauvegarde la valeur de ebp
7 : ( 8 )		mov	ebp,	esp	;nouvelle valeur de ebp
8 : ( 9 )		push	eax	;sauvegarde de eax
9 : ( 10 )		push	ebx	;sauvegarde de ebx
10 : ( 11 )		push	ecx	;sauvegarde de ecx
11 : ( 12 )		push	edx	;sauvegarde de edx
12 : ( 13 )		sub	esp,	0	;allocation des variables locales
13 : ( 14 )		mov	dword [a],	12	;Affect
14 : ( 15 )		mov	dword [b],	5	;Affect
15 : ( 16 )		mov	edx,	0	;mise à 0 des bits de poids fort du dividende
16 : ( 17 )		mov	eax,	dword [a]	;affectation des bits de poids faible du dividende
17 : ( 18 )		idiv	dword [b]
18 : ( 19 )		mov	edx,	edx	;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée
19 : ( 20 )		mov	@1,	eax
20 : ( 21 )		mov	@2,	dword [b]
21 : ( 22 )		imul	@2,	@1
22 : ( 23 )		mov	@3,	dword [a]
23 : ( 24 )		sub	@3,	@2
24 : ( 25 )		mov	eax,	@3	;Write 1
25 : ( 26 )		call	iprintLF	;Write 2
26 : ( 27 )		add	esp,	0	;désallocation des variables locales
27 : ( 28 )		pop	edx	;restaure edx
28 : ( 29 )		pop	ecx	;restaure ecx
29 : ( 30 )		pop	ebx	;restaure ebx
30 : ( 31 )		pop	eax	;restaure eax
31 : ( 32 )		pop	ebp	;restaure la valeur de ebp
32 : ( )		ret
+50 −0
Original line number Diff line number Diff line
0 : ( 1 )		sub	esp,	4	;allocation mémoire pour la valeur de retour
1 : ( 2 )		call	main
2 : ( 3 )		pop	@0	;récupération de la valeur de retour
3 : ( 4 )		mov	ebx,	0	; valeur de retour du programme
4 : ( 5 )		mov	eax,	1	; code de sortie
5 : ( 6 )		int 0x80
6 : ( 7 )	main :	push	ebp	;sauvegarde la valeur de ebp
7 : ( 8 )		mov	ebp,	esp	;nouvelle valeur de ebp
8 : ( 9 )		push	eax	;sauvegarde de eax
9 : ( 10 )		push	ebx	;sauvegarde de ebx
10 : ( 11 )		push	ecx	;sauvegarde de ecx
11 : ( 12 )		push	edx	;sauvegarde de edx
12 : ( 13 )		sub	esp,	0	;allocation des variables locales
13 : ( 14 )		mov	@10,	0
14 : ( 15 )		imul	@10,	4
15 : ( 16 )		mov	dword [t+@10],	3164	;Affect
16 : ( 17 )		mov	@11,	1
17 : ( 18 )		imul	@11,	4
18 : ( 19 )		mov	dword [t+@11],	152	;Affect
19 : ( 20 )		mov	@12,	1
20 : ( 21 )		imul	@12,	4
21 : ( 22 )		mov	edx,	0	;mise à 0 des bits de poids fort du dividende
22 : ( 23 )		mov	@15,	0
23 : ( 24 )		imul	@15,	4
24 : ( 25 )		mov	eax,	dword [t+@15]	;affectation des bits de poids faible du dividende
25 : ( 26 )		idiv	dword [t+@12]
26 : ( 27 )		mov	edx,	edx	;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée
27 : ( 28 )		mov	@1,	eax
28 : ( 29 )		mov	@17,	1
29 : ( 30 )		imul	@17,	4
30 : ( 31 )		mov	@2,	dword [t+@17]
31 : ( 32 )		imul	@2,	@1
32 : ( 33 )		mov	@18,	0
33 : ( 34 )		imul	@18,	4
34 : ( 35 )		mov	@3,	dword [t+@18]
35 : ( 36 )		sub	@3,	@2
36 : ( 37 )		mov	@19,	2
37 : ( 38 )		imul	@19,	4
38 : ( 39 )		mov	dword [t+@19],	@3	;Affect
39 : ( 40 )		mov	@21,	2
40 : ( 41 )		imul	@21,	4
41 : ( 42 )		mov	eax,	dword [t+@21]	;Write 1
42 : ( 43 )		call	iprintLF	;Write 2
43 : ( 44 )		add	esp,	0	;désallocation des variables locales
44 : ( 45 )		pop	edx	;restaure edx
45 : ( 46 )		pop	ecx	;restaure ecx
46 : ( 47 )		pop	ebx	;restaure ebx
47 : ( 48 )		pop	eax	;restaure eax
48 : ( 49 )		pop	ebp	;restaure la valeur de ebp
49 : ( )		ret
+27 −0
Original line number Diff line number Diff line
iter num = 3
use = () def = ()	in = ()	 	out = ()	 		sub	esp,	4	;allocation mémoire pour la valeur de retour
use = () def = ()	in = ()	 	out = ()	 		call	main
use = () def = (0 )	in = ()	 	out = ()	 		pop	@0	;récupération de la valeur de retour
use = () def = (2 )	in = ()	 	out = ()	 		mov	ebx,	0	; valeur de retour du programme
use = () def = (3 )	in = ()	 	out = ()	 		mov	eax,	1	; code de sortie
use = () def = ()	in = ()	 	out = ()	 		int 0x80
use = () def = ()	in = ()	 	out = ()	 	main :	push	ebp	;sauvegarde la valeur de ebp
use = () def = ()	in = ()	 	out = ()	 		mov	ebp,	esp	;nouvelle valeur de ebp
use = () def = ()	in = ()	 	out = ()	 		push	eax	;sauvegarde de eax
use = () def = ()	in = ()	 	out = ()	 		push	ebx	;sauvegarde de ebx
use = () def = ()	in = ()	 	out = ()	 		push	ecx	;sauvegarde de ecx
use = () def = ()	in = ()	 	out = ()	 		push	edx	;sauvegarde de edx
use = () def = ()	in = ()	 	out = ()	 		sub	esp,	0	;allocation des variables locales
use = () def = ()	in = ()	 	out = ()	 		mov	dword [a],	4	;Affect
use = () def = (1 )	in = ()	 	out = (1 )	 		mov	@1,	dword [a]
use = (1 ) def = (1 )	in = (1 )	 	out = (1 )	 		add	@1,	1
use = (1 ) def = ()	in = (1 )	 	out = ()	 		mov	dword [a],	@1	;Affect
use = () def = (8 )	in = ()	 	out = ()	 		mov	eax,	dword [a]	;Write 1
use = () def = ()	in = ()	 	out = ()	 		call	iprintLF	;Write 2
use = () def = ()	in = ()	 	out = ()	 		add	esp,	0	;désallocation des variables locales
use = () def = (9 )	in = ()	 	out = ()	 		pop	edx	;restaure edx
use = () def = (10 )	in = ()	 	out = ()	 		pop	ecx	;restaure ecx
use = () def = (11 )	in = ()	 	out = ()	 		pop	ebx	;restaure ebx
use = () def = (12 )	in = ()	 	out = ()	 		pop	eax	;restaure eax
use = () def = ()	in = ()	 	out = ()	 		pop	ebp	;restaure la valeur de ebp
use = () def = ()	in = ()	 	out = ()	 		ret
+27 −0
Original line number Diff line number Diff line
iter num = 3
use = () def = ()	in = ()	 	out = ()	 		sub	esp,	4	;allocation mémoire pour la valeur de retour
use = () def = ()	in = ()	 	out = ()	 		call	main
use = () def = (0 )	in = ()	 	out = ()	 		pop	@0	;récupération de la valeur de retour
use = () def = (2 )	in = ()	 	out = ()	 		mov	ebx,	0	; valeur de retour du programme
use = () def = (3 )	in = ()	 	out = ()	 		mov	eax,	1	; code de sortie
use = () def = ()	in = ()	 	out = ()	 		int 0x80
use = () def = ()	in = ()	 	out = ()	 	main :	push	ebp	;sauvegarde la valeur de ebp
use = () def = ()	in = ()	 	out = ()	 		mov	ebp,	esp	;nouvelle valeur de ebp
use = () def = ()	in = ()	 	out = ()	 		push	eax	;sauvegarde de eax
use = () def = ()	in = ()	 	out = ()	 		push	ebx	;sauvegarde de ebx
use = () def = ()	in = ()	 	out = ()	 		push	ecx	;sauvegarde de ecx
use = () def = ()	in = ()	 	out = ()	 		push	edx	;sauvegarde de edx
use = () def = ()	in = ()	 	out = ()	 		sub	esp,	4	;allocation des variables locales
use = () def = ()	in = ()	 	out = ()	 		mov	dword [ebp-4],	4	;Affect
use = () def = (1 )	in = ()	 	out = (1 )	 		mov	@1,	dword [ebp-4]
use = (1 ) def = (1 )	in = (1 )	 	out = (1 )	 		add	@1,	1
use = (1 ) def = ()	in = (1 )	 	out = ()	 		mov	dword [ebp-4],	@1	;Affect
use = () def = (8 )	in = ()	 	out = ()	 		mov	eax,	dword [ebp-4]	;Write 1
use = () def = ()	in = ()	 	out = ()	 		call	iprintLF	;Write 2
use = () def = ()	in = ()	 	out = ()	 		add	esp,	4	;désallocation des variables locales
use = () def = (9 )	in = ()	 	out = ()	 		pop	edx	;restaure edx
use = () def = (10 )	in = ()	 	out = ()	 		pop	ecx	;restaure ecx
use = () def = (11 )	in = ()	 	out = ()	 		pop	ebx	;restaure ebx
use = () def = (12 )	in = ()	 	out = ()	 		pop	eax	;restaure eax
use = () def = ()	in = ()	 	out = ()	 		pop	ebp	;restaure la valeur de ebp
use = () def = ()	in = ()	 	out = ()	 		ret
+35 −0
Original line number Diff line number Diff line
iter num = 7
use = () def = ()	in = ()	 	out = ()	 		sub	esp,	4	;allocation mémoire pour la valeur de retour
use = () def = ()	in = ()	 	out = ()	 		call	main
use = () def = (0 )	in = ()	 	out = ()	 		pop	@0	;récupération de la valeur de retour
use = () def = (2 )	in = ()	 	out = ()	 		mov	ebx,	0	; valeur de retour du programme
use = () def = (3 )	in = ()	 	out = ()	 		mov	eax,	1	; code de sortie
use = () def = ()	in = ()	 	out = ()	 		int 0x80
use = () def = ()	in = ()	 	out = ()	 	main :	push	ebp	;sauvegarde la valeur de ebp
use = () def = ()	in = ()	 	out = ()	 		mov	ebp,	esp	;nouvelle valeur de ebp
use = () def = ()	in = ()	 	out = ()	 		push	eax	;sauvegarde de eax
use = () def = ()	in = ()	 	out = ()	 		push	ebx	;sauvegarde de ebx
use = () def = ()	in = ()	 	out = ()	 		push	ecx	;sauvegarde de ecx
use = () def = ()	in = ()	 	out = ()	 		push	edx	;sauvegarde de edx
use = () def = ()	in = ()	 	out = ()	 		sub	esp,	0	;allocation des variables locales
use = () def = (8 )	in = ()	 	out = (8 )	 		mov	@8,	1
use = (8 ) def = (8 )	in = (8 )	 	out = (8 )	 		imul	@8,	4
use = (8 ) def = ()	in = (8 )	 	out = ()	 		mov	dword [t+@8],	100	;Affect
use = () def = (9 )	in = ()	 	out = (9 )	 		mov	@9,	1
use = (9 ) def = (9 )	in = (9 )	 	out = (9 )	 		imul	@9,	4
use = (9 ) def = (1 )	in = (9 )	 	out = (1 )	 		mov	@1,	dword [t+@9]
use = (1 ) def = (1 )	in = (1 )	 	out = (1 )	 		add	@1,	10
use = () def = (10 )	in = (1 )	 	out = (1 10 )	 		mov	@10,	1
use = (10 ) def = (10 )	in = (1 10 )	 	out = (1 10 )	 		imul	@10,	4
use = (1 10 ) def = ()	in = (1 10 )	 	out = ()	 		mov	dword [t+@10],	@1	;Affect
use = () def = (12 )	in = ()	 	out = (12 )	 		mov	@12,	1
use = (12 ) def = (12 )	in = (12 )	 	out = (12 )	 		imul	@12,	4
use = (12 ) def = (11 )	in = (12 )	 	out = ()	 		mov	eax,	dword [t+@12]	;Write 1
use = () def = ()	in = ()	 	out = ()	 		call	iprintLF	;Write 2
use = () def = ()	in = ()	 	out = ()	 		add	esp,	0	;désallocation des variables locales
use = () def = (13 )	in = ()	 	out = ()	 		pop	edx	;restaure edx
use = () def = (14 )	in = ()	 	out = ()	 		pop	ecx	;restaure ecx
use = () def = (15 )	in = ()	 	out = ()	 		pop	ebx	;restaure ebx
use = () def = (16 )	in = ()	 	out = ()	 		pop	eax	;restaure eax
use = () def = ()	in = ()	 	out = ()	 		pop	ebp	;restaure la valeur de ebp
use = () def = ()	in = ()	 	out = ()	 		ret
+31 −0
Original line number Diff line number Diff line
iter num = 5
use = () def = ()	in = ()	 	out = ()	 		sub	esp,	4	;allocation mémoire pour la valeur de retour
use = () def = ()	in = ()	 	out = ()	 		call	main
use = () def = (0 )	in = ()	 	out = ()	 		pop	@0	;récupération de la valeur de retour
use = () def = (4 )	in = ()	 	out = ()	 		mov	ebx,	0	; valeur de retour du programme
use = () def = (5 )	in = ()	 	out = ()	 		mov	eax,	1	; code de sortie
use = () def = ()	in = ()	 	out = ()	 		int 0x80
use = () def = ()	in = ()	 	out = ()	 	main :	push	ebp	;sauvegarde la valeur de ebp
use = () def = ()	in = ()	 	out = ()	 		mov	ebp,	esp	;nouvelle valeur de ebp
use = () def = ()	in = ()	 	out = ()	 		push	eax	;sauvegarde de eax
use = () def = ()	in = ()	 	out = ()	 		push	ebx	;sauvegarde de ebx
use = () def = ()	in = ()	 	out = ()	 		push	ecx	;sauvegarde de ecx
use = () def = ()	in = ()	 	out = ()	 		push	edx	;sauvegarde de edx
use = () def = ()	in = ()	 	out = ()	 		sub	esp,	0	;allocation des variables locales
use = () def = ()	in = ()	 	out = ()	 		mov	dword [a],	4	;Affect
use = () def = (1 )	in = ()	 	out = (1 )	 		mov	@1,	12
use = (1 ) def = (1 )	in = (1 )	 	out = (1 )	 		imul	@1,	2
use = () def = (2 )	in = (1 )	 	out = (1 2 )	 		mov	@2,	dword [a]
use = (1 2 ) def = (2 )	in = (1 2 )	 	out = (2 )	 		add	@2,	@1
use = () def = (3 )	in = (2 )	 	out = (2 3 )	 		mov	@3,	dword [a]
use = (2 3 ) def = (3 )	in = (2 3 )	 	out = (3 )	 		add	@3,	@2
use = (3 ) def = ()	in = (3 )	 	out = ()	 		mov	dword [a],	@3	;Affect
use = () def = (10 )	in = ()	 	out = ()	 		mov	eax,	dword [a]	;Write 1
use = () def = ()	in = ()	 	out = ()	 		call	iprintLF	;Write 2
use = () def = ()	in = ()	 	out = ()	 		add	esp,	0	;désallocation des variables locales
use = () def = (11 )	in = ()	 	out = ()	 		pop	edx	;restaure edx
use = () def = (12 )	in = ()	 	out = ()	 		pop	ecx	;restaure ecx
use = () def = (13 )	in = ()	 	out = ()	 		pop	ebx	;restaure ebx
use = () def = (14 )	in = ()	 	out = ()	 		pop	eax	;restaure eax
use = () def = ()	in = ()	 	out = ()	 		pop	ebp	;restaure la valeur de ebp
use = () def = ()	in = ()	 	out = ()	 		ret
+47 −0
Original line number Diff line number Diff line
iter num = 9
use = () def = ()	in = ()	 	out = ()	 		sub	esp,	4	;allocation mémoire pour la valeur de retour
use = () def = ()	in = ()	 	out = ()	 		call	main
use = () def = (0 )	in = ()	 	out = ()	 		pop	@0	;récupération de la valeur de retour
use = () def = (3 )	in = ()	 	out = ()	 		mov	ebx,	0	; valeur de retour du programme
use = () def = (4 )	in = ()	 	out = ()	 		mov	eax,	1	; code de sortie
use = () def = ()	in = ()	 	out = ()	 		int 0x80
use = () def = ()	in = ()	 	out = ()	 	main :	push	ebp	;sauvegarde la valeur de ebp
use = () def = ()	in = ()	 	out = ()	 		mov	ebp,	esp	;nouvelle valeur de ebp
use = () def = ()	in = ()	 	out = ()	 		push	eax	;sauvegarde de eax
use = () def = ()	in = ()	 	out = ()	 		push	ebx	;sauvegarde de ebx
use = () def = ()	in = ()	 	out = ()	 		push	ecx	;sauvegarde de ecx
use = () def = ()	in = ()	 	out = ()	 		push	edx	;sauvegarde de edx
use = () def = ()	in = ()	 	out = ()	 		sub	esp,	0	;allocation des variables locales
use = () def = (9 )	in = ()	 	out = (9 )	 		mov	@9,	1
use = (9 ) def = (9 )	in = (9 )	 	out = (9 )	 		imul	@9,	4
use = (9 ) def = ()	in = (9 )	 	out = ()	 		mov	dword [t+@9],	2	;Affect
use = () def = (10 )	in = ()	 	out = (10 )	 		mov	@10,	2
use = (10 ) def = (10 )	in = (10 )	 	out = (10 )	 		imul	@10,	4
use = (10 ) def = ()	in = (10 )	 	out = ()	 		mov	dword [t+@10],	3	;Affect
use = () def = (11 )	in = ()	 	out = (11 )	 		mov	@11,	3
use = (11 ) def = (11 )	in = (11 )	 	out = (11 )	 		imul	@11,	4
use = (11 ) def = ()	in = (11 )	 	out = ()	 		mov	dword [t+@11],	1	;Affect
use = () def = (12 )	in = ()	 	out = (12 )	 		mov	@12,	1
use = (12 ) def = (12 )	in = (12 )	 	out = (12 )	 		imul	@12,	4
use = (12 ) def = (1 )	in = (12 )	 	out = (1 )	 		mov	@1,	dword [t+@12]
use = () def = (13 )	in = (1 )	 	out = (1 13 )	 		mov	@13,	2
use = (13 ) def = (13 )	in = (1 13 )	 	out = (1 13 )	 		imul	@13,	4
use = (1 13 ) def = (1 )	in = (1 13 )	 	out = (1 )	 		imul	@1,	dword [t+@13]
use = () def = (14 )	in = (1 )	 	out = (1 14 )	 		mov	@14,	3
use = (14 ) def = (14 )	in = (1 14 )	 	out = (1 14 )	 		imul	@14,	4
use = (14 ) def = (2 )	in = (1 14 )	 	out = (1 2 )	 		mov	@2,	dword [t+@14]
use = (1 2 ) def = (2 )	in = (1 2 )	 	out = (2 )	 		add	@2,	@1
use = () def = (15 )	in = (2 )	 	out = (2 15 )	 		mov	@15,	3
use = (15 ) def = (15 )	in = (2 15 )	 	out = (2 15 )	 		imul	@15,	4
use = (2 15 ) def = ()	in = (2 15 )	 	out = ()	 		mov	dword [t+@15],	@2	;Affect
use = () def = (17 )	in = ()	 	out = (17 )	 		mov	@17,	3
use = (17 ) def = (17 )	in = (17 )	 	out = (17 )	 		imul	@17,	4
use = (17 ) def = (16 )	in = (17 )	 	out = ()	 		mov	eax,	dword [t+@17]	;Write 1
use = () def = ()	in = ()	 	out = ()	 		call	iprintLF	;Write 2
use = () def = ()	in = ()	 	out = ()	 		add	esp,	0	;désallocation des variables locales
use = () def = (18 )	in = ()	 	out = ()	 		pop	edx	;restaure edx
use = () def = (19 )	in = ()	 	out = ()	 		pop	ecx	;restaure ecx
use = () def = (20 )	in = ()	 	out = ()	 		pop	ebx	;restaure ebx
use = () def = (21 )	in = ()	 	out = ()	 		pop	eax	;restaure eax
use = () def = ()	in = ()	 	out = ()	 		pop	ebp	;restaure la valeur de ebp
use = () def = ()	in = ()	 	out = ()	 		ret
+33 −0
Original line number Diff line number Diff line
iter num = 38
use = () def = ()	in = (13 )	 	out = (13 )	 		sub	esp,	4	;allocation mémoire pour la valeur de retour
use = () def = ()	in = (13 )	 	out = (13 )	 		call	main
use = () def = (0 )	in = (13 )	 	out = (13 )	 		pop	@0	;récupération de la valeur de retour
use = () def = (4 )	in = (13 )	 	out = (13 )	 		mov	ebx,	0	; valeur de retour du programme
use = () def = (5 )	in = (13 )	 	out = (13 )	 		mov	eax,	1	; code de sortie
use = () def = ()	in = (13 )	 	out = (13 )	 		int 0x80
use = () def = ()	in = (13 )	 	out = (13 )	 	main :	push	ebp	;sauvegarde la valeur de ebp
use = () def = ()	in = (13 )	 	out = (13 )	 		mov	ebp,	esp	;nouvelle valeur de ebp
use = () def = ()	in = (13 )	 	out = (13 )	 		push	eax	;sauvegarde de eax
use = () def = ()	in = (13 )	 	out = (13 )	 		push	ebx	;sauvegarde de ebx
use = () def = ()	in = (13 )	 	out = (13 )	 		push	ecx	;sauvegarde de ecx
use = () def = ()	in = (13 )	 	out = (13 )	 		push	edx	;sauvegarde de edx
use = () def = ()	in = (13 )	 	out = (13 )	 		sub	esp,	0	;allocation des variables locales
use = () def = (10 )	in = (13 )	 	out = (10 13 )	 		mov	edx,	0	;mise à 0 des bits de poids fort du dividende
use = () def = (11 )	in = (10 13 )	 	out = (10 13 )	 		mov	eax,	5	;affectation des bits de poids faible du dividende
use = () def = (12 )	in = (10 13 )	 	out = (10 12 13 )	 		mov	@12,	3
use = (12 ) def = ()	in = (10 12 13 )	 	out = (10 13 )	 		idiv	@12
use = (10 ) def = (10 )	in = (10 13 )	 	out = (13 )	 		mov	edx,	edx	;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée
use = (13 ) def = (1 )	in = (13 )	 	out = (1 )	 		mov	@1,	eax
use = () def = (2 )	in = (1 )	 	out = (1 2 )	 		mov	@2,	3
use = (1 2 ) def = (2 )	in = (1 2 )	 	out = (2 )	 		imul	@2,	@1
use = () def = (3 )	in = (2 )	 	out = (2 3 )	 		mov	@3,	5
use = (2 3 ) def = (3 )	in = (2 3 )	 	out = (3 )	 		sub	@3,	@2
use = (3 ) def = (14 )	in = (3 )	 	out = ()	 		mov	eax,	@3	;Write 1
use = () def = ()	in = ()	 	out = ()	 		call	iprintLF	;Write 2
use = () def = ()	in = ()	 	out = ()	 		add	esp,	0	;désallocation des variables locales
use = () def = (15 )	in = ()	 	out = ()	 		pop	edx	;restaure edx
use = () def = (16 )	in = ()	 	out = ()	 		pop	ecx	;restaure ecx
use = () def = (17 )	in = ()	 	out = ()	 		pop	ebx	;restaure ebx
use = () def = (18 )	in = ()	 	out = ()	 		pop	eax	;restaure eax
use = () def = ()	in = ()	 	out = ()	 		pop	ebp	;restaure la valeur de ebp
use = () def = ()	in = ()	 	out = ()	 		ret
+35 −0
Original line number Diff line number Diff line
iter num = 38
use = () def = ()	in = (14 )	 	out = (14 )	 		sub	esp,	4	;allocation mémoire pour la valeur de retour
use = () def = ()	in = (14 )	 	out = (14 )	 		call	main
use = () def = (0 )	in = (14 )	 	out = (14 )	 		pop	@0	;récupération de la valeur de retour
use = () def = (5 )	in = (14 )	 	out = (14 )	 		mov	ebx,	0	; valeur de retour du programme
use = () def = (6 )	in = (14 )	 	out = (14 )	 		mov	eax,	1	; code de sortie
use = () def = ()	in = (14 )	 	out = (14 )	 		int 0x80
use = () def = ()	in = (14 )	 	out = (14 )	 	main :	push	ebp	;sauvegarde la valeur de ebp
use = () def = ()	in = (14 )	 	out = (14 )	 		mov	ebp,	esp	;nouvelle valeur de ebp
use = () def = ()	in = (14 )	 	out = (14 )	 		push	eax	;sauvegarde de eax
use = () def = ()	in = (14 )	 	out = (14 )	 		push	ebx	;sauvegarde de ebx
use = () def = ()	in = (14 )	 	out = (14 )	 		push	ecx	;sauvegarde de ecx
use = () def = ()	in = (14 )	 	out = (14 )	 		push	edx	;sauvegarde de edx
use = () def = ()	in = (14 )	 	out = (14 )	 		sub	esp,	0	;allocation des variables locales
use = () def = (11 )	in = (14 )	 	out = (11 14 )	 		mov	edx,	0	;mise à 0 des bits de poids fort du dividende
use = () def = (12 )	in = (11 14 )	 	out = (11 14 )	 		mov	eax,	12	;affectation des bits de poids faible du dividende
use = () def = (13 )	in = (11 14 )	 	out = (11 13 14 )	 		mov	@13,	7
use = (13 ) def = ()	in = (11 13 14 )	 	out = (11 14 )	 		idiv	@13
use = (11 ) def = (11 )	in = (11 14 )	 	out = (14 )	 		mov	edx,	edx	;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée
use = (14 ) def = (1 )	in = (14 )	 	out = (1 )	 		mov	@1,	eax
use = () def = (2 )	in = (1 )	 	out = (1 2 )	 		mov	@2,	7
use = (1 2 ) def = (2 )	in = (1 2 )	 	out = (2 )	 		imul	@2,	@1
use = () def = (3 )	in = (2 )	 	out = (2 3 )	 		mov	@3,	12
use = (2 3 ) def = (3 )	in = (2 3 )	 	out = (3 )	 		sub	@3,	@2
use = (3 ) def = (4 )	in = (3 )	 	out = (4 )	 		mov	@4,	@3
use = (4 ) def = (4 )	in = (4 )	 	out = (4 )	 		add	@4,	5
use = (4 ) def = (15 )	in = (4 )	 	out = ()	 		mov	eax,	@4	;Write 1
use = () def = ()	in = ()	 	out = ()	 		call	iprintLF	;Write 2
use = () def = ()	in = ()	 	out = ()	 		add	esp,	0	;désallocation des variables locales
use = () def = (16 )	in = ()	 	out = ()	 		pop	edx	;restaure edx
use = () def = (17 )	in = ()	 	out = ()	 		pop	ecx	;restaure ecx
use = () def = (18 )	in = ()	 	out = ()	 		pop	ebx	;restaure ebx
use = () def = (19 )	in = ()	 	out = ()	 		pop	eax	;restaure eax
use = () def = ()	in = ()	 	out = ()	 		pop	ebp	;restaure la valeur de ebp
use = () def = ()	in = ()	 	out = ()	 		ret
+37 −0
Original line number Diff line number Diff line
iter num = 42
use = () def = ()	in = (15 )	 	out = (15 )	 		sub	esp,	4	;allocation mémoire pour la valeur de retour
use = () def = ()	in = (15 )	 	out = (15 )	 		call	main
use = () def = (0 )	in = (15 )	 	out = (15 )	 		pop	@0	;récupération de la valeur de retour
use = () def = (6 )	in = (15 )	 	out = (15 )	 		mov	ebx,	0	; valeur de retour du programme
use = () def = (7 )	in = (15 )	 	out = (15 )	 		mov	eax,	1	; code de sortie
use = () def = ()	in = (15 )	 	out = (15 )	 		int 0x80
use = () def = ()	in = (15 )	 	out = (15 )	 	main :	push	ebp	;sauvegarde la valeur de ebp
use = () def = ()	in = (15 )	 	out = (15 )	 		mov	ebp,	esp	;nouvelle valeur de ebp
use = () def = ()	in = (15 )	 	out = (15 )	 		push	eax	;sauvegarde de eax
use = () def = ()	in = (15 )	 	out = (15 )	 		push	ebx	;sauvegarde de ebx
use = () def = ()	in = (15 )	 	out = (15 )	 		push	ecx	;sauvegarde de ecx
use = () def = ()	in = (15 )	 	out = (15 )	 		push	edx	;sauvegarde de edx
use = () def = ()	in = (15 )	 	out = (15 )	 		sub	esp,	0	;allocation des variables locales
use = () def = (1 )	in = (15 )	 	out = (1 15 )	 		mov	@1,	2
use = (1 ) def = (1 )	in = (1 15 )	 	out = (1 15 )	 		imul	@1,	7
use = () def = (12 )	in = (1 15 )	 	out = (1 12 15 )	 		mov	edx,	0	;mise à 0 des bits de poids fort du dividende
use = (1 ) def = (13 )	in = (1 12 15 )	 	out = (1 12 15 )	 		mov	eax,	@1	;affectation des bits de poids faible du dividende
use = () def = (14 )	in = (1 12 15 )	 	out = (1 12 14 15 )	 		mov	@14,	5
use = (14 ) def = ()	in = (1 12 14 15 )	 	out = (1 12 15 )	 		idiv	@14
use = (12 ) def = (12 )	in = (1 12 15 )	 	out = (1 15 )	 		mov	edx,	edx	;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée
use = (15 ) def = (2 )	in = (1 15 )	 	out = (1 2 )	 		mov	@2,	eax
use = () def = (3 )	in = (1 2 )	 	out = (1 2 3 )	 		mov	@3,	5
use = (2 3 ) def = (3 )	in = (1 2 3 )	 	out = (1 3 )	 		imul	@3,	@2
use = (1 ) def = (4 )	in = (1 3 )	 	out = (3 4 )	 		mov	@4,	@1
use = (3 4 ) def = (4 )	in = (3 4 )	 	out = (4 )	 		sub	@4,	@3
use = (4 ) def = (5 )	in = (4 )	 	out = (5 )	 		mov	@5,	@4
use = (5 ) def = (5 )	in = (5 )	 	out = (5 )	 		add	@5,	5
use = (5 ) def = (16 )	in = (5 )	 	out = ()	 		mov	eax,	@5	;Write 1
use = () def = ()	in = ()	 	out = ()	 		call	iprintLF	;Write 2
use = () def = ()	in = ()	 	out = ()	 		add	esp,	0	;désallocation des variables locales
use = () def = (17 )	in = ()	 	out = ()	 		pop	edx	;restaure edx
use = () def = (18 )	in = ()	 	out = ()	 		pop	ecx	;restaure ecx
use = () def = (19 )	in = ()	 	out = ()	 		pop	ebx	;restaure ebx
use = () def = (20 )	in = ()	 	out = ()	 		pop	eax	;restaure eax
use = () def = ()	in = ()	 	out = ()	 		pop	ebp	;restaure la valeur de ebp
use = () def = ()	in = ()	 	out = ()	 		ret
+34 −0
Original line number Diff line number Diff line
iter num = 40
use = () def = ()	in = (12 )	 	out = (12 )	 		sub	esp,	4	;allocation mémoire pour la valeur de retour
use = () def = ()	in = (12 )	 	out = (12 )	 		call	main
use = () def = (0 )	in = (12 )	 	out = (12 )	 		pop	@0	;récupération de la valeur de retour
use = () def = (4 )	in = (12 )	 	out = (12 )	 		mov	ebx,	0	; valeur de retour du programme
use = () def = (5 )	in = (12 )	 	out = (12 )	 		mov	eax,	1	; code de sortie
use = () def = ()	in = (12 )	 	out = (12 )	 		int 0x80
use = () def = ()	in = (12 )	 	out = (12 )	 	main :	push	ebp	;sauvegarde la valeur de ebp
use = () def = ()	in = (12 )	 	out = (12 )	 		mov	ebp,	esp	;nouvelle valeur de ebp
use = () def = ()	in = (12 )	 	out = (12 )	 		push	eax	;sauvegarde de eax
use = () def = ()	in = (12 )	 	out = (12 )	 		push	ebx	;sauvegarde de ebx
use = () def = ()	in = (12 )	 	out = (12 )	 		push	ecx	;sauvegarde de ecx
use = () def = ()	in = (12 )	 	out = (12 )	 		push	edx	;sauvegarde de edx
use = () def = ()	in = (12 )	 	out = (12 )	 		sub	esp,	0	;allocation des variables locales
use = () def = ()	in = (12 )	 	out = (12 )	 		mov	dword [a],	12	;Affect
use = () def = ()	in = (12 )	 	out = (12 )	 		mov	dword [b],	5	;Affect
use = () def = (10 )	in = (12 )	 	out = (10 12 )	 		mov	edx,	0	;mise à 0 des bits de poids fort du dividende
use = () def = (11 )	in = (10 12 )	 	out = (10 12 )	 		mov	eax,	dword [a]	;affectation des bits de poids faible du dividende
use = () def = ()	in = (10 12 )	 	out = (10 12 )	 		idiv	dword [b]
use = (10 ) def = (10 )	in = (10 12 )	 	out = (12 )	 		mov	edx,	edx	;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée
use = (12 ) def = (1 )	in = (12 )	 	out = (1 )	 		mov	@1,	eax
use = () def = (2 )	in = (1 )	 	out = (1 2 )	 		mov	@2,	dword [b]
use = (1 2 ) def = (2 )	in = (1 2 )	 	out = (2 )	 		imul	@2,	@1
use = () def = (3 )	in = (2 )	 	out = (2 3 )	 		mov	@3,	dword [a]
use = (2 3 ) def = (3 )	in = (2 3 )	 	out = (3 )	 		sub	@3,	@2
use = (3 ) def = (13 )	in = (3 )	 	out = ()	 		mov	eax,	@3	;Write 1
use = () def = ()	in = ()	 	out = ()	 		call	iprintLF	;Write 2
use = () def = ()	in = ()	 	out = ()	 		add	esp,	0	;désallocation des variables locales
use = () def = (14 )	in = ()	 	out = ()	 		pop	edx	;restaure edx
use = () def = (15 )	in = ()	 	out = ()	 		pop	ecx	;restaure ecx
use = () def = (16 )	in = ()	 	out = ()	 		pop	ebx	;restaure ebx
use = () def = (17 )	in = ()	 	out = ()	 		pop	eax	;restaure eax
use = () def = ()	in = ()	 	out = ()	 		pop	ebp	;restaure la valeur de ebp
use = () def = ()	in = ()	 	out = ()	 		ret
+51 −0
Original line number Diff line number Diff line
iter num = 56
use = () def = ()	in = (16 )	 	out = (16 )	 		sub	esp,	4	;allocation mémoire pour la valeur de retour
use = () def = ()	in = (16 )	 	out = (16 )	 		call	main
use = () def = (0 )	in = (16 )	 	out = (16 )	 		pop	@0	;récupération de la valeur de retour
use = () def = (4 )	in = (16 )	 	out = (16 )	 		mov	ebx,	0	; valeur de retour du programme
use = () def = (5 )	in = (16 )	 	out = (16 )	 		mov	eax,	1	; code de sortie
use = () def = ()	in = (16 )	 	out = (16 )	 		int 0x80
use = () def = ()	in = (16 )	 	out = (16 )	 	main :	push	ebp	;sauvegarde la valeur de ebp
use = () def = ()	in = (16 )	 	out = (16 )	 		mov	ebp,	esp	;nouvelle valeur de ebp
use = () def = ()	in = (16 )	 	out = (16 )	 		push	eax	;sauvegarde de eax
use = () def = ()	in = (16 )	 	out = (16 )	 		push	ebx	;sauvegarde de ebx
use = () def = ()	in = (16 )	 	out = (16 )	 		push	ecx	;sauvegarde de ecx
use = () def = ()	in = (16 )	 	out = (16 )	 		push	edx	;sauvegarde de edx
use = () def = ()	in = (16 )	 	out = (16 )	 		sub	esp,	0	;allocation des variables locales
use = () def = (10 )	in = (16 )	 	out = (10 16 )	 		mov	@10,	0
use = (10 ) def = (10 )	in = (10 16 )	 	out = (10 16 )	 		imul	@10,	4
use = (10 ) def = ()	in = (10 16 )	 	out = (16 )	 		mov	dword [t+@10],	3164	;Affect
use = () def = (11 )	in = (16 )	 	out = (11 16 )	 		mov	@11,	1
use = (11 ) def = (11 )	in = (11 16 )	 	out = (11 16 )	 		imul	@11,	4
use = (11 ) def = ()	in = (11 16 )	 	out = (16 )	 		mov	dword [t+@11],	152	;Affect
use = () def = (12 )	in = (16 )	 	out = (12 16 )	 		mov	@12,	1
use = (12 ) def = (12 )	in = (12 16 )	 	out = (12 16 )	 		imul	@12,	4
use = () def = (13 )	in = (12 16 )	 	out = (12 13 16 )	 		mov	edx,	0	;mise à 0 des bits de poids fort du dividende
use = () def = (15 )	in = (12 13 16 )	 	out = (12 13 15 16 )	 		mov	@15,	0
use = (15 ) def = (15 )	in = (12 13 15 16 )	 	out = (12 13 15 16 )	 		imul	@15,	4
use = (15 ) def = (14 )	in = (12 13 15 16 )	 	out = (12 13 16 )	 		mov	eax,	dword [t+@15]	;affectation des bits de poids faible du dividende
use = (12 ) def = ()	in = (12 13 16 )	 	out = (13 16 )	 		idiv	dword [t+@12]
use = (13 ) def = (13 )	in = (13 16 )	 	out = (16 )	 		mov	edx,	edx	;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée
use = (16 ) def = (1 )	in = (16 )	 	out = (1 )	 		mov	@1,	eax
use = () def = (17 )	in = (1 )	 	out = (1 17 )	 		mov	@17,	1
use = (17 ) def = (17 )	in = (1 17 )	 	out = (1 17 )	 		imul	@17,	4
use = (17 ) def = (2 )	in = (1 17 )	 	out = (1 2 )	 		mov	@2,	dword [t+@17]
use = (1 2 ) def = (2 )	in = (1 2 )	 	out = (2 )	 		imul	@2,	@1
use = () def = (18 )	in = (2 )	 	out = (2 18 )	 		mov	@18,	0
use = (18 ) def = (18 )	in = (2 18 )	 	out = (2 18 )	 		imul	@18,	4
use = (18 ) def = (3 )	in = (2 18 )	 	out = (2 3 )	 		mov	@3,	dword [t+@18]
use = (2 3 ) def = (3 )	in = (2 3 )	 	out = (3 )	 		sub	@3,	@2
use = () def = (19 )	in = (3 )	 	out = (3 19 )	 		mov	@19,	2
use = (19 ) def = (19 )	in = (3 19 )	 	out = (3 19 )	 		imul	@19,	4
use = (3 19 ) def = ()	in = (3 19 )	 	out = ()	 		mov	dword [t+@19],	@3	;Affect
use = () def = (21 )	in = ()	 	out = (21 )	 		mov	@21,	2
use = (21 ) def = (21 )	in = (21 )	 	out = (21 )	 		imul	@21,	4
use = (21 ) def = (20 )	in = (21 )	 	out = ()	 		mov	eax,	dword [t+@21]	;Write 1
use = () def = ()	in = ()	 	out = ()	 		call	iprintLF	;Write 2
use = () def = ()	in = ()	 	out = ()	 		add	esp,	0	;désallocation des variables locales
use = () def = (22 )	in = ()	 	out = ()	 		pop	edx	;restaure edx
use = () def = (23 )	in = ()	 	out = ()	 		pop	ecx	;restaure ecx
use = () def = (24 )	in = ()	 	out = ()	 		pop	ebx	;restaure ebx
use = () def = (25 )	in = ()	 	out = ()	 		pop	eax	;restaure eax
use = () def = ()	in = ()	 	out = ()	 		pop	ebp	;restaure la valeur de ebp
use = () def = ()	in = ()	 	out = ()	 		ret
+13 −0
Original line number Diff line number Diff line
0 : ( )
1 : ( )
2 : ( )
3 : ( )
4 : ( )
5 : ( )
6 : ( )
7 : ( )
8 : ( )
9 : ( )
10 : ( )
11 : ( )
12 : ( )
+13 −0
Original line number Diff line number Diff line
0 : ( )
1 : ( )
2 : ( )
3 : ( )
4 : ( )
5 : ( )
6 : ( )
7 : ( )
8 : ( )
9 : ( )
10 : ( )
11 : ( )
12 : ( )
+17 −0
Original line number Diff line number Diff line
0 : ( )
1 : ( 10 )
2 : ( )
3 : ( )
4 : ( )
5 : ( )
6 : ( )
7 : ( )
8 : ( )
9 : ( )
10 : ( 1 )
11 : ( )
12 : ( )
13 : ( )
14 : ( )
15 : ( )
16 : ( )
+15 −0
Original line number Diff line number Diff line
0 : ( )
1 : ( 2 )
2 : ( 3 1 )
3 : ( 2 )
4 : ( )
5 : ( )
6 : ( )
7 : ( )
8 : ( )
9 : ( )
10 : ( )
11 : ( )
12 : ( )
13 : ( )
14 : ( )
+22 −0
Original line number Diff line number Diff line
0 : ( )
1 : ( 2 14 13 )
2 : ( 15 1 )
3 : ( )
4 : ( )
5 : ( )
6 : ( )
7 : ( )
8 : ( )
9 : ( )
10 : ( )
11 : ( )
12 : ( )
13 : ( 1 )
14 : ( 1 )
15 : ( 2 )
16 : ( )
17 : ( )
18 : ( )
19 : ( )
20 : ( )
21 : ( )
+19 −0
Original line number Diff line number Diff line
0 : ( )
1 : ( 2 )
2 : ( 3 1 )
3 : ( 2 )
4 : ( )
5 : ( )
6 : ( )
7 : ( )
8 : ( )
9 : ( )
10 : ( 12 13 )
11 : ( )
12 : ( 13 10 )
13 : ( 12 10 )
14 : ( )
15 : ( )
16 : ( )
17 : ( )
18 : ( )
+20 −0
Original line number Diff line number Diff line
0 : ( )
1 : ( 2 )
2 : ( 3 1 )
3 : ( 2 )
4 : ( )
5 : ( )
6 : ( )
7 : ( )
8 : ( )
9 : ( )
10 : ( )
11 : ( 13 14 )
12 : ( )
13 : ( 14 11 )
14 : ( 13 11 )
15 : ( )
16 : ( )
17 : ( )
18 : ( )
19 : ( )
+21 −0
Original line number Diff line number Diff line
0 : ( )
1 : ( 3 2 14 12 15 )
2 : ( 3 1 )
3 : ( 4 2 1 )
4 : ( 3 )
5 : ( )
6 : ( )
7 : ( )
8 : ( )
9 : ( )
10 : ( )
11 : ( )
12 : ( 14 15 1 )
13 : ( )
14 : ( 15 12 1 )
15 : ( 14 12 1 )
16 : ( )
17 : ( )
18 : ( )
19 : ( )
20 : ( )
+18 −0
Original line number Diff line number Diff line
0 : ( )
1 : ( 2 )
2 : ( 3 1 )
3 : ( 2 )
4 : ( )
5 : ( )
6 : ( )
7 : ( )
8 : ( )
9 : ( )
10 : ( 12 )
11 : ( )
12 : ( 10 )
13 : ( )
14 : ( )
15 : ( )
16 : ( )
17 : ( )
+26 −0
Original line number Diff line number Diff line
0 : ( )
1 : ( 2 17 )
2 : ( 3 18 1 )
3 : ( 19 2 )
4 : ( )
5 : ( )
6 : ( )
7 : ( )
8 : ( )
9 : ( )
10 : ( 16 )
11 : ( 16 )
12 : ( 15 13 16 )
13 : ( 15 16 12 )
14 : ( )
15 : ( 16 13 12 )
16 : ( 15 13 12 11 10 )
17 : ( 1 )
18 : ( 2 )
19 : ( 3 )
20 : ( )
21 : ( )
22 : ( )
23 : ( )
24 : ( )
25 : ( )

test2024/input/incr1.l

0 → 100644
+7 −0
Original line number Diff line number Diff line
entier a
main()
{
a = 4;
a += 1;
ecrire(a);
}

test2024/input/incr2.l

0 → 100644
+7 −0
Original line number Diff line number Diff line
main()
entier a
{
a = 4;
a += 1;
ecrire(a);
}

test2024/input/incr3.l

0 → 100644
+7 −0
Original line number Diff line number Diff line
entier t[10]
main()
{
t[1] = 100;
t[1] += 10;
ecrire(t[1]);
}

test2024/input/incr4.l

0 → 100644
+7 −0
Original line number Diff line number Diff line
entier a
main()
{
a = 4;
a += a + 12 * 2;
ecrire(a);
}

test2024/input/incr5.l

0 → 100644
+9 −0
Original line number Diff line number Diff line
entier t[10]
main()
{
t[1] = 2;
t[2] = 3;
t[3] = 1;
t[3] += t[1] * t[2];
ecrire(t[3]);
}
+4 −0
Original line number Diff line number Diff line
main()
{
ecrire(5 % 3);
}
+5 −0
Original line number Diff line number Diff line

main()
{
ecrire(12 % 7 + 5);
}
+5 −0
Original line number Diff line number Diff line

main()
{
ecrire(2 * 7 % 5 + 5);
}
+7 −0
Original line number Diff line number Diff line
entier a, entier b
main()
{
a = 12;
b = 5;
ecrire(a % b);
}
+9 −0
Original line number Diff line number Diff line
entier t[10]
main()
{
t[0] = 3164;
t[1] = 152;
t[2]  = t[0] % t[1];

ecrire(t[2]);
}

test2024/io.asm

0 → 100644
+205 −0
Original line number Diff line number Diff line
	global iprintLF
;------------------------------------------
; void readline
; Read a line from stdin, store string after [$eax]
; WARNING: does not check for buffer overflow - insecure!
readline:    
    push    edx        ; preserve edx on stack to be restored after function
    push    ecx        ; preserve ecx on stack to be restored after function
    push    ebx        ; preserve ebx on stack to be restored after function
    push    eax        ; preserve eax on stack to be restored after function
    mov ecx, eax       ; address where store result
continue_reading:
    mov	eax, 3         ; syscall is read = 3
    mov	ebx, 0         ; fd is stdin = 0    
    mov	edx, 1         ; nb. of bytes to read
    int 80h            ; call interruption
    cmp eax, 0         ; if no byte read, then we reached EOF, stop
    je end_reading    
    cmp BYTE [ecx], 10 ; Found '\n', stop reading string
    je end_reading
    cmp BYTE [ecx], 13 ; Found '\r', stop reading string
    je end_reading
    inc ecx            ; None of above, increment pointer and read next byte
    jmp continue_reading
end_reading:
    mov BYTE [ecx], 0  ; Add zero to yield null-terminated string
    pop     eax        ; restore eax from value pushed onto stack at start
    pop     ebx        ; restore eax from value pushed onto stack at start
    pop     ecx        ; restore eax from value pushed onto stack at start
    pop     edx        ; restore eax from value pushed onto stack at start
    ret

;------------------------------------------
; void iprint(Integer number)
; Integer printing function (itoa)
iprint:
    push    eax             ; preserve eax on the stack to be restored after function runs
    push    ecx             ; preserve ecx on the stack to be restored after function runs
    push    edx             ; preserve edx on the stack to be restored after function runs
    push    esi             ; preserve esi on the stack to be restored after function runs
    
    cmp	    eax, 0
    jge      positive
    push    eax             ; preserve eax value
    mov     ebx, '-'
    push    ebx
    mov     eax, esp    
    call sprint
    pop     eax             ; remove '-' sign
    pop     eax             ; retrieve eax value
    neg     eax
positive:
    mov     ecx, 0          ; counter of how many bytes we need to print in the end 
divideLoop:
    inc     ecx             ; count each byte to print - number of characters
    mov     edx, 0          ; empty edx
    mov     esi, 10         ; mov 10 into esi
    idiv    esi             ; divide eax by esi
    add     edx, 48         ; convert edx to it's ascii representation - edx holds the remainder after a divide instruction
    push    edx             ; push edx (string representation of an intger) onto the stack
    cmp     eax, 0          ; can the integer be divided anymore?
    jnz     divideLoop      ; jump if not zero to the label divideLoop
 
printLoop:
    dec     ecx             ; count down each byte that we put on the stack
    mov     eax, esp        ; mov the stack pointer into eax for printing
    call    sprint          ; call our string print function
    pop     eax             ; remove last character from the stack to move esp forward
    cmp     ecx, 0          ; have we printed all bytes we pushed onto the stack?
    jnz     printLoop       ; jump is not zero to the label printLoop
 
    pop     esi             ; restore esi from the value we pushed onto the stack at the start
    pop     edx             ; restore edx from the value we pushed onto the stack at the start
    pop     ecx             ; restore ecx from the value we pushed onto the stack at the start
    pop     eax             ; restore eax from the value we pushed onto the stack at the start
    ret
 
 
;------------------------------------------
; void iprintLF(Integer number)
; Integer printing function with linefeed (itoa)
iprintLF:
    call    iprint          ; call our integer printing function
 
    push    eax             ; push eax onto the stack to preserve it while we use the eax register in this function
    mov     eax, 0Ah        ; move 0Ah into eax - 0Ah is the ascii character for a linefeed
    push    eax             ; push the linefeed onto the stack so we can get the address
    mov     eax, esp        ; move the address of the current stack pointer into eax for sprint
    call    sprint          ; call our sprint function
    pop     eax             ; remove our linefeed character from the stack
    pop     eax             ; restore the original value of eax before our function was called
    ret
 
 
;------------------------------------------
; int slen(String message)
; String length calculation function
slen:
    push    ebx
    mov     ebx, eax
 
nextchar:
    cmp     byte [eax], 0
    jz      finished
    inc     eax
    jmp     nextchar
 
finished:
    sub     eax, ebx
    pop     ebx
    ret
 
 
;------------------------------------------
; void sprint(String message)
; String printing function
sprint:
    push    edx
    push    ecx
    push    ebx
    push    eax
    call    slen
 
    mov     edx, eax
    pop     eax
 
    mov     ecx, eax
    mov     ebx, 1
    mov     eax, 4
    int     80h
 
    pop     ebx
    pop     ecx
    pop     edx
    ret
 
 
;------------------------------------------
; void sprintLF(String message)
; String printing with line feed function
sprintLF:
    call    sprint
 
    push    eax
    mov     eax, 0AH
    push    eax
    mov     eax, esp
    call    sprint
    pop     eax
    pop     eax
    ret
 
 
;------------------------------------------
; void exit()
; Exit program and restore resources
quit:
    mov     ebx, 0
    mov     eax, 1
    int     80h
    ret

;------------------------------------------
; int atoi(Integer number)
; Ascii to integer function (atoi)
atoi:
    push    ebx             ; preserve ebx on the stack to be restored after function runs
    push    ecx             ; preserve ecx on the stack to be restored after function runs
    push    edx             ; preserve edx on the stack to be restored after function runs
    push    esi             ; preserve esi on the stack to be restored after function runs
    xor     ebx, ebx        ; initialize forming answer
    xor     ecx, ecx        ; initialize sign flag
    mov     esi, eax
atoi1: 
    lodsb                   ; scan off whitespace
    cmp     al, ' '         ; ignore leading blanks
    je atoi1
    cmp al, '+'             ; if + sign proceed
    je atoi2
    cmp al, '-'             ; is it - sign?
    jne atoi3               ; no, test if numeric
    dec ecx                 ; was - sign, set flag for negative result
atoi2: 
    lodsb                   ; get next character
atoi3: 
    cmp al,'0'        ; is character valid?
    jb atoi4          ; jump if not '0' to '9'
    cmp al,'9'
    ja atoi4          ; jump if not '0' to '9'
    and eax, 000fh     ; isolate lower four bits
    xchg ebx, eax      ; multiply answer x 10
    mov edx, 10
    mul edx
    add ebx, eax      ; add this digit
    jmp atoi2         ; convert next digit
atoi4: 
    mov eax,ebx ; result into AX
    jcxz atoi5 ; jump if sign flag clear
    neg eax ; make result negative
atoi5:
    pop     esi             ; restore esi from the value we pushed onto the stack at the start
    pop     edx             ; restore edx from the value we pushed onto the stack at the start
    pop     ecx             ; restore ecx from the value we pushed onto the stack at the start
    pop     ebx             ; restore ebx from the value we pushed onto the stack at the start
    ret
+35 −0
Original line number Diff line number Diff line
%include	'io.asm'

section	.bss
sinput :	resb	255	;reserve a 255 byte space in memory for the users input string
a :	resd	4	;variable globale

section	.text
global _start
_start:
	sub	esp,	4	;allocation mémoire pour la valeur de retour
	call	main
	pop	eax	;récupération de la valeur de retour
	mov	ebx,	0	; valeur de retour du programme
	mov	eax,	1	; code de sortie
	int 0x80
main :	push	ebp	;sauvegarde la valeur de ebp
	mov	ebp,	esp	;nouvelle valeur de ebp
	push	eax	;sauvegarde de eax
	push	ebx	;sauvegarde de ebx
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	0	;allocation des variables locales
	mov	dword [a],	4	;Affect
	mov	eax,	dword [a]
	add	eax,	1
	mov	dword [a],	eax	;Affect
	mov	eax,	dword [a]	;Write 1
	call	iprintLF	;Write 2
	add	esp,	0	;désallocation des variables locales
	pop	edx	;restaure edx
	pop	ecx	;restaure ecx
	pop	ebx	;restaure ebx
	pop	eax	;restaure eax
	pop	ebp	;restaure la valeur de ebp
	ret
+34 −0
Original line number Diff line number Diff line
%include	'io.asm'

section	.bss
sinput :	resb	255	;reserve a 255 byte space in memory for the users input string

section	.text
global _start
_start:
	sub	esp,	4	;allocation mémoire pour la valeur de retour
	call	main
	pop	eax	;récupération de la valeur de retour
	mov	ebx,	0	; valeur de retour du programme
	mov	eax,	1	; code de sortie
	int 0x80
main :	push	ebp	;sauvegarde la valeur de ebp
	mov	ebp,	esp	;nouvelle valeur de ebp
	push	eax	;sauvegarde de eax
	push	ebx	;sauvegarde de ebx
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	4	;allocation des variables locales
	mov	dword [ebp-4],	4	;Affect
	mov	eax,	dword [ebp-4]
	add	eax,	1
	mov	dword [ebp-4],	eax	;Affect
	mov	eax,	dword [ebp-4]	;Write 1
	call	iprintLF	;Write 2
	add	esp,	4	;désallocation des variables locales
	pop	edx	;restaure edx
	pop	ecx	;restaure ecx
	pop	ebx	;restaure ebx
	pop	eax	;restaure eax
	pop	ebp	;restaure la valeur de ebp
	ret
+43 −0
Original line number Diff line number Diff line
%include	'io.asm'

section	.bss
sinput :	resb	255	;reserve a 255 byte space in memory for the users input string
t :	resd	40	;variable globale

section	.text
global _start
_start:
	sub	esp,	4	;allocation mémoire pour la valeur de retour
	call	main
	pop	eax	;récupération de la valeur de retour
	mov	ebx,	0	; valeur de retour du programme
	mov	eax,	1	; code de sortie
	int 0x80
main :	push	ebp	;sauvegarde la valeur de ebp
	mov	ebp,	esp	;nouvelle valeur de ebp
	push	eax	;sauvegarde de eax
	push	ebx	;sauvegarde de ebx
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	0	;allocation des variables locales
	mov	eax,	1
	imul	eax,	4
	mov	dword [t+eax],	100	;Affect
	mov	eax,	1
	imul	eax,	4
	mov	ebx,	dword [t+eax]
	add	ebx,	10
	mov	eax,	1
	imul	eax,	4
	mov	dword [t+eax],	ebx	;Affect
	mov	eax,	1
	imul	eax,	4
	mov	eax,	dword [t+eax]	;Write 1
	call	iprintLF	;Write 2
	add	esp,	0	;désallocation des variables locales
	pop	edx	;restaure edx
	pop	ecx	;restaure ecx
	pop	ebx	;restaure ebx
	pop	eax	;restaure eax
	pop	ebp	;restaure la valeur de ebp
	ret
+39 −0
Original line number Diff line number Diff line
%include	'io.asm'

section	.bss
sinput :	resb	255	;reserve a 255 byte space in memory for the users input string
a :	resd	4	;variable globale

section	.text
global _start
_start:
	sub	esp,	4	;allocation mémoire pour la valeur de retour
	call	main
	pop	eax	;récupération de la valeur de retour
	mov	ebx,	0	; valeur de retour du programme
	mov	eax,	1	; code de sortie
	int 0x80
main :	push	ebp	;sauvegarde la valeur de ebp
	mov	ebp,	esp	;nouvelle valeur de ebp
	push	eax	;sauvegarde de eax
	push	ebx	;sauvegarde de ebx
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	0	;allocation des variables locales
	mov	dword [a],	4	;Affect
	mov	eax,	12
	imul	eax,	2
	mov	ebx,	dword [a]
	add	ebx,	eax
	mov	eax,	dword [a]
	add	eax,	ebx
	mov	dword [a],	eax	;Affect
	mov	eax,	dword [a]	;Write 1
	call	iprintLF	;Write 2
	add	esp,	0	;désallocation des variables locales
	pop	edx	;restaure edx
	pop	ecx	;restaure ecx
	pop	ebx	;restaure ebx
	pop	eax	;restaure eax
	pop	ebp	;restaure la valeur de ebp
	ret
+55 −0
Original line number Diff line number Diff line
%include	'io.asm'

section	.bss
sinput :	resb	255	;reserve a 255 byte space in memory for the users input string
t :	resd	40	;variable globale

section	.text
global _start
_start:
	sub	esp,	4	;allocation mémoire pour la valeur de retour
	call	main
	pop	eax	;récupération de la valeur de retour
	mov	ebx,	0	; valeur de retour du programme
	mov	eax,	1	; code de sortie
	int 0x80
main :	push	ebp	;sauvegarde la valeur de ebp
	mov	ebp,	esp	;nouvelle valeur de ebp
	push	eax	;sauvegarde de eax
	push	ebx	;sauvegarde de ebx
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	0	;allocation des variables locales
	mov	eax,	1
	imul	eax,	4
	mov	dword [t+eax],	2	;Affect
	mov	eax,	2
	imul	eax,	4
	mov	dword [t+eax],	3	;Affect
	mov	eax,	3
	imul	eax,	4
	mov	dword [t+eax],	1	;Affect
	mov	eax,	1
	imul	eax,	4
	mov	ecx,	dword [t+eax]
	mov	eax,	2
	imul	eax,	4
	imul	ecx,	dword [t+eax]
	mov	eax,	3
	imul	eax,	4
	mov	ebx,	dword [t+eax]
	add	ebx,	ecx
	mov	eax,	3
	imul	eax,	4
	mov	dword [t+eax],	ebx	;Affect
	mov	eax,	3
	imul	eax,	4
	mov	eax,	dword [t+eax]	;Write 1
	call	iprintLF	;Write 2
	add	esp,	0	;désallocation des variables locales
	pop	edx	;restaure edx
	pop	ecx	;restaure ecx
	pop	ebx	;restaure ebx
	pop	eax	;restaure eax
	pop	ebp	;restaure la valeur de ebp
	ret
+40 −0
Original line number Diff line number Diff line
%include	'io.asm'

section	.bss
sinput :	resb	255	;reserve a 255 byte space in memory for the users input string

section	.text
global _start
_start:
	sub	esp,	4	;allocation mémoire pour la valeur de retour
	call	main
	pop	eax	;récupération de la valeur de retour
	mov	ebx,	0	; valeur de retour du programme
	mov	eax,	1	; code de sortie
	int 0x80
main :	push	ebp	;sauvegarde la valeur de ebp
	mov	ebp,	esp	;nouvelle valeur de ebp
	push	eax	;sauvegarde de eax
	push	ebx	;sauvegarde de ebx
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	0	;allocation des variables locales
	mov	edx,	0	;mise à 0 des bits de poids fort du dividende
	mov	eax,	5	;affectation des bits de poids faible du dividende
	mov	ebx,	3
	idiv	ebx
	mov	edx,	edx	;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée
	mov	eax,	eax
	mov	ebx,	3
	imul	ebx,	eax
	mov	eax,	5
	sub	eax,	ebx
	mov	eax,	eax	;Write 1
	call	iprintLF	;Write 2
	add	esp,	0	;désallocation des variables locales
	pop	edx	;restaure edx
	pop	ecx	;restaure ecx
	pop	ebx	;restaure ebx
	pop	eax	;restaure eax
	pop	ebp	;restaure la valeur de ebp
	ret
+42 −0
Original line number Diff line number Diff line
%include	'io.asm'

section	.bss
sinput :	resb	255	;reserve a 255 byte space in memory for the users input string

section	.text
global _start
_start:
	sub	esp,	4	;allocation mémoire pour la valeur de retour
	call	main
	pop	eax	;récupération de la valeur de retour
	mov	ebx,	0	; valeur de retour du programme
	mov	eax,	1	; code de sortie
	int 0x80
main :	push	ebp	;sauvegarde la valeur de ebp
	mov	ebp,	esp	;nouvelle valeur de ebp
	push	eax	;sauvegarde de eax
	push	ebx	;sauvegarde de ebx
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	0	;allocation des variables locales
	mov	edx,	0	;mise à 0 des bits de poids fort du dividende
	mov	eax,	12	;affectation des bits de poids faible du dividende
	mov	ebx,	7
	idiv	ebx
	mov	edx,	edx	;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée
	mov	eax,	eax
	mov	ebx,	7
	imul	ebx,	eax
	mov	eax,	12
	sub	eax,	ebx
	mov	eax,	eax
	add	eax,	5
	mov	eax,	eax	;Write 1
	call	iprintLF	;Write 2
	add	esp,	0	;désallocation des variables locales
	pop	edx	;restaure edx
	pop	ecx	;restaure ecx
	pop	ebx	;restaure ebx
	pop	eax	;restaure eax
	pop	ebp	;restaure la valeur de ebp
	ret
+44 −0
Original line number Diff line number Diff line
%include	'io.asm'

section	.bss
sinput :	resb	255	;reserve a 255 byte space in memory for the users input string

section	.text
global _start
_start:
	sub	esp,	4	;allocation mémoire pour la valeur de retour
	call	main
	pop	eax	;récupération de la valeur de retour
	mov	ebx,	0	; valeur de retour du programme
	mov	eax,	1	; code de sortie
	int 0x80
main :	push	ebp	;sauvegarde la valeur de ebp
	mov	ebp,	esp	;nouvelle valeur de ebp
	push	eax	;sauvegarde de eax
	push	ebx	;sauvegarde de ebx
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	0	;allocation des variables locales
	mov	ebx,	2
	imul	ebx,	7
	mov	edx,	0	;mise à 0 des bits de poids fort du dividende
	mov	eax,	ebx	;affectation des bits de poids faible du dividende
	mov	ecx,	5
	idiv	ecx
	mov	edx,	edx	;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée
	mov	eax,	eax
	mov	ecx,	5
	imul	ecx,	eax
	mov	eax,	ebx
	sub	eax,	ecx
	mov	eax,	eax
	add	eax,	5
	mov	eax,	eax	;Write 1
	call	iprintLF	;Write 2
	add	esp,	0	;désallocation des variables locales
	pop	edx	;restaure edx
	pop	ecx	;restaure ecx
	pop	ebx	;restaure ebx
	pop	eax	;restaure eax
	pop	ebp	;restaure la valeur de ebp
	ret
+43 −0
Original line number Diff line number Diff line
%include	'io.asm'

section	.bss
sinput :	resb	255	;reserve a 255 byte space in memory for the users input string
a :	resd	4	;variable globale
b :	resd	4	;variable globale

section	.text
global _start
_start:
	sub	esp,	4	;allocation mémoire pour la valeur de retour
	call	main
	pop	eax	;récupération de la valeur de retour
	mov	ebx,	0	; valeur de retour du programme
	mov	eax,	1	; code de sortie
	int 0x80
main :	push	ebp	;sauvegarde la valeur de ebp
	mov	ebp,	esp	;nouvelle valeur de ebp
	push	eax	;sauvegarde de eax
	push	ebx	;sauvegarde de ebx
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	0	;allocation des variables locales
	mov	dword [a],	12	;Affect
	mov	dword [b],	5	;Affect
	mov	edx,	0	;mise à 0 des bits de poids fort du dividende
	mov	eax,	dword [a]	;affectation des bits de poids faible du dividende
	idiv	dword [b]
	mov	edx,	edx	;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée
	mov	eax,	eax
	mov	ebx,	dword [b]
	imul	ebx,	eax
	mov	eax,	dword [a]
	sub	eax,	ebx
	mov	eax,	eax	;Write 1
	call	iprintLF	;Write 2
	add	esp,	0	;désallocation des variables locales
	pop	edx	;restaure edx
	pop	ecx	;restaure ecx
	pop	ebx	;restaure ebx
	pop	eax	;restaure eax
	pop	ebp	;restaure la valeur de ebp
	ret
+59 −0
Original line number Diff line number Diff line
%include	'io.asm'

section	.bss
sinput :	resb	255	;reserve a 255 byte space in memory for the users input string
t :	resd	40	;variable globale

section	.text
global _start
_start:
	sub	esp,	4	;allocation mémoire pour la valeur de retour
	call	main
	pop	eax	;récupération de la valeur de retour
	mov	ebx,	0	; valeur de retour du programme
	mov	eax,	1	; code de sortie
	int 0x80
main :	push	ebp	;sauvegarde la valeur de ebp
	mov	ebp,	esp	;nouvelle valeur de ebp
	push	eax	;sauvegarde de eax
	push	ebx	;sauvegarde de ebx
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	0	;allocation des variables locales
	mov	ebx,	0
	imul	ebx,	4
	mov	dword [t+ebx],	3164	;Affect
	mov	ebx,	1
	imul	ebx,	4
	mov	dword [t+ebx],	152	;Affect
	mov	ecx,	1
	imul	ecx,	4
	mov	edx,	0	;mise à 0 des bits de poids fort du dividende
	mov	ebx,	0
	imul	ebx,	4
	mov	eax,	dword [t+ebx]	;affectation des bits de poids faible du dividende
	idiv	dword [t+ecx]
	mov	edx,	edx	;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée
	mov	ebx,	eax
	mov	eax,	1
	imul	eax,	4
	mov	ecx,	dword [t+eax]
	imul	ecx,	ebx
	mov	eax,	0
	imul	eax,	4
	mov	ebx,	dword [t+eax]
	sub	ebx,	ecx
	mov	eax,	2
	imul	eax,	4
	mov	dword [t+eax],	ebx	;Affect
	mov	eax,	2
	imul	eax,	4
	mov	eax,	dword [t+eax]	;Write 1
	call	iprintLF	;Write 2
	add	esp,	0	;désallocation des variables locales
	pop	edx	;restaure edx
	pop	ecx	;restaure ecx
	pop	ebx	;restaure ebx
	pop	eax	;restaure eax
	pop	ebp	;restaure la valeur de ebp
	ret
+35 −0
Original line number Diff line number Diff line
%include	'io.asm'

section	.bss
sinput :	resb	255	;reserve a 255 byte space in memory for the users input string
a :	resd	4	;variable globale

section	.text
global _start
_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	eax,	1	; code de sortie
	int 0x80
main :	push	ebp	;sauvegarde la valeur de ebp
	mov	ebp,	esp	;nouvelle valeur de ebp
	push	eax	;sauvegarde de eax
	push	ebx	;sauvegarde de ebx
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	0	;allocation des variables locales
	mov	dword [a],	4	;Affect
	mov	@1,	dword [a]
	add	@1,	1
	mov	dword [a],	@1	;Affect
	mov	eax,	dword [a]	;Write 1
	call	iprintLF	;Write 2
	add	esp,	0	;désallocation des variables locales
	pop	edx	;restaure edx
	pop	ecx	;restaure ecx
	pop	ebx	;restaure ebx
	pop	eax	;restaure eax
	pop	ebp	;restaure la valeur de ebp
	ret
+34 −0
Original line number Diff line number Diff line
%include	'io.asm'

section	.bss
sinput :	resb	255	;reserve a 255 byte space in memory for the users input string

section	.text
global _start
_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	eax,	1	; code de sortie
	int 0x80
main :	push	ebp	;sauvegarde la valeur de ebp
	mov	ebp,	esp	;nouvelle valeur de ebp
	push	eax	;sauvegarde de eax
	push	ebx	;sauvegarde de ebx
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	4	;allocation des variables locales
	mov	dword [ebp-4],	4	;Affect
	mov	@1,	dword [ebp-4]
	add	@1,	1
	mov	dword [ebp-4],	@1	;Affect
	mov	eax,	dword [ebp-4]	;Write 1
	call	iprintLF	;Write 2
	add	esp,	4	;désallocation des variables locales
	pop	edx	;restaure edx
	pop	ecx	;restaure ecx
	pop	ebx	;restaure ebx
	pop	eax	;restaure eax
	pop	ebp	;restaure la valeur de ebp
	ret
+43 −0
Original line number Diff line number Diff line
%include	'io.asm'

section	.bss
sinput :	resb	255	;reserve a 255 byte space in memory for the users input string
t :	resd	40	;variable globale

section	.text
global _start
_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	eax,	1	; code de sortie
	int 0x80
main :	push	ebp	;sauvegarde la valeur de ebp
	mov	ebp,	esp	;nouvelle valeur de ebp
	push	eax	;sauvegarde de eax
	push	ebx	;sauvegarde de ebx
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	0	;allocation des variables locales
	mov	@8,	1
	imul	@8,	4
	mov	dword [t+@8],	100	;Affect
	mov	@9,	1
	imul	@9,	4
	mov	@1,	dword [t+@9]
	add	@1,	10
	mov	@10,	1
	imul	@10,	4
	mov	dword [t+@10],	@1	;Affect
	mov	@12,	1
	imul	@12,	4
	mov	eax,	dword [t+@12]	;Write 1
	call	iprintLF	;Write 2
	add	esp,	0	;désallocation des variables locales
	pop	edx	;restaure edx
	pop	ecx	;restaure ecx
	pop	ebx	;restaure ebx
	pop	eax	;restaure eax
	pop	ebp	;restaure la valeur de ebp
	ret
+39 −0
Original line number Diff line number Diff line
%include	'io.asm'

section	.bss
sinput :	resb	255	;reserve a 255 byte space in memory for the users input string
a :	resd	4	;variable globale

section	.text
global _start
_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	eax,	1	; code de sortie
	int 0x80
main :	push	ebp	;sauvegarde la valeur de ebp
	mov	ebp,	esp	;nouvelle valeur de ebp
	push	eax	;sauvegarde de eax
	push	ebx	;sauvegarde de ebx
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	0	;allocation des variables locales
	mov	dword [a],	4	;Affect
	mov	@1,	12
	imul	@1,	2
	mov	@2,	dword [a]
	add	@2,	@1
	mov	@3,	dword [a]
	add	@3,	@2
	mov	dword [a],	@3	;Affect
	mov	eax,	dword [a]	;Write 1
	call	iprintLF	;Write 2
	add	esp,	0	;désallocation des variables locales
	pop	edx	;restaure edx
	pop	ecx	;restaure ecx
	pop	ebx	;restaure ebx
	pop	eax	;restaure eax
	pop	ebp	;restaure la valeur de ebp
	ret
+55 −0
Original line number Diff line number Diff line
%include	'io.asm'

section	.bss
sinput :	resb	255	;reserve a 255 byte space in memory for the users input string
t :	resd	40	;variable globale

section	.text
global _start
_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	eax,	1	; code de sortie
	int 0x80
main :	push	ebp	;sauvegarde la valeur de ebp
	mov	ebp,	esp	;nouvelle valeur de ebp
	push	eax	;sauvegarde de eax
	push	ebx	;sauvegarde de ebx
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	0	;allocation des variables locales
	mov	@9,	1
	imul	@9,	4
	mov	dword [t+@9],	2	;Affect
	mov	@10,	2
	imul	@10,	4
	mov	dword [t+@10],	3	;Affect
	mov	@11,	3
	imul	@11,	4
	mov	dword [t+@11],	1	;Affect
	mov	@12,	1
	imul	@12,	4
	mov	@1,	dword [t+@12]
	mov	@13,	2
	imul	@13,	4
	imul	@1,	dword [t+@13]
	mov	@14,	3
	imul	@14,	4
	mov	@2,	dword [t+@14]
	add	@2,	@1
	mov	@15,	3
	imul	@15,	4
	mov	dword [t+@15],	@2	;Affect
	mov	@17,	3
	imul	@17,	4
	mov	eax,	dword [t+@17]	;Write 1
	call	iprintLF	;Write 2
	add	esp,	0	;désallocation des variables locales
	pop	edx	;restaure edx
	pop	ecx	;restaure ecx
	pop	ebx	;restaure ebx
	pop	eax	;restaure eax
	pop	ebp	;restaure la valeur de ebp
	ret
+40 −0
Original line number Diff line number Diff line
%include	'io.asm'

section	.bss
sinput :	resb	255	;reserve a 255 byte space in memory for the users input string

section	.text
global _start
_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	eax,	1	; code de sortie
	int 0x80
main :	push	ebp	;sauvegarde la valeur de ebp
	mov	ebp,	esp	;nouvelle valeur de ebp
	push	eax	;sauvegarde de eax
	push	ebx	;sauvegarde de ebx
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	0	;allocation des variables locales
	mov	edx,	0	;mise à 0 des bits de poids fort du dividende
	mov	eax,	5	;affectation des bits de poids faible du dividende
	mov	@12,	3
	idiv	@12
	mov	edx,	edx	;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée
	mov	@1,	eax
	mov	@2,	3
	imul	@2,	@1
	mov	@3,	5
	sub	@3,	@2
	mov	eax,	@3	;Write 1
	call	iprintLF	;Write 2
	add	esp,	0	;désallocation des variables locales
	pop	edx	;restaure edx
	pop	ecx	;restaure ecx
	pop	ebx	;restaure ebx
	pop	eax	;restaure eax
	pop	ebp	;restaure la valeur de ebp
	ret
+42 −0
Original line number Diff line number Diff line
%include	'io.asm'

section	.bss
sinput :	resb	255	;reserve a 255 byte space in memory for the users input string

section	.text
global _start
_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	eax,	1	; code de sortie
	int 0x80
main :	push	ebp	;sauvegarde la valeur de ebp
	mov	ebp,	esp	;nouvelle valeur de ebp
	push	eax	;sauvegarde de eax
	push	ebx	;sauvegarde de ebx
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	0	;allocation des variables locales
	mov	edx,	0	;mise à 0 des bits de poids fort du dividende
	mov	eax,	12	;affectation des bits de poids faible du dividende
	mov	@13,	7
	idiv	@13
	mov	edx,	edx	;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée
	mov	@1,	eax
	mov	@2,	7
	imul	@2,	@1
	mov	@3,	12
	sub	@3,	@2
	mov	@4,	@3
	add	@4,	5
	mov	eax,	@4	;Write 1
	call	iprintLF	;Write 2
	add	esp,	0	;désallocation des variables locales
	pop	edx	;restaure edx
	pop	ecx	;restaure ecx
	pop	ebx	;restaure ebx
	pop	eax	;restaure eax
	pop	ebp	;restaure la valeur de ebp
	ret
+44 −0
Original line number Diff line number Diff line
%include	'io.asm'

section	.bss
sinput :	resb	255	;reserve a 255 byte space in memory for the users input string

section	.text
global _start
_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	eax,	1	; code de sortie
	int 0x80
main :	push	ebp	;sauvegarde la valeur de ebp
	mov	ebp,	esp	;nouvelle valeur de ebp
	push	eax	;sauvegarde de eax
	push	ebx	;sauvegarde de ebx
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	0	;allocation des variables locales
	mov	@1,	2
	imul	@1,	7
	mov	edx,	0	;mise à 0 des bits de poids fort du dividende
	mov	eax,	@1	;affectation des bits de poids faible du dividende
	mov	@14,	5
	idiv	@14
	mov	edx,	edx	;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée
	mov	@2,	eax
	mov	@3,	5
	imul	@3,	@2
	mov	@4,	@1
	sub	@4,	@3
	mov	@5,	@4
	add	@5,	5
	mov	eax,	@5	;Write 1
	call	iprintLF	;Write 2
	add	esp,	0	;désallocation des variables locales
	pop	edx	;restaure edx
	pop	ecx	;restaure ecx
	pop	ebx	;restaure ebx
	pop	eax	;restaure eax
	pop	ebp	;restaure la valeur de ebp
	ret
+43 −0
Original line number Diff line number Diff line
%include	'io.asm'

section	.bss
sinput :	resb	255	;reserve a 255 byte space in memory for the users input string
a :	resd	4	;variable globale
b :	resd	4	;variable globale

section	.text
global _start
_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	eax,	1	; code de sortie
	int 0x80
main :	push	ebp	;sauvegarde la valeur de ebp
	mov	ebp,	esp	;nouvelle valeur de ebp
	push	eax	;sauvegarde de eax
	push	ebx	;sauvegarde de ebx
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	0	;allocation des variables locales
	mov	dword [a],	12	;Affect
	mov	dword [b],	5	;Affect
	mov	edx,	0	;mise à 0 des bits de poids fort du dividende
	mov	eax,	dword [a]	;affectation des bits de poids faible du dividende
	idiv	dword [b]
	mov	edx,	edx	;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée
	mov	@1,	eax
	mov	@2,	dword [b]
	imul	@2,	@1
	mov	@3,	dword [a]
	sub	@3,	@2
	mov	eax,	@3	;Write 1
	call	iprintLF	;Write 2
	add	esp,	0	;désallocation des variables locales
	pop	edx	;restaure edx
	pop	ecx	;restaure ecx
	pop	ebx	;restaure ebx
	pop	eax	;restaure eax
	pop	ebp	;restaure la valeur de ebp
	ret
+59 −0
Original line number Diff line number Diff line
%include	'io.asm'

section	.bss
sinput :	resb	255	;reserve a 255 byte space in memory for the users input string
t :	resd	40	;variable globale

section	.text
global _start
_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	eax,	1	; code de sortie
	int 0x80
main :	push	ebp	;sauvegarde la valeur de ebp
	mov	ebp,	esp	;nouvelle valeur de ebp
	push	eax	;sauvegarde de eax
	push	ebx	;sauvegarde de ebx
	push	ecx	;sauvegarde de ecx
	push	edx	;sauvegarde de edx
	sub	esp,	0	;allocation des variables locales
	mov	@10,	0
	imul	@10,	4
	mov	dword [t+@10],	3164	;Affect
	mov	@11,	1
	imul	@11,	4
	mov	dword [t+@11],	152	;Affect
	mov	@12,	1
	imul	@12,	4
	mov	edx,	0	;mise à 0 des bits de poids fort du dividende
	mov	@15,	0
	imul	@15,	4
	mov	eax,	dword [t+@15]	;affectation des bits de poids faible du dividende
	idiv	dword [t+@12]
	mov	edx,	edx	;rend explicite l'utilisation de edx pour ne pas que sa valeur soit modifiée
	mov	@1,	eax
	mov	@17,	1
	imul	@17,	4
	mov	@2,	dword [t+@17]
	imul	@2,	@1
	mov	@18,	0
	imul	@18,	4
	mov	@3,	dword [t+@18]
	sub	@3,	@2
	mov	@19,	2
	imul	@19,	4
	mov	dword [t+@19],	@3	;Affect
	mov	@21,	2
	imul	@21,	4
	mov	eax,	dword [t+@21]	;Write 1
	call	iprintLF	;Write 2
	add	esp,	0	;désallocation des variables locales
	pop	edx	;restaure edx
	pop	ecx	;restaure ecx
	pop	ebx	;restaure ebx
	pop	eax	;restaure eax
	pop	ebp	;restaure la valeur de ebp
	ret
+1 −0
Original line number Diff line number Diff line
(SaProg (SaLDecVar (SaDecVarSimple a entier) null) (SaLDecFonc (SaDecFonc main nul null null (SaInstBloc (SaLInst (SaInstAffect (SaVarSimple a) 4) (SaLInst (SaIncr (SaVarSimple a) 1) (SaLInst (SaInstEcriture (SaExpVar (SaVarSimple a))) null))))) null))
+1 −0
Original line number Diff line number Diff line
(SaProg null (SaLDecFonc (SaDecFonc main nul null (SaLDecVar (SaDecVarSimple a entier) null) (SaInstBloc (SaLInst (SaInstAffect (SaVarSimple a) 4) (SaLInst (SaIncr (SaVarSimple a) 1) (SaLInst (SaInstEcriture (SaExpVar (SaVarSimple a))) null))))) null))
+1 −0

File added.

Preview size limit exceeded, changes collapsed.

+1 −0

File added.

Preview size limit exceeded, changes collapsed.

+1 −0

File added.

Preview size limit exceeded, changes collapsed.

+98 −0

File added.

Preview size limit exceeded, changes collapsed.

+98 −0

File added.

Preview size limit exceeded, changes collapsed.

+140 −0

File added.

Preview size limit exceeded, changes collapsed.

+114 −0

File added.

Preview size limit exceeded, changes collapsed.

+246 −0

File added.

Preview size limit exceeded, changes collapsed.

+4 −0

File added.

Preview size limit exceeded, changes collapsed.

+4 −0

File added.

Preview size limit exceeded, changes collapsed.

+4 −0

File added.

Preview size limit exceeded, changes collapsed.

+4 −0

File added.

Preview size limit exceeded, changes collapsed.

+4 −0

File added.

Preview size limit exceeded, changes collapsed.