Assembly 添加循环后,输出很快消失

Assembly 添加循环后,输出很快消失,assembly,masm,x86-16,dosbox,Assembly,Masm,X86 16,Dosbox,我需要在数组的开头插入一个新元素。将下面的代码添加到我的其余代码后,输出会发生变化,然后很快消失。一旦我删除了这段代码,一切都会恢复正常。我的循环有问题吗?我刚刚开始使用循环,非常感谢您的帮助 ;fix array positions mov cx,hlength-1 ;i.e array of length 5 loop 4 times (don't need old tail) fixarr: mov si,cx

我需要在数组的开头插入一个新元素。将下面的代码添加到我的其余代码后,输出会发生变化,然后很快消失。一旦我删除了这段代码,一切都会恢复正常。我的循环有问题吗?我刚刚开始使用循环,非常感谢您的帮助

                            ;fix array positions
mov cx,hlength-1            ;i.e array of length 5 loop 4 times (don't need old tail)
fixarr:
mov si,cx
mov ax,h[si-1]
mov h[si],ax                ;i.e length = 5 s[4]=s[3]
loop fixarr    
mov ax,hhead  

mov h[0],ax 

不清楚您在做什么,但是如果您的数组是字节大小的,您应该使用字节大小的寄存器,例如
al
not
ax
。如果你的数组是由单词组成的,那么你需要按2的比例缩放。我的数组是由单词组成的,所以你是说我应该在fix arr之后添加dec cx@Jester您应该
将si,si
添加到2的比例,并使用
mov ax,h[si-2]
。这是我们在没有您提供的情况下所能提供的最大帮助。如果您想按2步进行,请停止使用
循环
指令。反正速度很慢。只需使用
si
作为循环计数器,使用
子si,2/jge
。这比复制
cx
然后对其进行缩放要容易得多,因为您正在编写16位代码,因此无法使用缩放寻址模式(如
[h+ecx*2]
)。