私はx86アセンブリ(NASM)とCを一緒に使用するプロジェクトに取り組んでいます。特定の年(int)が別のものよりも小さいか大きいかを調べ、結果に応じて-1,1、または0を返すインデックス付きアドレッシングモードを使用するアセンブリで書かれたサブルーチンがあります。私は約4または5以上のレコードを入力すると、適切に並べ替えられないように見えます。私は数時間かけてgdbを実行していますが、最初にjをインクリメントする前に(iがインクリメントされる前に)jをインクリメントする最後の反復で、スラップを実行してはいけないとは思っていましたが、わかりませんそれを直す方法。どのような考えにも事前に感謝します。アセンブリ+ C - ソート構造
--- Cコード---
2つのグローバル変数を使用する代わりに、関数の引数を 'cmpbook'に渡すのはなぜですか?それは本当に醜い(そして少し遅い)。関連:このコメントは偽です: 'mov esi、[book1];各書籍にポインタを格納する。これはロード命令です(メモリのソースではなく、メモリのdest)。 –
'は、インデックスされたアドレッシングモードを使用して、特定の年(int)が別の年より小さいか大きいかを判断します。全く別の説明。私は実際には、単に 'cmp'を使う代わりに、アドレス計算と整数を比較するためにどのようなルックアップテーブルを作成したのか、興味がありましたが、' [reg + displacement] 'アドレッシングモードを使ってアクセスしています構造体フィールド。 –
asm関数の最後に 'ret'がありません。 –