8ビットCPUでC言語? ないないありえないっしょ! 3

102ナイコンさん2018/06/13(水) 19:42:59.12
>>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からほんの少しの改良しか行われてないけど

新着レスの表示
レスを投稿する