public void and(TACCommand c) {
        if ((c.getP1() instanceof VarLocation) && (c.getP2() instanceof Literal)) {
            VarLocation loc = (VarLocation) c.getP1();
            assembly.add("      movl " + offset(loc) + ", %eax"); 
            assembly.add("      and $" + c.getP2().toString() + ", %eax");
            VarLocation res = (VarLocation) c.getP3();
            assembly.add("      movl " + " %eax, "  + offset(res));
        }
        if ((c.getP2() instanceof VarLocation) && (c.getP1() instanceof Literal)) {
            VarLocation loc = (VarLocation) c.getP2();
            assembly.add("      movl " + offset(loc) + ", %eax"); 
            assembly.add("      and $" + c.getP1().toString() + ", %eax");
            VarLocation res = (VarLocation) c.getP3();
            assembly.add("      movl " + " %eax, "  + offset(res)); //guardo el resultado en el tercer parametro        
        }
        if ((c.getP1() instanceof Literal) && (c.getP2() instanceof Literal)) {
            assembly.add("      movl $" + c.getP2().toString() + ", %eax"); //muevo un literal a un registro
            assembly.add("      and $" + c.getP1().toString() + ", %eax");
            VarLocation res = (VarLocation) c.getP3();
            assembly.add("      movl " + " %eax, "  + offset(res));
        }
        if ((c.getP1() instanceof VarLocation) && (c.getP2() instanceof VarLocation)) {
            VarLocation loc1 = (VarLocation) c.getP1();
            VarLocation loc2 = (VarLocation) c.getP2();
            assembly.add("      movl " + offset(loc1) + ", %eax"); 
            assembly.add("      movl " + offset(loc2) + ", %edx"); 
            assembly.add("      and %edx, %eax"); //sumo los dos registros
            VarLocation res = (VarLocation) c.getP3();
            assembly.add("      movl " + " %eax, " + offset(res));
        }
    }