問題タブ [y86]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
arrays - Y86 アセンブリで配列ループを作成する際の問題
整数の配列を昇順にソートするプログラムを作成する必要があります。C で十分に単純な問題であり、コードが提供されます。
しかし、それをアセンブリに実装しようとすると、次のいずれかになります
または、その行をコメントアウトすると(コメントする必要はないと思います)、これが得られます
以下は私のコードです。
c - y86 バブル ソート プログラムの不具合
そこで、バブルソートプログラムをアセンブリから Y86 に変換しようとしています。この C コードから始めて、アセンブリに変換しました。
これは私のY86コードです:
標識フラグが立てられていないように見えますが、これがなぜなのかはよくわかりません。シミュレーターを実行すると、配列の要素はソートされず、同じ位置に留まります。これを修正する方法についてのヒントは大歓迎です!
linux - y86 シミュレーター (csapp) のインストールに失敗しました
archlinux で Y86 コード用のシミュレーターをコンパイルしようとしています。これが私の構成です。(形式は大変申し訳ございません。)
しかし、makefile を実行すると、問題が発生しているように見えます。
この問題に関する洞察はありますか?
y86 - y86でビット4ビットを左にシフトする方法は?
x86 shl dest,src 命令を y86 アセンブリ言語で再作成しようとしています。具体的には、宛先ビットを 4 ビット左にシフトする必要があります。誰かがこれを理解するのを手伝ってくれますか?
y86 - ジャンプ命令の Y86 エラー「行が無効です」
y86 でプログラムを書いていますが、奇妙なエラーが発生します。3行目は「無効な行」と言っています。
これらのタイプのエラーは、コード全体のすべてのジャンプ タイプの命令で発生します。
assembly - Y86 アセンブリ グローバル変数
Y86 割り当てでグローバル変数を正しく機能させるのに苦労しています。残念ながら、私たちが提供した唯一の例は、IA-32 アセンブリーのものです。過去数時間検索しましたが、役に立ちませんでした。これは私が知っている非常に基本的なことですが、私は Y86 の完全な初心者です。
次のように変数を「宣言」しています
それらを操作で使用するirmovl x, %edx
と、値4ではなく値380がedxレジスタに割り当てられていることがわかります。何が起こっているのかは、値ではなくレジスタにメモリ位置が割り当てられていることだと思います。グローバル変数の値をレジスタに設定する正しい構文は何ですか?
代わりに mrmovl を使用してみましたが、グローバル変数を使用した mrmovl の構文がわかりません。
mrmovl x, %edx で「x は数値ではありません」というエラーが表示される
assembly - Y86 アセンブリは新しい値をグローバル構文に保存します
私の教授は、Y86 の例として IA32 のみを提供していません。最終的な答えをグローバル変数の結果に保存することを除いて、割り当てのすべてを理解することができました。以下のように宣言されています。
.align 4
結果: .long 0
私の回答は %ebx レジスタに保存されており、それを結果グローバルに転送する必要があります。「rmmovl %ebx, result」を使用するのは理にかなっていますが、「not a number: result」というエラーが表示されます。私が試みていることを達成するための正しい構文は何ですか。
ありがとう!
assembly - y86 で void を返す方法
y86 (アセンブリ) で次の関数を記述しようとしています。
C コード:
これをアセンブリで記述する方法についての答えを教えてはいけません。両方の質問に対する答えだけが必要です。
質問 1 : 参照をパラメーターとして渡すにはどうすればよいですか?
質問 2 : void 値を返すにはどうすればよいですか?
補足:
この投稿を調べましたが、答えpush [edi];
はy86では機能しません。
通常、戻り値を持つ関数では、レジスタにあるものを返し、スタック内の戻りアドレスを削除するret
ために次を使用します。%eax
ここで、実際に値を返さずにリターンアドレスを削除したいだけです。このウェブサイトによると、
関数が void (値なしなど) を返す場合、これらのレジスタの内容は使用されません。
値が返される可能性はありますが、それを使用していないだけですか、それとも理解が間違っていますか? 可能であれば、これについてもっと説明が欲しいです。