我编写了这段代码来计算数组vec中的零数:
.model small
.stack 100h
.data
vec dw 1,2,0,3,0,4,5,6,0,0,5
m1 dw 0
.code
mov ax,@data
mov ds,ax
mov di,1 ;di is our running index
number_of_zeros:
mov ax,vec[di]
cmp ax,0
je increment_m1 ;case its zero
inc di;case its not zero
cmp di,11
jl number_of_zeros
cmp di,11
je end
increment_m1:
inc m1
inc di
cmp di,11
jl number_of_zeros
cmp di,11
je end
end:
mov ax,m1
它没有显示正确的输出。我希望看到AX = 4,但是,当程序运行完毕后,我可以看到AX = 3。
我认为问题在于如何访问数组中的各个元素。由于某种原因,我无法弄清楚,在第一次迭代时它说vec [1] = 0200
编辑:好的我更正了代码,它确实给出了期望的结果但是......它仍然显示了vec [di]的奇怪值。我仍然认为我错误地访问它,因为偶然,我得到了正确的结果。我希望有人对其进行审核。
答案 0 :(得分:4)
有三个问题,以及许多改进解决方案的方法,我只想提一下修复:
0
,而不是1
2
,而不是1
所以这一行
mov di,1 ;di is our running index
应该是
mov di,0 ;di is our running index
和这一行
inc di;case its not zero
应该是
add di,2 ;case its not zero
和这一行
cmp di,11
应该是
cmp di,20 ; last element is at offset sizeof(dw) * (num_elements-1) = 2 * (11-1) = 20
这应该让它发挥作用。