fixed instruction length issue
[dcpu16] / vm-dcpu16.c
index 522682a6732e871ff50157323a227b85e619e76e..17effb6a558db14d11698cfceaf56d452c202252 100644 (file)
@@ -230,8 +230,8 @@ COMMAND_IMPL(dump) {
     int i;
 
     for (i = 1; i < arg_count; i++) {
-        addr[i] = str_to_word_(arg_vector[i]);
-        if (addr[i] < 0) {
+        addr[i-1] = str_to_word_(arg_vector[i]);
+        if (addr[i-1] < 0) {
             fprintf(stderr, "address '%s' is not a valid word: %s\n", arg_vector[i], strerror(errno));
             return 0;
         }
@@ -261,8 +261,8 @@ COMMAND_IMPL(disassemble) {
     int i;
 
     for (i = 1; i < arg_count; i++) {
-        addr[i] = str_to_word_(arg_vector[i]);
-        if (addr[i] < 0) {
+        addr[i-1] = str_to_word_(arg_vector[i]);
+        if (addr[i-1] < 0) {
             fprintf(stderr, "address '%s' is not a valid word: %s\n", arg_vector[i], strerror(errno));
             return 0;
         }
@@ -275,8 +275,11 @@ COMMAND_IMPL(disassemble) {
         return 0;
     }
 
-    for (i = addr[0]; i <= addr[1]; i++)
-        dcpu16_disassemble_print(vm, i), printf("\n");
+    for (i = addr[0]; i <= addr[1]; /* */ ) {
+        printf("0x%04x: ", i);
+        i += dcpu16_disassemble_print(vm, i);
+        printf("\n");
+    }
 
     return 0;
 }