[解決済み] シュール vs サール ... x86 アセンブリ gnu
2022-02-08 14:51:18
質問内容
gccでコンパイルしてアセンブリを見ていますが、このコードはいったい何をやっているのでしょうか?
shrl $20, %edx
leal (%edx,%eax), %eax
sarl 1, %eax
変数Xがedxレジスタに、Yがeaxにあり、どちらも(32ビットint)であるとする。これはどうなっているのでしょうか?
shrl $20, %edx'は%eaxを20ビット右にシフトしているので、eax/(2^20)と同じであることは知っている。 で、sarl も同じなので 'sarl 1, %eax' = eax/(2^1) となります。 これは正しいのでしょうか、もしそうならlealは何をするのでしょうか?
どのように解決するのですか?
と仮定すると
sarl 1, %eax
は、本来は
sarl $1, %eax
になる、ならば全体が等しくなる。
x = ((unsigned int) x) >> 20;
y = (x + y) >> 1
は
leal
という命令を意味します。
eax = eax + edx
. これは
リンク
が参考になるかもしれません。
これ
.
関連
-
[解決済み] gcc/g++とcc1/cc1plusの違いは何ですか?
-
[解決済み] CFLAGS, CCFLAGS, CXXFLAGS - これらの変数はいったい何を制御しているのでしょうか?
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
-
[解決済み] less' で行番号を表示する方法 (GNU)
-
[解決済み] なぜGCCは、速度の代わりにサイズに最適化すると、15-20%速いコードを生成するのですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】マルチコアアセンブラとはどのようなものですか?
-
[解決済み] ビルドターゲットの外にgccのデバッグシンボルを生成する方法は?
-
[解決済み] 32ビットレジスタに対するx86-64命令は、なぜフル64ビットレジスタの上部をゼロにするのですか?
-
[解決済み] なぜGCCはほとんど同じCコードに対して根本的に異なるアセンブリを生成するのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ファイル形式が認識されない。GCCを使用してリンカスクリプトとして扱う
-
[解決済み】g++ output: file not recognized: ファイル形式が認識されない
-
[解決済み] gcc エラー : `itoa' への未定義の参照
-
[解決済み] シグナル11[SIGSEGV]のデフォルトアクションでプロセスが終了しています。
-
configure: エラー: $PATH に受け入れ可能な C コンパイラがありません。
-
[解決済み] OSX 10.9にXcodeをインストール - clang: エラー: 入力ファイルがありません。
-
[解決済み] LD_LIBRARY_PATH と LIBRARY_PATH の比較
-
[解決済み] cygwinにgccをインストールするにはどうしたらいいですか?
-
[解決済み] なぜGCCはa*a*a*a*aを(a*a*a)*(a*a*a)に最適化しないのでしょうか?
-
[解決済み] CMakeに新しいGCCのパスを指定する方法