Моя программа не будет печатать сумму первого и последнего числа в массиве - PullRequest
0 голосов
/ 28 ноября 2018

Итак, я создаю программу в сборке 8086, которая позволяет пользователю вводить массив символов, пока он не введет «$», затем из этого массива отфильтровать его, оставить только цифры и создать из них новый массив.номера, но сгруппировать их в 3 цифрыНапример:

Пользователь вводит: 34km12ap111cs345o $ Массив результата: 341,211,134

И, наконец, я хочу, чтобы ind переменная "zbir" сохраняла сумму первого и последнего числа в массиве результатовв этом случае: 341 + 134 = 475

Вот код:

.model small
.stack 100
.data

    niza db 50 dup (?)
    broj dw 0
    index db ?
    nizaA dw 50 dup(?)
    zbir dw ?
    prv dw ?
    vtor dw ?

.code

  mov ax, data
  mov es, ax
  mov ds, ax

  mov bx, 0

Vnes:
  mov ah, 1
  int 21h

  mov niza[bx], al
  inc bx
  cmp al, 36
  jne Vnes


  mov bx, 0
  mov index, 0

Premestuvanje:
  mov cl, niza[bx]
  cmp cl, 36
  je Exit

  cmp cl, 48
  jl Skok

  cmp cl, 57
  jg Skok

  sub cl, 48
  mov ch, 0
  mov ax, broj
  mov dx, bx
  mov bx, 10
  mul bl
  add ax, cx
  mov broj, ax
  mov bx, dx
  cmp ax, 100
  jl Skok

  mov dx, bx
  mov bl, index
  mov bh, 0
  mov ax, broj
  mov nizaA[bx], ax
  mov broj, 0
  mov bx, dx
  inc index

Skok:
  inc bx
  jmp Premestuvanje  

Exit:
  dec index
  mov bx, 0
  mov ax, nizaA[bx]
  mov prv, ax
  mov bl, index
  mov bh, 0
  mov cx, nizaA[bx]
  mov vtor, cx
  add ax, cx

  mov zbir, ax

  mov ax, 4c00h
  int 21h    

ends

Однако проблема заключается в следующем.В целях тестирования я поместил первое число в массиве в переменную «prv» и последнее число в переменную «vtor».Переменная «vtor», кажется, содержит правильное значение, а переменная «prv» - нет.Вместо этого он содержит то же значение, что и значение переменной nizaA, и, таким образом, вычисляет неверный результат.

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 28 ноября 2018
nizaA dw 50 dup(?)

Этот массив содержит СЛОВА, но вы изменяете индекс для адресации элементов, как если бы он содержал БАЙТЫ.

Просто измените inc index на add index, 2 и dec indexв sub index, 2.

...