diff --git a/src/Compiler.java b/src/Compiler.java
index b13f46aaa0f4232677148c5859479f5974d786b1..60acf54d11d312b4198d0893767ea42fd6ab0fd0 100644
--- a/src/Compiler.java
+++ b/src/Compiler.java
@@ -39,10 +39,10 @@ public class Compiler {
         //IRTest();
 
         //后端代码生成测试
-        //CodeGenTest();
+        CodeGenTest();
 
         //寄存器分配测试
-        RegAllocTest();
+        //RegAllocTest();
     }
 
     public static void LexerTest() throws IOException {
@@ -89,7 +89,7 @@ public class Compiler {
         Program program = new Program(ast);
         HashSet<Function> functions = new HashSet<>(program.getFunctions().values());
         DFG.doDFG(functions);
-        Mem2Reg.doMem2Reg(functions);
+        //Mem2Reg.doMem2Reg(functions);
         BufferedWriter writer = new BufferedWriter(new FileWriter("out.ll"));
         program.printIR(writer);
         writer.close();
diff --git a/src/backend/RegAlloc.java b/src/backend/RegAlloc.java
index dacb0cbf46f6728c708546638ac2cebe6e81e5e2..4664e4739305fc509634e8adf10aeaca2f7cbada 100644
--- a/src/backend/RegAlloc.java
+++ b/src/backend/RegAlloc.java
@@ -112,13 +112,13 @@ public class RegAlloc {
                 for (int i = 0; i < instrHead.regUse.size(); i++) {
                     if (instrHead.regUse.get(i) instanceof AsmVirReg) {
                         int nowColor = color.get(instrHead.regUse.get(i));
-                        instrHead.addUseReg(instrHead.regUse.get(i), RegGeter.AllRegsInt.get(nowColor));
+                        instrHead.changeUseReg(i,instrHead.regUse.get(i), RegGeter.AllRegsInt.get(nowColor));
                     }
                 }
                 for (int i = 0; i < instrHead.regDef.size(); i++) {
                     if (instrHead.regDef.get(i) instanceof AsmVirReg) {
                         int nowColor = color.get(instrHead.regDef.get(i));
-                        instrHead.addDefReg(instrHead.regDef.get(i), RegGeter.AllRegsInt.get(nowColor));
+                        instrHead.changeDstReg(i, instrHead.regDef.get(i), RegGeter.AllRegsInt.get(nowColor));
                     }
                 }
                 instrHead = (AsmInstr) instrHead.getNext();
@@ -499,7 +499,7 @@ public class RegAlloc {
                         AsmVirReg v1 = new AsmVirReg();
                         for (int i = 0; i< instrHead.regUse.size();i++) {
                             if (instrHead.regUse.get(i) == v) {
-                                instrHead.addUseReg(instrHead.regUse.get(i), v1);
+                                instrHead.changeUseReg(i,instrHead.regUse.get(i), v1);
                             }
                         }
                         AsmImm12 place = new AsmImm12(spillPlace);
@@ -511,7 +511,7 @@ public class RegAlloc {
                         AsmVirReg v2 = new AsmVirReg();
                         for (int i = 0; i < instrHead.regDef.size(); i++) {
                             if (instrHead.regDef.get(i) == v) {
-                                instrHead.addDefReg(instrHead.regUse.get(i), v2);
+                                instrHead.changeDstReg(i,instrHead.regUse.get(i), v2);
                             }
                         }
                         AsmImm12 place = new AsmImm12(spillPlace);
diff --git a/src/backend/asmInstr/AsmInstr.java b/src/backend/asmInstr/AsmInstr.java
index d91be166da2cccf65b04dfacb424ba056ff34fbf..26973fa9c9169db610c5d252de54581869859e69 100644
--- a/src/backend/asmInstr/AsmInstr.java
+++ b/src/backend/asmInstr/AsmInstr.java
@@ -1,6 +1,9 @@
 package backend.asmInstr;
 
 import Utils.CustomList;
+import backend.asmInstr.asmBinary.AsmBinary;
+import backend.asmInstr.asmLS.AsmL;
+import backend.asmInstr.asmLS.AsmS;
 import backend.itemStructure.AsmOperand;
 import backend.regs.AsmReg;
 
@@ -18,6 +21,7 @@ public class AsmInstr extends CustomList.Node {
     public ArrayList<AsmReg> regUse = new ArrayList<>();
 
     private String type;
+
     public AsmInstr(String type) {
         this.type = type;
     }
@@ -36,4 +40,42 @@ public class AsmInstr extends CustomList.Node {
             regUse.add((AsmReg) newReg);
     }
 
+    public void changeUseReg(int index ,AsmReg oldReg, AsmReg newReg) {
+        if (type == "AsmL") {
+            if (this.regUse.get(index) == oldReg) {
+                this.regUse.set(index, newReg);
+                AsmL asmL = (AsmL) this;
+                asmL.ReSetSrc(newReg);
+            }
+        } else if (type == "AsmS") {
+            if (this.regUse.get(index) == oldReg) {
+                this.regUse.set(index, newReg);
+                AsmS asmS = (AsmS) this;
+                asmS.ReSetSrc(newReg);
+            }
+        } else if (type == "AsmBinary") {
+            if (this.regUse.get(index) == oldReg) {
+                this.regUse.set(index, newReg);
+                AsmBinary asmBinary = (AsmBinary) this;
+                asmBinary.ReSetSrc(index, newReg);
+            }
+        }
+    }
+    public void changeDstReg(int index ,AsmReg oldReg, AsmReg newReg) {
+        if (type == "AsmL") {
+            if (this.regDef.get(index) == oldReg) {
+                this.regDef.set(index, newReg);
+                AsmL asmL = (AsmL) this;
+                asmL.ReSetDst(newReg);
+            }
+        } else if (type == "AsmBinary") {
+            if (this.regDef.get(index) == oldReg) {
+                this.regDef.set(index, newReg);
+                AsmBinary asmBinary = (AsmBinary) this;
+                asmBinary.ReSetDst(newReg);
+            }
+        }
+    }
+
+
 }
diff --git a/src/backend/asmInstr/asmBinary/AsmBinary.java b/src/backend/asmInstr/asmBinary/AsmBinary.java
index b5542d6e29af897470c5d94dfc36700f89ba2f0e..89101ee6c14f78ecde10cb3efdb872cf6e117f81 100644
--- a/src/backend/asmInstr/asmBinary/AsmBinary.java
+++ b/src/backend/asmInstr/asmBinary/AsmBinary.java
@@ -27,4 +27,15 @@ public class AsmBinary extends AsmInstr {
         addUseReg(this.src2, src2);
         this.src2 = src2;
     }
+    public void ReSetSrc(int index,AsmOperand src) {
+        if (index == 0) {
+            this.src1 = src;
+        } else if (index == 1) {
+            this.src2 = src;
+        }
+    }
+
+    public void ReSetDst(AsmOperand dst) {
+        this.dst = dst;
+    }
 }
diff --git a/src/backend/asmInstr/asmLS/AsmL.java b/src/backend/asmInstr/asmLS/AsmL.java
index c1fa78f044f9316165612c29e064e2cef382c981..7c2c9e9009127b4e07726f3625bae2386e2a11a1 100644
--- a/src/backend/asmInstr/asmLS/AsmL.java
+++ b/src/backend/asmInstr/asmLS/AsmL.java
@@ -31,4 +31,11 @@ public class AsmL extends AsmInstr {
     public AsmOperand getSrc() {
         return src;
     }
+
+    public void ReSetSrc(AsmOperand src) {
+        this.src = src;
+    }
+    public void ReSetDst(AsmOperand dst) {
+        this.dst = dst;
+    }
 }
diff --git a/src/backend/asmInstr/asmLS/AsmS.java b/src/backend/asmInstr/asmLS/AsmS.java
index c0920e066ee30a33c694b19b703754a1b2d936c6..3931d108527166e791f17dfca4593d55772486e3 100644
--- a/src/backend/asmInstr/asmLS/AsmS.java
+++ b/src/backend/asmInstr/asmLS/AsmS.java
@@ -21,4 +21,7 @@ public class AsmS extends AsmInstr {
         addUseReg(this.offset, offset);
         this.offset = offset;
     }
+    public void ReSetSrc(AsmOperand src) {
+        this.src = src;
+    }
 }
diff --git a/src/backend/asmInstr/asmTermin/AsmCall.java b/src/backend/asmInstr/asmTermin/AsmCall.java
index 15a389c9535f4c5e2591e5a008878cf7bd53155e..ef1924e26a01434b66a8ceb9db2d9bf3d2f7c71c 100644
--- a/src/backend/asmInstr/asmTermin/AsmCall.java
+++ b/src/backend/asmInstr/asmTermin/AsmCall.java
@@ -6,6 +6,7 @@ public class AsmCall extends AsmInstr {
     public String funcName;
 
     public AsmCall(String funcName) {
+        super("AsmCall");
         this.funcName = funcName;
     }
 
diff --git a/src/backend/asmInstr/asmTermin/AsmRet.java b/src/backend/asmInstr/asmTermin/AsmRet.java
index a22824c94e60fd4c577faad7898bf1366351c1ff..f0192ba5b3d1277360352652f80f79f6daa556c7 100644
--- a/src/backend/asmInstr/asmTermin/AsmRet.java
+++ b/src/backend/asmInstr/asmTermin/AsmRet.java
@@ -3,6 +3,9 @@ package backend.asmInstr.asmTermin;
 import backend.asmInstr.AsmInstr;
 
 public class AsmRet extends AsmInstr {
+    public AsmRet() {
+        super("ret");
+    }
     public String toString() {
         return "ret";
     }