[解決済み] x86アセンブリの角括弧の意味は何ですか?
2022-02-28 22:16:45
質問
私はアセンブリの初心者で、非常に基本的な質問があります。
この4つのコマンドの違いは何ですか?
mov ebx, eax
mov [ebx], eax
mov ebx, [eax]
mov [ebx], [eax]
括弧は、"アドレスの値を取得する"という意味だそうです。しかし、では、この最初の行は実際に何をするのでしょうか?eaxの値をebxに移動しているのではないのでしょうか?もしそうなら、括弧の意味は何なのでしょうか?
どうすれば解決するのか?
非常に簡単な例として、EAXとEBXの2つのレジスタしかないCPUがあるとします。
<ブロッククオートmov ebx, eax
の値を単純にコピーします。
eax
を
ebx
登録
| EAX : 0123456 | ----> | EAX : 0123456 |
| EBX : 0000000 | ====> | EBX : 0123456 |
次に、メモリ空間を追加してみましょう
ADDRESS VALUE
000000 6543210
000004 5189784
000008 1698791
00000C 9816517
000010 9816875
000014 5498156
mov [ebx], eax
の値を移動します。
eax
に含まれるメモリアドレスに
ebx
.
| EAX : 0123456 | --no--> | EAX : 0123456 |
| EBX : 0000008 | --change--> | EBX : 0000008 |
ADDRESS VALUE VALUE
000000 6543210 ----> 6543210
000004 5189784 ----> 5189784
000008 1698791 ====> 0123456
00000C 9816517 ----> 9816517
000010 9816875 ----> 9816875
000014 5498156 ----> 5498156
mov ebx, [eax]
に含まれるメモリアドレスから値を移動します。
eax
から
ebx
.
| EAX : 0000008 | ----> | EAX : 0000008 |
| EBX : 0123456 | ====> | EBX : 1698791 |
ADDRESS VALUE
000000 6543210
000004 5189784
000008 1698791
00000C 9816517
000010 9816875
000014 5498156
mov [ebx], [eax] (※)。
これは、最終的に、値を
eax
に含まれるメモリアドレスに
ebx
.
| EAX : 0000008 | --no--> | EAX : 0000008 |
| EBX : 000000c | --change--> | EBX : 000000c |
ADDRESS VALUE VALUE
000000 6543210 ----> 6543210
000004 5189784 ----> 5189784
000008 1698791 ----> 1698791
00000C 9816517 ====> 1698791
000010 9816875 ----> 9816875
000014 5498156 ----> 5498156
しかし、この組み合わせはx86アーキテクチャで禁止されています。 メモリからメモリへの移動はできません .
そのため、括弧を使用することは 参照元 の操作になります。
関連
-
[解決済み】単純なforループのためのMIPSアセンブリ
-
[解決済み] なぜ、addiではなくaddiuを使うのか?
-
[解決済み] エラーです。操作サイズが指定されていません - NASm
-
[解決済み] アセンブリでは、`PTR`は何の略ですか?
-
[解決済み] ビットシフト演算子を使って10進数を2進数で表示するMIPS
-
[解決済み] 8086アセンブリ言語での2つのレジスタのスワッピング(16ビット)
-
[解決済み] CS:IPの組み立ての意味と仕組みについて教えてください。
-
[解決済み] MIPSのオペコードにおけるlaとliの違いは何ですか?
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】単純なforループのためのMIPSアセンブリ
-
[解決済み】MIPSで整数の絶対値?
-
[解決済み] アセンブリ言語 - Moduloはどのように行うのですか?
-
[解決済み] MIPSのコードのこの部分で、oriはどのように使われているのですか?
-
[解決済み] アセンブリ言語で数字をプリントアウトする?
-
[解決済み] 8086アセンブリ言語での2つのレジスタのスワッピング(16ビット)
-
[解決済み] アセンブリ言語 jeジャンプ機能
-
[解決済み] この状況でのlwとbneは何を意味するのか?
-
[解決済み] ST(0)をEAXに移動させる方法は?
-
[解決済み] ポインタの「デリファレンス」とはどういう意味ですか?