
No.2ベストアンサー
- 回答日時:
>自動的に値が変化する特殊レジスタをもしエフェクティブ
>アドレスに指定してしまったら、自動的に値が変化しなく
>なってしまうということですか?
そういう話ではなく、CPUの設計思想の問題です。
「特殊レジスタも汎用レジスタも同等のレジスタにする」と言う思想で設計すれば「自動的に値が変化する特殊レジスタをエフェクティブアドレスに指定出来る」もアリになります。
実際、スタックポインタレジスタ(espに相当するレジスタ)を持たないCPUも存在します。
push eax
の動きを考えてみて下さい。これは
sub esp,4
mov [esp],ax (このオペランド指定は実在しない)
と同等です。
call far_address
は
sub esp,4
mov [esp],eip (このオペランド指定は実在しない)
add [esp],9 (このオペランド指定は実在しない)
jmp far_address
と同等です。
ぶっちゃけて言えば「pushとかcallとかソレ用の短くて専用の命令をサポートしてるんだから、espをエフェクティブアドレスに指定する必要無いよね。だから指定出来なくても良いよね」って思想でCPUを設計しただけの話です。
それに「スタックの中を参照、変更出来るようにebpレジスタを用意したので、それ使って」と設計されているのも理由の1つとしてあります。
あと、そういう特殊レジスタを汎用レジスタと同様なアドレス参照に使えるようにしたら、CPUの回路が複雑になって速度が落ちたり効率が悪い、って話もあります。
この回答へのお礼
お礼日時:2006/01/19 09:42
なるほど!!そういうことだったんですね!
何となくですがイメージはうかびました。
有難うございました。また、よろしくお願いいたします!
No.1
- 回答日時:
espレジスタは、他のレジスタとは異なり、push命令、pop命令、call命令、ret命令などにより、自動的に値が変化する特殊レジスタです。
また、外部例外などにより制御が例外ハンドラに移る場合も、例外発生時のCPUの状態を「ss:esp」で示すメモリに退避し、例外処理後にそこから状態を取り出して復帰します。
このように、他の命令や事象によりespレジスタは特殊な使われ方をするので、エフェクティブアドレスにespレジスタは指定できません。
この回答への補足
つまり、push命令、pop命令、call命令、ret命令などにより、自動的に値が変化する特殊レジスタをもしエフェクティブアドレスに指定してしまったら、自動的に値が変化しなくなってしまうということですか?
補足日時:2006/01/18 17:42お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
arduino
-
MIPS アセンブリ言語
-
VBSとVBA
-
【有効数字について】 授業で、...
-
ジークアクスのサイコガンダム...
-
携帯電話の略語であるMBって英...
-
1秒は何ミリ秒とか、単位変換の...
-
【暗号資産】Bitcashって仮想通...
-
Excel_VBAで改行コードの無いフ...
-
EXCELでの16進数取り出し、上...
-
有効数字は最後答えを出すとき...
-
マトリックスサイズが512×512で...
-
文字の容量(サイズ)についての...
-
KBとMB
-
ブルーレイディスクの容量に関...
-
【エクセル】四捨五入・二捨三...
-
マイクロプロセッサに結合でき...
-
2ビット、3ビット、4ビットのグ...
-
PDFからワードへ→文字がくずれる
-
ROWIDの桁数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
COM1(RS232C)とUSB仮想COMポー...
-
組み込みCプログラムで実数型
-
arduino
-
H8Sで割り込み発生時の飛び先ア...
-
プログラム言語FortranとCの違...
-
RPG画面系システムについて
-
私は
-
XMLのテキスト情報をHTMLに読み...
-
PICマイコンのプログラムについ...
-
IPCについて
-
応用情報技術者試験問題の解き...
-
32ビット用のソフトを64ビ...
-
VBSとVBA
-
任天堂64の64 CPUの仕...
-
なぜ、i++なのか?(ものすごく...
-
命令網羅率の計算問題です
-
64ビット化による処理速度低下...
-
ステート数とは
-
アセンブリ言語で。
-
CPU、Z80からステート数から...
おすすめ情報