問題タブ [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.

0 投票する
2 に答える
3977 参照

c - この Y86 アセンブリ コードのメモリ位置について混乱している

あるクラスで、Y86 に変換する必要がある C のコードがありました。これは、もちろん教師の修正を受けて、ある人によってボードに書かれました。

ただし、コードの最初の部分にあるメモリの場所と .pos ディレクティブを混乱させています。

このコードから私が理解していることは次のとおりです。
これは位置 0 ( .pos 0 ) で始まり、irmovl命令は 6 バイトかかるため、次のrrmovl命令は位置 6 で始まり、その命令は 2 バイトかかり、現在は位置 8 にいます。 .

jmp命令は 8 から始まる 5 バイトを使用し、現在位置は 13 です。

これで、配列の 100 個の整数を保持するためにスタック スペースを節約し、.pos 430 を使用して少なくとも 400 バイト (4 バイト * 100 整数) とさらに 17 個 (次の位置から現在の位置を引いた値 430) を保持するのは簡単です。 -13=17)。

現在位置は 430 で、sumを保持するためにさらに 4 バイト、 iを保持するためにさらに 4バイトを保存する必要があります。これは位置 438 に置かれます。

位置 438 で、プログラムのメイン コードが開始されます。

私の唯一の質問は単純です: 100 個の整数のスペースを保持するために.pos 430
を使用したのはなぜですか? それらすべてを保持するには、ちょうど 400 バイトしか必要ありません。.pos 413 (以前の位置は 13 であり、100 個の整数に 400 バイトが必要であるため、413) で十分であり、 .pos 430よりも正確ではありませんか?

私は何が欠けていますか?

0 投票する
1 に答える
20041 参照

assembly - アセンブリ: Y86 スタックと呼び出し、pushl/popl と ret 命令

私が間違ってコピーしたのでない限り、上記のコードは、教師の助け/修正を受けて、生徒がクラスの黒板に書いたものです。

ご覧のとおり、すべての命令にたくさんのコメントがあり、私はそれらのほとんどを (私が思うに) 取得しました。私を混乱させているのは、call、pushl/popl、および ret 命令です。私はそれらをよく理解していませんし、スタックに何が起こっているのか、すべてのレコードがどこを指しているのかも理解していません。基本的には何も書かれていないコメント(//)の行です。

このすべてがどのように機能するかを理解することは非常に重要です.

私のコメントに関するいくつかのメモ:

  • 0xsum:これは、アドレスが「合計」であることを意味するわけではなく、不可能です。正確なメモリアドレスを使用せずに、私が話していることを理解するための手段にすぎません。
  • [sum = 0]:これは、C コードでは、この時点で変数 sum が 0 に設定されることを意味します。
  • i + 1 => i:これは、'i' の値を 1 ずつインクリメントしていることを意味し、次の行の 'i' は実際にはそのインクリメントされた値を表します。
0 投票する
2 に答える
4158 参照

assembly - この Y86 アセンブリ コードでスタックを正しく理解できていますか?

この単純で無意味なアセンブリ (Y86) コードを作成して、命令 call、pushl、popl、および ret が使用されたときにスタックで起こっていることをすべて理解しているかどうかを確認しました。

私が言ったように、このコードは無意味です。テスト/学習目的のためだけです。ただし、すべてのメモリ アドレスは正しく (期待どおり) 計算されており、ランダムではありません。

アセンブリ コードは次のとおりです。

以下は、スタックを描画し、各ステップ (命令) がスタックで何をするかを説明するための最善の方法です。SP と BP を使用して %esp と %ebp をそれぞれ参照していることに注意してください。これは、これらが頻繁に使用され、読みやすくするためです。

私が知りたいのは、上記のすべてが正しいかどうか、または何かを見逃しているかどうかです。自由にコピー/貼り付けして、回答のいくつかのステップを修正してください。

また、これについての私の理解は非常に重要であることに注意してください.月曜日に試験があるので、準備する必要があります.あなたが私に与えることができる最良の回答をお願いします. あなたの回答によっては、関連する質問がいくつかあるかもしれません (またはないかもしれません)。

0 投票する
3 に答える
6733 参照

assembly - Y86コードは期待どおりにret命令を処理しません

以下は、アセンブリ言語クラスの宿題の問題です。gdbのCから生成されたX86コードを読み取ってY86コードを作成します。この関数の目的は、リンクリストの要素を合計することです。

関数は現在立っているので、動作します!プログラムの終了時に、正しい値が%eaxレジスタに含まれています。残念ながら、それはハックのためにのみ正しいです。halt関数の最後、命令の直前に命令を追加しましたret。コメントを外すと、ret命令を実行するとPCが0x0に設定されているように見えます。言い換えれば、それは最初からやり直しのように見えます。それがすべきことは、それが呼び出されたポイントに戻ることです。無限ループに入ります。

コードは次のとおりです。Y86シミュレーターがインストールされている場合は、スタンドアロンです。

ご協力いただきありがとうございます!

0 投票する
1 に答える
1910 参照

y86 - 最初の Y86 プログラムで出力が得られない

私は Y86 を学ぼうとしているので、とても簡単なプログラムを作りました。これには 3 つの long 整数の配列があり、各ブロックは を介し​​てユーザーに入力を求めることで埋められますrdint

コンパイルされた (?) プログラムは 3 つの入力を要求しますが、それらを出力することはできません。

コード:

私の入力:

出力:

0 投票する
3 に答える
1567 参照

arrays - 条件付きジャンプを使用せずに配列内の正のアイテムをカウントする

これどうやってするの ?

チェックサムを計算するようなことをするべきだと思いますが、これは最終ビットに正の整数の数を与えるはずです。

編集:「シフト」も使用できない場合はどうなりますか

edit2: ISAはY86です

0 投票する
2 に答える
2250 参照

c - y86アセンブリラベルが本来あるべきことをしていない

以下に投稿されたのは、単純な y86 アセンブリ プログラム用のコードです。2 つの整数を指定すると、2 つの大きい方を出力する必要があります。各行の右側には、同等の C 翻訳があります。

アセンブラーyasを使用すると、結果の .yo ファイルは次のようになります。

  • これは正しく組み立てられていません。ラベルが見つかると、プログラム内で見つかった場所のアドレスに置き換えられると言われました。入力された最初の数値がより大きい場合、行0x00aの命令は7514000000です。これは、プログラムカウンターに 0x016 に移動するように指示する必要があるときに、行0x014 (存在しない行) に移動するように指示しています。行0x011にも同じ問題があります。なぜこうなった?
  • ラベルの代わりにアドレス行を使用してプログラムをアセンブルすると、結果は出力されますが、改行は出力されません。どうすればこれを修正できますか?
  • 最後に、ちょっとした質問です。最初の行にコメントがない場合、コードの最初の行は無視されます。これは起こるはずですか?

お時間をいただきありがとうございます。ご回答いただけることを楽しみにしています。

0 投票する
1 に答える
1226 参照

assembly - Y86 アセンブリ コードのコンパイルの問題

それで... 私の先生は、Y86 シミュレーターで実行するポン ゲームを作成するように私たちに依頼し、バイナリ ファイルを作成するためのアセンブリ コンパイラとリンカーを提供してくれました。問題は、シミュレーターがグローバル変数を呼び出し続けたり、大量の nops をコードの途中に置いたりすることです。シミュレーターとコンパイラーは今まで問題なく動作していましたが、問題がコードにあるのかコンパイラーにあるのかわかりません。

コンパイラはこれを

この中に

シミュレーターで実行しようとすると、グローバル変数が呼び出され続け、多くの nops がどこからともなく現れ、実行の途中で停止しました。

問題はコンパイラにあると思いますか?

0 投票する
2 に答える
3860 参照

c - C コードをアセンブリ コードに変換しますか?

この C コードをアセンブリ コードに変換する必要があります。

私のコードは以下で、不完全です。

基本的にはほぼ完了していると思いますが、実行しようとしたときに無効とフラグが立てられた2行の横にコメントしましたが、なぜ無効なのかわかりません。また、a > b の if ステートメントを実行する方法もわかりません。y86 アセンブリ言語について知っている人からの提案を使用できます。

0 投票する
2 に答える
11255 参照

assembly - y86 コマンドのリスト?

一部のコードを y86 に相当するものに変換する方法を探しています。問題は、y86 関数の適切なリストを見つけるのに苦労していることです。いくつかの機能を見つけることができますが、使用可能な主な機能の適切なリストはありません。そのようなリストをどこで見つけることができるか知っている人はいますか?