【发布时间】:2015-03-03 07:51:51
【问题描述】:
我编写了这段代码来计算数组 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] 的奇怪值。我仍然认为我访问它是错误的,并且由于机会而得到了正确的结果。我希望有人对其进行审核。
【问题讨论】:
-
为了清楚我的要求,程序第一次到达 mov ax,vec[di] 我希望它移动 1 行,但它移动了 0200。
-
我注意到您将 di 寄存器初始化为 1 而不是 0。自从我编写 8086 汇编代码以来已经很长时间了,但在 8086 中的内存寻址不是单字节分辨率.我可能完全错了,但如果是这种情况,那么你应该在从 vec 读取每个 dw 后将 di 增加 2。