给定数组的 C 汇编错误

C assembly error for a given array

我有以下 c 汇编代码,它按降序对数组进行排序,我已经使用 8086emu 对其进行了测试,它可以 100% 工作,但在 visual studio 它给了我错误的结果和一个错误。任何想法或如何解决这个问题。

我的代码:-

#include "stdafx.h"
#include <iostream>
using namespace std;


void main(void)
{
short *arr;
arr = new short[10];
cout << "please enter the array elements" << endl;
for (int i = 0; i < 10; i++)
{
    cin >> arr[i];
}

short *p;
p = arr;
_asm{

START:
    mov cx, 9
        mov esi, p

    LABEL2 :
    MOV ax, [esi]
        CMP ax, [esi + 2]
        JGE LABEL1
        MOV bx, [esi + 2]
        MOV word ptr[esi], bx
        MOV word ptr[esi + 2], ax
        JMP START

    LABEL1 :
    inc esi
        inc esi
        LOOP LABEL2

}

for (int i = 0; i < 10; i++)
{
    cout << arr[i] << endl;
}

}

Michael 在 中解决了这个问题。

问题是我使用的是 LOOP instruction,它隐式递减并测试 ECX 寄存器。但是,当我在循环的顶部初始化寄存器时,我只初始化了它的低位字(mov cx, 9),这在高位字中留下了垃圾。

解决办法是初始化完整的ECX寄存器:mov ecx, 9