2010-11-30 29 views
0

アセンブリ名に最大20文字の配列をソートする必要があります。 最大11文字です。私のプログラムは3つのレコードを受け取りますが、 にクラッシュし続けます。それでソートすることはできません。私はバブルソートを使用しています。
これは割り当てなので、私はC++で何も変更できません。アセンブリ内で名前の配列を並べ替える

これらの最初の3行は、C++コードのものです。

私はあなたが他のすべての名前の対応する文字(B)に対するすべての名前のすべての文字(A)を比較すべきであるBとそれに先行するすべての文字がある場合、その後、最終的には、二つの名前を交換することを考えて
extern "C" void Sort (char [] [11], char [], double [], long); 

char Names [20] [11]; 

Sort (Names, LetterGrades, Averages, NumStudents - 1); 

_Sort proc 

     mov ecx, [esp +16] 
     dec ecx 

L1: push ecx 
    mov esi, [esp + 4] 

L2: mov eax, [esi] 
     cmp [esi + 11], eax 
    jg L3 
     xchg eax,[esi + 11] 
     mov [esi],eax 

L3: add esi,11 
     loop L2 

     pop ecx 
     loop L1 

L4: ret 

_Sort endp 
+1

Cの宣言はcharの2次元配列のため、アセンブリコードはchar *の1次元配列用です。 –

+0

実際の割り当てコードにはコメントがありますか?私は、コメントなしに組立プロジェクトを開始するために殴られたでしょう。コメントなしでコードを理解するためには、システムが引数をスタックにプッシュする方法を理解する必要があります。また、あなたのラベル名はあなたが達成しようとしていることを特に説明していません。これらの「スタイル」の問題は、あなたの問題を直接修正することはできませんが、自分のコードを理解するのに役立ちます。 –

+0

私の教授は彼らについては不安ではありませんが、使用すると助けてくれます。ありがとう – justbrianr

答えて

0

以前よりAおよび文字より小さい。今はそれが私の唯一のアイデアですが、私はコードでそれを翻訳することはできません。私はまだそれについて考えなければなりません...

私はできる限り最善の方法で説明しようとしましたが、 mess .. =)

+0

あなたが言っていることは説明的に意味がありますが、自分のプログラムでそれを動作させる方法を理解できません。私はいろいろなことを試してきましたが、どういうわけか、それは働いていませ – justbrianr

+0

私も試しましたが、それは高級言語でさえ本当の混乱です。 – BlackBear