問題タブ [att]
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.
assembly - cmp 0x4(%esi)、%ebxアセンブリ命令からの0x4はどういう意味ですか?
0x4
次の組立ラインからはどういう意味ですか?
この比較が等しい値を返し、ジャンプが実行されると、レジスタの値は次のようになります。
%esi
0xe944d6d0
%ebx
0xe94ceccc
そのような簡単な質問をして申し訳ありませんが、私はグーグルでそのようなparanthesis表記を検索するのに苦労しています。時間のプレッシャーの下で30分以上過ごしました。
assembly - AT&T 構文オペランドのそれぞれがアクセスするメモリまたはレジスタの値は?
次の値が、指定されたメモリ アドレスとレジスタに格納されていると仮定します。
素人の言葉でこれを行う方法を誰かが私に説明できますか。これは hmwk ではありません (章の最後に答えがある特定の読書中の練習問題です)、私は読書を理解していません。
assembly - 「mov(%ebx、%eax、4)、%eax」はどのように機能しますか?
アセンブリの割り当てに取り組んでいますが、ほとんどの場合、アセンブリについてはよく理解しています。または、少なくともこの割り当てには十分です。しかし、このmovステートメントは私をつまずかせています。このmovステートメントがレジスタ値をどのように操作しているかを誰かが説明していただければ幸いです。
mov(%ebx、%eax、4)、%eax
PS基本的な検索では、この特定のタイプのmovステートメントを見つけることができなかったので、それを見逃して質問をしている場合は、お詫び申し上げます。
assembly - ATT アセンブリの理解 (即時)
次の組立ラインがあるとしましょう
%edi/%edx レジスタに格納しているのは正確には何ですか。
基本的に、このコードを C プログラムに変換するとしたら、いくつかの変数を -1 と 1 に初期化することになります。
即時=「一定の定数」は理解していますが、それはどういう意味ですか?
assembly - ATT アセンブリ言語演算
宛先として 0x10C を取得し続けます (これは正しいです)。しかし、何らかの理由で、10C * 16 (ソース * 宛先) を掛けると、1708 が得られますが、これは正しくありません。誰か助けてくれませんか?ありがとうございました!
assembly - ATTアセンブリ(算術および論理演算)
質問1.左シフト=SAL
およびSHL
。私の本はそれらが同じ効果を持っていると言っています。では、なぜ2つのシフト操作があるのでしょうか。
例えば:
私の本はの答えを与えます
だろう
正解もありましたか?
質問2:
SHR
素人の言葉で言えば、との違いは何SAR
ですか?私の本によると、1つは論理シフト(ゼロで埋める)で、もう1つは算術シフト(符号ビットのコピーで埋める)です。
0 /符号ビットで何を埋めますか?
例えば:
次の組み立て手順でどちらを使用するかをどのように知ることができますか?
本の裏には答えがあります
を使用するとどうなるか説明してくださいshrl
。
これを理解するためにあなたの助けをありがとう!
c - ATTアセンブリ言語を理解する
Cバージョン:
同じプログラムのATTアセンブリバージョン:
xは%ebp + 8、yは%ebp + 12、zは%ebp + 16
左シフト以外のプログラムのすべてのポイントでそれが行っていることをすべて理解しています。
左に4回シフトすると思います。何故ですか?
ありがとうございました!
編集:私が混乱している部分は、Cバージョンのz*48部分と同等であることも理解しています。
私が理解していないのは、左に4回シフトすることがz*48にどのように等しいかということです。
assembly - AT&T組立ラインの意味を確認してください
この行は私にはあまり明確ではありません(私はアセンブリに非常に慣れていません):
私は理解してmov
いmovsbl
ますが、私にとっては新しいものです。foo
私の代わりにを使用するより簡単な例では、これである0xffffffff(%edx,%ebx,1)
と理解しています(これが正しいかどうかはまったくわかりませんが、関連するトピックを検索しただけです)。
アセンブリの行で-1()を参照したことはありませんが、正確にどこから0xffffffff
情報が入力されていますか?%eax
に保存されているものは何ですか:
c - 関数終了時のセグメンテーション違反
いくつかの SSE2 操作を実行する 64 ビット x86 アセンブリ (gcc および GAS の AT&T 構文) で記述された関数があります。逆アセンブルで gdb を使用し、レジスタ値を調べて結果を確認したので、正しい結果が生成されていることがわかりました。retq 命令の後、セグメンテーション違反が発生します。私はアセンブリに不慣れなので(そしてクラスを受講したことはありません)、関数/メインプログラムインターフェイスを正しく処理していないと推測しています。関数は 2 つのポインターと int を受け取り、float を返すことが期待されます。これは、アセンブリ関数で入力/出力を処理する方法です。
そして、これがセグメンテーション違反の原因と思われる行です (これは、逆アセンブリの ret の直後の命令です):
関数を実行した後、rax の下位ビットの値を rax に戻す理由はわかりませんが、クラッシュしているようです。アセンブリ関数で rax を使用することは許可されていませんが、それは汎用であり、破壊されたと宣言していますか?
この部分を見る必要があるかどうかはわかりませんが、これは gcc が関数を処理する方法です。関数を呼び出す行の逆アセンブリを含めました。
2 番目の質問は、なぜ xmm0 の値を勝手に 2 つの場所に移動するのですか? 関数の結果を xmm0 にするべきでしたか、それとも xmm0 の使用を避けるべきなのでしょうか? 私は非常に混乱しており、助けていただければ幸いです。私の初心者の投稿を読むのに時間を割いてくれた人に、前もって感謝します:)
assembly - x86 cml と jne
割り当てのためにいくつかのx86コードをトレースしています.「cmpl」が正確に何をするのか、「jne」が満たされるかどうかをどのように予測するのか疑問に思っていました.