diff --git a/ROM.bin b/ROM.bin
index be9bf96..7076271 100644
--- a/ROM.bin
+++ b/ROM.bin
@@ -3327,70 +3327,70 @@ v3.0 hex words addressed
67e8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
67f0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
67f8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6800: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6808: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6810: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6818: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6820: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6828: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6830: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6838: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6840: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6848: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6850: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6858: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6860: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6868: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6870: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6878: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6880: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6888: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6890: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6898: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-68a0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-68a8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-68b0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-68b8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-68c0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-68c8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-68d0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-68d8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-68e0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-68e8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-68f0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-68f8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6900: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6908: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6910: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6918: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6920: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6928: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6930: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6938: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6940: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6948: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6950: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6958: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6960: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6968: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6970: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6978: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6980: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6988: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6990: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6998: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-69a0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-69a8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-69b0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-69b8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-69c0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-69c8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-69d0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-69d8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-69e0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-69e8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-69f0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-69f8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
+6800: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+6808: 0000004e 00000032 00000086 00000030 40000000 40000000 40000000 40000000
+6810: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+6818: 0000004e 00000032 00000086 00000030 40000000 40000000 40000000 40000000
+6820: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+6828: 0000004e 00000032 00000086 00000030 40000000 40000000 40000000 40000000
+6830: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+6838: 0000004e 00000032 00000086 00000030 40000000 40000000 40000000 40000000
+6840: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+6848: 0000004e 00000032 00000086 00000030 40000000 40000000 40000000 40000000
+6850: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+6858: 0000004e 00000032 00000086 00000030 40000000 40000000 40000000 40000000
+6860: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+6868: 0000004e 00000032 00000086 00000030 40000000 40000000 40000000 40000000
+6870: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+6878: 0000004e 00000032 00000086 00000030 40000000 40000000 40000000 40000000
+6880: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+6888: 0000004e 00000032 00000086 00000030 40000000 40000000 40000000 40000000
+6890: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+6898: 0000004e 00000032 00000086 00000030 40000000 40000000 40000000 40000000
+68a0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+68a8: 0000004e 00000032 00000086 00000030 40000000 40000000 40000000 40000000
+68b0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+68b8: 0000004e 00000032 00000086 00000030 40000000 40000000 40000000 40000000
+68c0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+68c8: 0000004e 00000032 00000086 00000030 40000000 40000000 40000000 40000000
+68d0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+68d8: 0000004e 00000032 00000086 00000030 40000000 40000000 40000000 40000000
+68e0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+68e8: 0000004e 00000032 00000086 00000030 40000000 40000000 40000000 40000000
+68f0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+68f8: 0000004e 00000032 00000086 00000030 40000000 40000000 40000000 40000000
+6900: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+6908: 0000004e 00000032 00001080 00000030 40000000 40000000 40000000 40000000
+6910: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+6918: 0000004e 00000032 00001080 00000030 40000000 40000000 40000000 40000000
+6920: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+6928: 0000004e 00000032 00001080 00000030 40000000 40000000 40000000 40000000
+6930: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+6938: 0000004e 00000032 00001080 00000030 40000000 40000000 40000000 40000000
+6940: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+6948: 0000004e 00000032 00001080 00000030 40000000 40000000 40000000 40000000
+6950: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+6958: 0000004e 00000032 00001080 00000030 40000000 40000000 40000000 40000000
+6960: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+6968: 0000004e 00000032 00001080 00000030 40000000 40000000 40000000 40000000
+6970: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+6978: 0000004e 00000032 00001080 00000030 40000000 40000000 40000000 40000000
+6980: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+6988: 0000004e 00000032 00001080 00000030 40000000 40000000 40000000 40000000
+6990: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+6998: 0000004e 00000032 00001080 00000030 40000000 40000000 40000000 40000000
+69a0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+69a8: 0000004e 00000032 00001080 00000030 40000000 40000000 40000000 40000000
+69b0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+69b8: 0000004e 00000032 00001080 00000030 40000000 40000000 40000000 40000000
+69c0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+69c8: 0000004e 00000032 00001080 00000030 40000000 40000000 40000000 40000000
+69d0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+69d8: 0000004e 00000032 00001080 00000030 40000000 40000000 40000000 40000000
+69e0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+69e8: 0000004e 00000032 00001080 00000030 40000000 40000000 40000000 40000000
+69f0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000010e 001601c0
+69f8: 0000004e 00000032 00001080 00000030 40000000 40000000 40000000 40000000
6a00: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
6a08: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
6a10: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
@@ -3487,38 +3487,38 @@ v3.0 hex words addressed
6ce8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
6cf0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
6cf8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6d00: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6d08: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6d10: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6d18: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6d20: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6d28: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6d30: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6d38: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6d40: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6d48: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6d50: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6d58: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6d60: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6d68: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6d70: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6d78: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6d80: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6d88: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6d90: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6d98: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6da0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6da8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6db0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6db8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6dc0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6dc8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6dd0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6dd8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6de0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6de8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6df0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
-6df8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
+6d00: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000004e 00000032
+6d08: 00002004 0000010e 001401c0 00000030 40000000 40000000 40000000 40000000
+6d10: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000004e 00000032
+6d18: 00002004 0000010e 001401c0 00000030 40000000 40000000 40000000 40000000
+6d20: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000004e 00000032
+6d28: 00002004 0000010e 001401c0 00000030 40000000 40000000 40000000 40000000
+6d30: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000004e 00000032
+6d38: 00002004 0000010e 001401c0 00000030 40000000 40000000 40000000 40000000
+6d40: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000004e 00000032
+6d48: 00002004 0000010e 001401c0 00000030 40000000 40000000 40000000 40000000
+6d50: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000004e 00000032
+6d58: 00002004 0000010e 001401c0 00000030 40000000 40000000 40000000 40000000
+6d60: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000004e 00000032
+6d68: 00002004 0000010e 001401c0 00000030 40000000 40000000 40000000 40000000
+6d70: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000004e 00000032
+6d78: 00002004 0000010e 001401c0 00000030 40000000 40000000 40000000 40000000
+6d80: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000004e 00000032
+6d88: 00002004 0000010e 001401c0 00000030 40000000 40000000 40000000 40000000
+6d90: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000004e 00000032
+6d98: 00002004 0000010e 001401c0 00000030 40000000 40000000 40000000 40000000
+6da0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000004e 00000032
+6da8: 00002004 0000010e 001401c0 00000030 40000000 40000000 40000000 40000000
+6db0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000004e 00000032
+6db8: 00002004 0000010e 001401c0 00000030 40000000 40000000 40000000 40000000
+6dc0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000004e 00000032
+6dc8: 00002004 0000010e 001401c0 00000030 40000000 40000000 40000000 40000000
+6dd0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000004e 00000032
+6dd8: 00002004 0000010e 001401c0 00000030 40000000 40000000 40000000 40000000
+6de0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000004e 00000032
+6de8: 00002004 0000010e 001401c0 00000030 40000000 40000000 40000000 40000000
+6df0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000004e 00000032
+6df8: 00002004 0000010e 001401c0 00000030 40000000 40000000 40000000 40000000
6e00: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
6e08: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
6e10: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
diff --git a/assembly.py b/assembly.py
index eb3007e..225a647 100644
--- a/assembly.py
+++ b/assembly.py
@@ -33,6 +33,9 @@ JNZ = 7 << pin.ADDR_1_SHIFT | pin.ADDR_1 # 非0跳转
JP = 8 << pin.ADDR_1_SHIFT | pin.ADDR_1 # 奇数跳转
JNP = 9 << pin.ADDR_1_SHIFT | pin.ADDR_1 # 偶数跳转
+PUSH = 10 << pin.ADDR_1_SHIFT | pin.ADDR_1
+POP = 11 << pin.ADDR_1_SHIFT | pin.ADDR_1
+
NOP = 0b0
HLT = 0b11_1111
@@ -237,6 +240,59 @@ INSTRUCTIONS = {
pin.DST_OUT | pin.PC_IN,
]
},
+ PUSH: {
+ pin.AM_INS: [ # push 5
+
+ # 计算得到新的栈顶地址
+ pin.SP_OUT | pin.A_IN,
+ pin.OP_DEC | pin.ALU_OUT | pin.SP_IN, # 替换sp为新的sp
+
+ pin.SP_OUT | pin.MAR_IN, # 修改 mar偏移寄存器
+ # 修改 msr段地址寄存器
+ pin.SS_OUT | pin.MSR_IN,
+
+ # 根据 msr段地址 和mar偏移地址 控制内存写
+ pin.RAM_IN | pin.DST_OUT,
+
+ # 修改msr即可, mar会被pc修改
+ pin.MSR_IN | pin.CS_OUT,
+
+ ],
+ pin.AM_REG: [ # push b
+ # 计算得到新的栈顶地址
+ pin.SP_OUT | pin.A_IN,
+ pin.OP_DEC | pin.ALU_OUT | pin.SP_IN, # 替换sp为新的sp
+
+ pin.SP_OUT | pin.MAR_IN, # 修改 mar偏移寄存器
+ # 修改 msr段地址寄存器
+ pin.SS_OUT | pin.MSR_IN,
+
+
+ # 根据 msr段地址 和mar偏移地址 控制内存写
+ pin.RAM_IN | pin.DST_R,
+
+ # 修改msr即可, mar会被pc修改
+ pin.MSR_IN | pin.CS_OUT,
+ ]
+ },
+ POP: {
+ pin.AM_REG: [ # pop d
+
+ # 修改段地址和偏移地址
+ pin.SP_OUT | pin.MAR_IN,
+ pin.SS_OUT | pin.MSR_IN,
+ # 读出内存数据到 dst_w
+ pin.RAM_OUT | pin.DST_W,
+
+ # 对sp增加1
+ pin.SP_OUT | pin.A_IN,
+ pin.OP_INC | pin.ALU_OUT | pin.SP_IN,
+
+ # 恢复 msr
+ pin.CS_OUT | pin.MSR_IN,
+
+ ]
+ }
},
0: {
NOP: [
diff --git a/compiler.py b/compiler.py
index 877c971..7916b9c 100644
--- a/compiler.py
+++ b/compiler.py
@@ -7,10 +7,12 @@ from controller import get_hex_str, save_hex_str
# 允许操作的寄存器
ALLOW_REGISTER_MAP = {
- "a": pin.A,
- "b": pin.B,
+ # "a": pin.A, ALU经常使用这俩寄存器, 还是禁止使用算了
+ # "b": pin.B,
"c": pin.C,
"d": pin.D,
+ "ss": pin.SS,
+ "sp": pin.SP,
}
OP2_STR_MAP = {
@@ -34,6 +36,8 @@ OP1_STR_MAP = {
"jnz": ASM.JNZ,
"jp": ASM.JP,
"jnp": ASM.JNP,
+ "push": ASM.PUSH,
+ "pop": ASM.POP,
}
OP0_STR_MAP = {
diff --git a/cpu.circ b/cpu.circ
index 42ba5f9..bf97505 100644
--- a/cpu.circ
+++ b/cpu.circ
@@ -3917,6 +3917,10 @@
+
+
+
+
@@ -5503,6 +5507,58 @@ c006 9*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 10e 1601c0
+4e 32 86 30 4*40000000 8040 1c0a4 8040
+1c0c4 8040 1c0e4 10e 1601c0 4e 32 86
+30 4*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
+10e 1601c0 4e 32 86 30 4*40000000 8040
+1c0a4 8040 1c0c4 8040 1c0e4 10e 1601c0 4e
+32 86 30 4*40000000 8040 1c0a4 8040 1c0c4
+8040 1c0e4 10e 1601c0 4e 32 86 30
+4*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10e
+1601c0 4e 32 86 30 4*40000000 8040 1c0a4
+8040 1c0c4 8040 1c0e4 10e 1601c0 4e 32
+86 30 4*40000000 8040 1c0a4 8040 1c0c4 8040
+1c0e4 10e 1601c0 4e 32 86 30 4*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 10e 1601c0
+4e 32 86 30 4*40000000 8040 1c0a4 8040
+1c0c4 8040 1c0e4 10e 1601c0 4e 32 86
+30 4*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
+10e 1601c0 4e 32 86 30 4*40000000 8040
+1c0a4 8040 1c0c4 8040 1c0e4 10e 1601c0 4e
+32 86 30 4*40000000 8040 1c0a4 8040 1c0c4
+8040 1c0e4 10e 1601c0 4e 32 86 30
+4*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10e
+1601c0 4e 32 86 30 4*40000000 8040 1c0a4
+8040 1c0c4 8040 1c0e4 10e 1601c0 4e 32
+86 30 4*40000000 8040 1c0a4 8040 1c0c4 8040
+1c0e4 10e 1601c0 4e 32 86 30 4*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 10e 1601c0
+4e 32 1080 30 4*40000000 8040 1c0a4 8040
+1c0c4 8040 1c0e4 10e 1601c0 4e 32 1080
+30 4*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
+10e 1601c0 4e 32 1080 30 4*40000000 8040
+1c0a4 8040 1c0c4 8040 1c0e4 10e 1601c0 4e
+32 1080 30 4*40000000 8040 1c0a4 8040 1c0c4
+8040 1c0e4 10e 1601c0 4e 32 1080 30
+4*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10e
+1601c0 4e 32 1080 30 4*40000000 8040 1c0a4
+8040 1c0c4 8040 1c0e4 10e 1601c0 4e 32
+1080 30 4*40000000 8040 1c0a4 8040 1c0c4 8040
+1c0e4 10e 1601c0 4e 32 1080 30 4*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 10e 1601c0
+4e 32 1080 30 4*40000000 8040 1c0a4 8040
+1c0c4 8040 1c0e4 10e 1601c0 4e 32 1080
+30 4*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
+10e 1601c0 4e 32 1080 30 4*40000000 8040
+1c0a4 8040 1c0c4 8040 1c0e4 10e 1601c0 4e
+32 1080 30 4*40000000 8040 1c0a4 8040 1c0c4
+8040 1c0e4 10e 1601c0 4e 32 1080 30
+4*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10e
+1601c0 4e 32 1080 30 4*40000000 8040 1c0a4
+8040 1c0c4 8040 1c0e4 10e 1601c0 4e 32
+1080 30 4*40000000 8040 1c0a4 8040 1c0c4 8040
+1c0e4 10e 1601c0 4e 32 1080 30 4*40000000
8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
@@ -5545,48 +5601,32 @@ c006 9*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
-8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
-1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
-8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
-1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4
-8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
-1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
-10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
-8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
-1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
-8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
-1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4
-8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
-1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
-10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
-8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
-1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
-8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
-1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4
-8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
-1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
-10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
-8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
-1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
-8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
-1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4
-8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
-1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
-10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
-8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
-1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
-8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
-1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4
-8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
-1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
-10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
-8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
-1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
-8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
-1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4
-8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
-1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
-10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 4e 32
+2004 10e 1401c0 30 4*40000000 8040 1c0a4 8040
+1c0c4 8040 1c0e4 4e 32 2004 10e 1401c0
+30 4*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
+4e 32 2004 10e 1401c0 30 4*40000000 8040
+1c0a4 8040 1c0c4 8040 1c0e4 4e 32 2004
+10e 1401c0 30 4*40000000 8040 1c0a4 8040 1c0c4
+8040 1c0e4 4e 32 2004 10e 1401c0 30
+4*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 4e
+32 2004 10e 1401c0 30 4*40000000 8040 1c0a4
+8040 1c0c4 8040 1c0e4 4e 32 2004 10e
+1401c0 30 4*40000000 8040 1c0a4 8040 1c0c4 8040
+1c0e4 4e 32 2004 10e 1401c0 30 4*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 4e 32
+2004 10e 1401c0 30 4*40000000 8040 1c0a4 8040
+1c0c4 8040 1c0e4 4e 32 2004 10e 1401c0
+30 4*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
+4e 32 2004 10e 1401c0 30 4*40000000 8040
+1c0a4 8040 1c0c4 8040 1c0e4 4e 32 2004
+10e 1401c0 30 4*40000000 8040 1c0a4 8040 1c0c4
+8040 1c0e4 4e 32 2004 10e 1401c0 30
+4*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 4e
+32 2004 10e 1401c0 30 4*40000000 8040 1c0a4
+8040 1c0c4 8040 1c0e4 4e 32 2004 10e
+1401c0 30 4*40000000 8040 1c0a4 8040 1c0c4 8040
+1c0e4 4e 32 2004 10e 1401c0 30 4*40000000
8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
@@ -8133,7 +8173,9 @@ c006 9*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
+
+
diff --git a/program.bin b/program.bin
index b74f172..4a5b9b3 100644
--- a/program.bin
+++ b/program.bin
@@ -1,23 +1,6 @@
v3.0 hex words addressed
-0000: 84 0b 00 41 0b 00 b4 0b
-0008: 05 58 0f 00 4c 03 00 45
-0010: 0b 00 b4 0b 00 58 03 00
-0018: 4c 0f 00 3f 00 00 84 08
-0020: 05 84 0b 04 e5 08 0b 49
-0028: 08 00 3f 00 00 84 08 fd
-0030: 41 08 00 41 08 00 41 08
-0038: 00 45 08 00 45 08 00 45
-0040: 08 00 45 08 00 45 08 00
-0048: 45 08 00 45 08 00 3f 00
-0050: 00 84 09 05 94 09 03 85
-0058: 08 09 95 08 09 94 08 fa
-0060: 84 08 00 84 09 00 95 08
-0068: 09 84 08 05 84 09 02 a5
-0070: 08 09 a4 08 04 84 08 04
-0078: 84 09 02 a5 08 09 3f 00
-0080: 00 88 33 99 86 08 33 89
-0088: 2f 08 84 08 2f 8b 00 08
-0090: 84 08 00 8c 08 05 84 08
-0098: 01 8e 08 00 84 09 02 84
-00a0: 0b 00 8f 09 0b 3f 00 00
-00a8: 3f 00 00
+0000: 84 12 01 84 0e 10 84 0a
+0008: f9 84 0b 9f 69 0a 00 69
+0010: 0b 00 6d 0a 00 6d 0b 00
+0018: 68 10 00 68 01 00 3f 00
+0020: 00 3f 00 00
diff --git a/test_mov.asm b/test_mov.asm
index 9c07fd6..6e36390 100644
--- a/test_mov.asm
+++ b/test_mov.asm
@@ -12,86 +12,17 @@
;mov [0x0], a
-; 转移指令测试
-mov d, 0
-
-increase:
- inc d
- cmp d, 0x5
- jz decrease
- jmp increase
-decrease:
- dec d
- cmp d, 0x0
- jz increase
- jmp decrease
-end:
- hlt
-
-
-
-;逻辑运算 测试
-;mov a, 5
-;mov d, 2
-; and a, d ; a:0
-; or a, d ; a: 111
-
-mov a, 5 ; 101
-mov d, 4 ; 100
-xor a, d ; a: 00000001
-not a ; a: 1111_1110
-hlt
-
-
-
-
-; 加减 1 测试
-mov a, 253
-inc a
-inc a
-inc a
-dec a ; a: 0xff, psw: 101
-dec a
-dec a
-dec a
-dec a
-dec a
-dec a
-hlt
-
-
-; 加减法测试
-mov b, 5
-add b, 3 ; b:8
-mov a, b ; a: 8
-add a, b ; a: 10
-add a, 250
-mov a, 0
-mov b, 0
-add a, b
-mov a, 5
-mov b, 2
-sub a, b
-sub a, 4
-mov a, 4
-mov b, 2
-sub a, b ; a: 2
-hlt
-
-
-; mov 指令测试
-mov [0x33], 0x99
-mov a, [0x33]
-mov [0x2f], a
-mov a, 0x2f
-mov [0x0], [a]
-
-mov a, 0x00
-mov [a], 0x05 ; 0x00: 0x5
-mov a, 0x01
-mov [a], [0x00] ; 0x01: 0x5
-mov b, 0x02
-mov d, 0x00
-mov [b], [d] ; 0x03: 0x5
-
+; 栈测试
+mov ss, 1
+mov sp, 0x10 ; 从 0x00 ~ 0x09 是栈的空间
+
+
+mov c, 0xf9
+mov d, 0x9f
+push c
+push d
+pop c
+pop d
+push 0x10 ; 现在栈应该被下面俩覆盖了, 且c和d交换位置了
+push 0x01
hlt