Extend disassembler's JBSMATCH support for multi-byte sequences

Updated the disassembler to enable the JBSMATCH opcode to handle
matching against multiple byte sequences.

Test: TH
Change-Id: Ice21643d9bc144073a75a283262a4721ae5b1196
diff --git a/disassembler.c b/disassembler.c
index 2de62e2..0929333 100644
--- a/disassembler.c
+++ b/disassembler.c
@@ -196,13 +196,26 @@
                 print_opcode("jbseq");
             }
             bprintf("r0, ");
-            uint32_t cmp_imm = DECODE_IMM(1 << (len_field - 1));
-            bprintf("0x%x, ", cmp_imm);
-            print_jump_target(*ptr2pc + imm + cmp_imm, program_len);
+            const uint32_t cmp_imm = DECODE_IMM(1 << (len_field - 1));
+            const uint32_t cnt = (cmp_imm >> 11) + 1; // 1+, up to 32 fits in u16
+            const uint32_t len = cmp_imm & 2047; // 0..2047
+            bprintf("0x%x, ", len);
+            print_jump_target(*ptr2pc + imm + cnt * len, program_len);
             bprintf(", ");
-            while (cmp_imm--) {
-                uint8_t byte = program[(*ptr2pc)++];
-                bprintf("%02x", byte);
+            if (cnt > 1) {
+                bprintf("{ ");
+            }
+            for (uint32_t i = 0; i < cnt; ++i) {
+                for (uint32_t j = 0; j < len; ++j) {
+                    uint8_t byte = program[(*ptr2pc)++];
+                    bprintf("%02x", byte);
+                }
+                if (i != cnt - 1) {
+                    bprintf(", ");
+                }
+            }
+            if (cnt > 1) {
+                bprintf(" }");
             }
             break;
         }