apf_disassembler: nicer syntax for [x+0] and [x+-1]

turns out:
  lddw  r0, [r1+0]
  add   r0, 1
  stdw  r0, [r1+0]
is a very common sequence.

After this change it becomes:
  lddw  r0, [r1]
  add   r0, 1
  stdw  r0, [r1]

This also more accurately reflects that 0 takes 0 bytes to store.

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I39f5079ad332be5d3d3a5ebac2bebf8f73e4d758
diff --git a/disassembler.c b/disassembler.c
index 96ac4b1..9c03dc6 100644
--- a/disassembler.c
+++ b/disassembler.c
@@ -104,7 +104,11 @@
         case LDHX_OPCODE:
         case LDWX_OPCODE:
             PRINT_OPCODE();
-            printf("r%d, [r1+%u]", reg_num, imm);
+            if (imm) {
+                printf("r%d, [r1+%u]", reg_num, imm);
+            } else {
+                printf("r%d, [r1]", reg_num);
+            }
             break;
         case JMP_OPCODE:
             PRINT_OPCODE();
@@ -204,7 +208,13 @@
         case LDDW_OPCODE:
         case STDW_OPCODE:
             PRINT_OPCODE();
-            printf("r%u, [r%u+%d]", reg_num, reg_num ^ 1, signed_imm);
+            if (signed_imm > 0) {
+                printf("r%u, [r%u+%d]", reg_num, reg_num ^ 1, signed_imm);
+            } else if (signed_imm < 0) {
+                printf("r%u, [r%u-%d]", reg_num, reg_num ^ 1, -signed_imm);
+            } else {
+                printf("r%u, [r%u]", reg_num, reg_num ^ 1);
+            }
             break;
 
         // Unknown opcode