■ このスレッドは過去ログ倉庫に格納されています
8ビットCPUでC言語? ないないありえないっしょ! 3
- 102 :ナイコンさん:2018/06/13(水) 19:42:59.12 .net
- >>92
それがアドレッシングモードを含めてのBPレジスタという話だ
8086のレジスタをつったメモリアドレッシングは単純化するとこうなる
disp[reg1 + reg2]
reg1に指定できるのがBXとBPのみ
reg2に指定できるのがSIとDIのみ
reg1、reg2はどちらか一方を省略してもいい
dispは8bitもしくは16bitで、dispは一部を除いて省略可能
(reg1にBPで尚且つreg2を省略した時はdispを省略できない)
で、reg1にBPレジスタを指定した場合、暗黙的に使われるセグメントがスタックセグメントになる
だからBPレジスタは主にスタック上のデータを操作する目的で作られたといえる
ちなみにVC++で最適化でフレームポインタとしてBPレジスタを使わなくなったのはx64からだ
その代わりWidnowsのx64では関数の入り口と終りで
まとめてローカル変数や一時記憶領域をスタック上に確保、解放するようになり
プログラムの途中でpush、popのようなRSPの値を操作するようなことは禁止されてる
gccでは32bitでもEBPをフレームポインタとして使わなかったりする
まあ、x86は32bit化でアドレッシングモードが大幅に拡張されてるけどね
64bit化では32bitからほんの少しの改良しか行われてないけど
総レス数 1001
258 KB
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver.24052200