给定数组的 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
我有以下 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