忍者ブログ
MASTER →  ADMIN / NEW ENTRY / COMMENT
現代魔法(nearly equal 情報技術)を勉強中な人のメモ(チラシの裏)
/ 2024/11/22 (Fri) / 編集
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

/ 2008/08/23 (Sat) / 編集
OS自作入門2日目よりレジスタの話
  1. アキュムレータ(Accumulator)(16bitの時はAX):累積演算機
  2. カウンタ(Counter)(16bitの時はCX)
  3. データ(Data)(16bitの時はDX)
  4. ベース(Base)(16bitの時はBX)
  5. ベースポインタ(Base Pointer)(16bitの時はBP)
  6. スタックポインタ(Stack Pointer)(16bitの時はSP)
  7. ソースインデックス(Source Index)(16bitの時はSI):読み込みインデックス
  8. デスティネーションインデックス(Destination Index)(16bitの時はDI):書き込みインデックス
なんでまたいちいち「16bitのときは」なんて書いてあるかというとbit数によって名前が違うらしい、32bitになると頭にEがついてEAX,ECX,,,という感じ、64bitになるとRがついてREX,RCX,,,という感じになるらしい。

ここで、リストの1~4のレジスタには8bit版もあるらしい、というよりも16bitのレジスタを8bitのレジスタ2つとみて使う事ができるらしい。
たとえばアキュムレータ(AX)なら上位8bitをアキュムレータハイ(AH)、下位8bitをアキュムレータロウ(AL)と呼ぶ、つまりAXに「E22F」を代入するというのはAHにE2、ALに2Fを代入するのと同じ事らしい。
ちなみにいうと、32bitのアキュムレータ(つまりEAX)の場合は下位16bitをAXとして使えるらしい、ただし、上位16bitには名前がついておらず使う事はできないんだとか。


あとセグメントレジスタとやらもあるらしい
  1. コードセグメント(Code Segment)(16bitのときはCS)
  2. スタックセグメント(Stack Segment)(16bitのときはSS)
  3. データセグメント(Data Segment)(16bitのときはDS)
  4. エクストラセグメント(Extra Segment)(16bitのときはES)
  5. 名前なし(16bitのときはFS)
  6. 名前なし(16bitのときはGS)
ここでリストの4,5,6はおまけのセグメントらしい
でもってこのセグメントレジスタってのはなんなのかというと、、、、
16bitのレジスタしか作れなかった時代、レジスタでメモリの番地を表す時16bit分(つまり0x0000~0xffff)までの64KBの番地しか指定できなかったそうで、それだと64MBのメモリとか作ってもまったく意味がない状態に!
そこでセグメントレジスタの出番、番地の指定をするときに「セグメントレジスタの値x16+レジスタの値」にすれば32bit分指定できる!ってことらしい。

実はEAXなどの32bitのレジスタを使うときにも「メモリの番地を指定するときにはセグメントレジスタも使わなければならない」というルールがあるらしい、でもってアセンブラでセグメントレジスタを省略したときには大抵DSが使われるんだとか、だからアセンブラでプログラムを書くときには「DS=0」にしておく必要があるんだとか


詳しいレジスタの構造については[ITmediaエンタープライズ]x64のレジスタ拡張 (1/2)




ここまで来て気づいたんだが、どうやらフロッピーディスクが必要らしい、、、あとedimg.exeとかいう筆者作のプログラムも使うんだとか、やっぱこれもMacではうごかないんだろうなぁ、、、
仕方ない、明日は窓に環境構築するか〜 Vistaでも大丈夫かな?

拍手[0回]

PR
忍者ブログ [PR]