我的程序不会打印数组中第一个和最后一个数字的总和
My program won't print the sum of the first and last number in the array
所以我在程序集 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。
只需将inc index
更改为add index, 2
,将dec index
更改为sub index, 2
。
所以我在程序集 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。
只需将inc index
更改为add index, 2
,将dec index
更改为sub index, 2
。