From 7e4321a906afc66e8264976f8fabbdbb4f2588a8 Mon Sep 17 00:00:00 2001 From: tracer-ysyx Date: Thu, 8 Feb 2024 19:14:37 +0800 Subject: [PATCH] =?UTF-8?q?>=20compile=20NEMU=20ysyx=5F22040000=20?= =?UTF-8?q?=E6=9D=8E=E5=BF=83=E6=9D=A8=20Linux=20calcite=206.1.75=20#1-Nix?= =?UTF-8?q?OS=20SMP=20PREEMPT=5FDYNAMIC=20Thu=20Jan=2025=2023:27:52=20UTC?= =?UTF-8?q?=202024=20x86=5F64=20GNU/Linux=20=2019:14:37=20=20up=201=20day?= =?UTF-8?q?=20=204:50,=20=202=20users,=20=20load=20average:=200.62,=200.90?= =?UTF-8?q?,=200.84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nemu/src/monitor/sdb/sdb.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/nemu/src/monitor/sdb/sdb.c b/nemu/src/monitor/sdb/sdb.c index 4a1804e..641b1b3 100644 --- a/nemu/src/monitor/sdb/sdb.c +++ b/nemu/src/monitor/sdb/sdb.c @@ -31,6 +31,7 @@ static int is_batch_mode = false; // command handlers static int cmd_help(char *args); static int cmd_c(char *args); +static int cmd_p(char *args); static int cmd_q(char *args); static int cmd_w(char *args); static int cmd_x(char *args); @@ -54,6 +55,7 @@ static struct CommandTable { {"help", "Display information about all supported commands", cmd_help, NULL, 0}, {"c", "Continue the execution of the program", cmd_c, NULL, 0}, + {"p", "Print expression result", cmd_p, NULL, 0}, {"q", "Exit NEMU", cmd_q, NULL, 0}, {"x", "Examine content of physical memory address", cmd_x, NULL, 0}, {"w", "Break when expression is changed", cmd_w, NULL, 0}, @@ -146,6 +148,22 @@ static int cmd_c(char *args) { return 0; } +static int cmd_p(char *args) { + char *arg = strtok(NULL, " "); + bool res = false; + + word_t result = parse_expr(arg, &res); + if (!res) + goto wrong_usage; + printf("%s: %u", arg, result); + return 0; + +wrong_usage: + printf("Invalid argument for command p: %s\n", arg); + printf("Usage: p [EXPR: ]\n"); + return 0; +} + static int cmd_q(char *args) { nemu_state.state = NEMU_QUIT; return -1;