2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

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