私は8086emuを使ってテストしたが、100%で動作したが、Visual Studioで間違った結果とエラーを出した。任意のアイデアやこの問題を解決する方法。与えられた配列のCアセンブリエラー
マイコード: -
#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;
}
}
それがどこまで組み立てスルーを作るん:
ソリューションは、完全な
ECX
レジスタを初期化するのですか?あなたはこれをデバッグするために何をしましたか? –@PaulBentley私はそれをデバッグしていません、それは配列要素を入力した直後に現れますが、ASMブロック内の同じコードはMasmとemuで動作します。 –
'loop'はおそらく下位の単語(' cx')だけでなく 'ecx'を減らしてチェックします。 'mov cx、9'の代わりに' mov ecx、9'をすればどうでしょうか? – Michael