From 48e5eb0d3ae7632648a748d8f76f43828419d9dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=B3=E5=85=89=E5=B0=91=E5=B9=B4?= <849317537@qq.com> Date: Mon, 29 Apr 2024 14:51:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=88=E6=93=8D=E4=BD=9C=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ROM.bin | 192 +++++++++++++++++++++++++-------------------------- assembly.py | 56 +++++++++++++++ compiler.py | 8 ++- cpu.circ | 126 ++++++++++++++++++++++----------- program.bin | 27 ++------ test_mov.asm | 95 ++++--------------------- 6 files changed, 260 insertions(+), 244 deletions(-) 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