diff --git a/cheriot/debug_command_shell.cc b/cheriot/debug_command_shell.cc
index 46ad147..cbb9ff9 100644
--- a/cheriot/debug_command_shell.cc
+++ b/cheriot/debug_command_shell.cc
@@ -67,8 +67,8 @@
       write_reg_re_{R"(\s*reg\s+set\s+(\$?\w+)\s+(\w+)\s*)"},
       rd_vreg_re_{R"(\s*vreg(?:\s+get)?\s+(\$?\w+)(?:(?:\s*\:(\d+))?)"
                   R"((?:\s+(?:([oduxX])(8|16|32|64))?)?)?\s*)"},
-      read_mem_re_{R"(\s*mem\s+get\s+(\w+)(?:\s+([foduxX]\d+)?)?\s*)"},
-      read_mem2_re_{R"(\s*mem\s+(\w+)(?:\s+([foduxX]\d+)?)?\s*)"},
+      read_mem_re_{R"(\s*mem\s+get\s+(\w+)(?:\s+([foduxX]\d+|i)?)?\s*)"},
+      read_mem2_re_{R"(\s*mem\s+(\w+)(?:\s+([foduxX]\d+|i)?)?\s*)"},
       write_mem_re_{R"(\s*mem\s+set\s+(\w+)\s+([oduxX]\d+)?\s+(\w+)\s*)"},
       set_break_re_{R"(\s*break\s+set\s+(\$?\w+)\s*)"},
       set_break2_re_{R"(\s*break\s+(\$?\w+)\s*)"},
@@ -233,6 +233,10 @@
     if (pcc_result.ok()) {
       auto *loader = core_access_[current_core_].loader_getter();
       if (loader != nullptr) {
+        auto fcn_result = loader->GetFunctionName(pcc_result.value());
+        if (fcn_result.ok()) {
+          absl::StrAppend(&prompt, "[", fcn_result.value(), "]:\n");
+        }
         auto symbol_result = loader->GetFcnSymbolName(pcc_result.value());
         if (symbol_result.ok()) {
           absl::StrAppend(&prompt, symbol_result.value(), ":\n");
@@ -1201,18 +1205,23 @@
   char format_char = 'x';
   int bit_width = 32;
 
+  // Get the bit width, but only if the format is not 'i'.
   if (!format.empty()) {
-    // Check the format specification.
-    auto pos = format.find_first_not_of(' ');
-    format_char = format[pos];
-    auto status = absl::SimpleAtoi(format.substr(pos + 1), &bit_width);
-    if (!status) {
-      return absl::StrCat("Error '", format.substr(pos + 1),
-                          "': ", "unable to convert to int");
-    }
-    if ((bit_width != 8) && (bit_width != 16) && (bit_width != 32) &&
-        (bit_width != 64)) {
-      return absl::StrCat("Illegal bit width specification: ", bit_width);
+    if (format[0] == 'i') {
+      format_char = 'i';
+    } else {
+      // Check the format specification.
+      auto pos = format.find_first_not_of(' ');
+      format_char = format[pos];
+      auto status = absl::SimpleAtoi(format.substr(pos + 1), &bit_width);
+      if (!status) {
+        return absl::StrCat("Error '", format.substr(pos + 1),
+                            "': ", "unable to convert to int");
+      }
+      if ((bit_width != 8) && (bit_width != 16) && (bit_width != 32) &&
+          (bit_width != 64)) {
+        return absl::StrCat("Illegal bit width specification: ", bit_width);
+      }
     }
   }
 
@@ -1223,6 +1232,17 @@
   }
   auto address = result.value();
 
+  // If format is 'i', then we are getting a disassembled instruction. Ignore
+  // bitwidth.
+  if (format_char == 'i') {
+    auto disasm_result =
+        core_access_[current_core_].debug_interface->GetDisassembly(address);
+    if (!disasm_result.ok()) {
+      return absl::StrCat("Error: ", disasm_result.status().message());
+    }
+    return absl::StrCat("    ", disasm_result.value());
+  }
+
   // Perform the memory access.
   size = bit_width / 8;
   if (size > kMemBufferSize) size = kMemBufferSize;
