arrays - 我的程序不会打印数组中第一个和最后一个数字的总和

标签 arrays assembly x86-16

因此,我在程序集 8086 中创建一个程序,允许用户输入一个字符数组,直到输入“$”,然后从该数组中过滤掉它,只留下数字并从中创建一个新数组数字,但将它们分组为 3 位数字。例如:

用户输入:34km12ap111cs345o$ 结果数组:341,211,134

最后,我希望找到变量“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 变量的值相同的值,因此计算出错误的结果。

有人可以帮忙吗?

最佳答案

nizaA dw 50 dup(?)

此数组包含 WORDS,但您更改索引以对元素进行寻址,就像它包含 BYTES 一样。

只需将 incindex 更改为 addindex, 2 并将 decindex 更改为 subindex,2

关于arrays - 我的程序不会打印数组中第一个和最后一个数字的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53522959/

相关文章:

windows - masm32 和 masm 的区别?

assembly - 为什么DOS在加载.COM文件后将SP寄存器设置为0xFFFE?

c - 使用指针访问二维数组会出现错误

javascript测试值是否在数组中

python - 需要提高速度性能。使用嵌套 for 循环

assembly - jmp x86 解释

java - 如何学习用 Java 编写操作系统程序?

string - 字符串中 2 个字符之间的汇编切换

assembly - BIOS 总是无法执行磁盘操作

java - java随机字符