[解決済み] .quadディレクティブはアセンブリでどのように機能するのですか?
質問内容
の仕組みがよくわからなくて困っています。
.quad
関数はアセンブリで動作します。
ネットで読んだところでは、現在のセクションへの各式に対して64ビットの2進数の補数値を生成するようです。私は、2重補数とは何か、そして、そのセクションが
.quad
が呼び出されます。
は、いつ、どこで
.quad
は、通常アセンブリで呼び出されますか?
また、なぜ
.quad
を使用して、何かを生成することはできますか?
解決方法は?
その
.quad
ディレクティブは、64ビットの数値を定義するために使用されます。同じように
.byte
ディレクティブが機能します。
.quad 0x123456789ABCDEF0, 2, 3
は24バイトにコンパイルされます。
F0 DE BC 9A 78 56 34 12 02 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00
(比較のため
.byte 0x12, 2, 3
は3バイトにコンパイルされます
12 02 03
).
.quadは通常、アセンブリのどこで、いつ呼ばれるのですか?
これはアセンブラ指令で、コンパイル時に使用され、マシン・コードを生成するだけです。これは、quot;call"することができません。このディレクティブで定義されたマシン・コードを呼び出したり実行したりすることはできますが、もし手元にニモニックから命令を生成できるアセンブラがあれば、オペコードとして数値で定義して命令を生成することは非常に稀な使用方法です。
<ブロッククオートまた、なぜ.quadを使用して何かを生成するのですか?
データセグメントに 64b の数値 1000000000000 (1e12) を設定したい場合、次のように定義する方がはるかに便利です。
.quad 1000000000000
として定義するよりも、バイト単位で計算して
.byte 0, 16, 165, 212, 232, 0, 0, 0
の中で
.quad
の場合、アセンブラがパースとバイト分割を行います。
.quad .L3
(コメントより)
.L3
はコードのどこかにあるラベルなので、何らかのメモリアドレスであり、何らかの64ビット数(フラットメモリマッピングのx86 64bターゲットプラットフォーム用)です。もし、その値をメモリのどこかに持っていきたいのであれば
.quad .L3
は、その値で8バイトを生成する簡単な方法です(アドレスは
.L3
ラベル)を作成します。
は、その
switch
のコードでは、スイッチの値でインデックスされたメモリ内の特定の値を選択し、テーブル内のメモリに格納されたアドレスにジャンプする、間接ジャンプを使用しています。例えば
jmp [table + index*8]
の場合
table+index*8
を指しています。
.L3
の値であれば
jmp
にジャンプします。
.L3
のアドレスになります。
関連
-
[解決済み] アセンブリ言語 - Moduloはどのように行うのですか?
-
[解決済み] アセンブリ言語で数字をプリントアウトする?
-
[解決済み] x86 8086 アセンブリで 0-9 の範囲の乱数を生成する。
-
[解決済み] ARMアセンブリループ
-
[解決済み] x86アセンブリで160x100モードを実現する
-
[解決済み] ST(0)をEAXに移動させる方法は?
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
-
[解決済み] カスタムディレクティブの中で評価された属性を取得する方法
-
[解決済み] 32ビットレジスタに対するx86-64命令は、なぜフル64ビットレジスタの上部をゼロにするのですか?
-
[解決済み] milw0rm ヒープスプレイングエクスプロイトの仕組みは?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】JNZとCMPのアセンブリ命令
-
[解決済み] ARMのアセンブリ言語でbx lrは何をするのですか?
-
[解決済み] Lc3分割のしくみ
-
[解決済み] MIPSプログラムの中で`lw`と`sw`が実際にどのように機能するかを理解する
-
[解決済み] ビットシフト演算子を使って10進数を2進数で表示するMIPS
-
[解決済み] objdumpの出力にあるdata16とはどういう意味ですか?
-
[解決済み] x86アセンブリの角括弧の意味は何ですか?
-
[解決済み] x86アセンブリでレジスタに使用されるpush/pop命令の機能は何ですか?
-
[解決済み] MIPSの擬似命令 "move "の "addi "と "add "の違い?
-
[解決済み] アセンブルmov命令