多分合ってないぞ!!!。いま一生懸命勉強中だ! (T∀T))間違ってるとこみつけたら、板にツッコミ入れよう!)
・・・ふっ・・・ 所詮笑われてナンボじゃい!。 (T∀T)
8086(リアルモード)時のレジスタ達
8086は16ビットCPUなので、全て16ビット。 ※32ビットも使えるらしいが、かえってややこしくなるので全部16ビットとしておくほうがよさそうらしい。
汎用
- AX
- CX
- DX
- BX
- SI
- DI
の六つ。基本的にはなにに使っても構わないらしい。
ちなみに上記レジスタがABCD順に並んでいないのはわけがある。A〜Dまでのレジスタは別にABC順で作られたわけではなく、おのおのある用途用に作られている。呼び名の略がたまたまABCDになっているだけなので誤解のなきよう
BXやCXでももちろん計算等ができるが、元来は「BX はメモリアドレスの指定用」。「CX はループカウンタ用」として作られている。
なので、どうしてもの場合以外は計算やビット操作・退避などにはAXとDXだけで行うのが望ましい。(そういう意味ではAXとDXは汎用中の汎用とも言える)
その意味で考えると、AXとDXとSIとDIが「汎用の中の汎用」らしい
8ビットレジスタとして使う
AX〜DXの汎用レジスタを二つに割って、独立した8ビットレジスタとして使うことが出来る。
指定の方法は、AXの上半分をAH、下半分をALとするらしい。(HighとLowという意味らしい)
「独立」と言ったが、場所は同じ。
つまり、AHに0x1Fを代入。ALに0x3Aを代入する。当たり前だが、AHレジスタやALレジスタを操作しなければ値は変わらない。で、ここでAXレジスタを読み出してみると、0x1F3Aとなる。
セグメントレジスタ
CS,DS,ES,SS
CS:今動いているプログラムのセグメント値。自動的に設定され、通常は触らないもの
DS:レジスタ・メモリ間でのやりとりの時に使われる。プログラムではなくデータのあるセグメントアドレスを管理している
ES:通常はDSレジスタの補助・予備として使用される
SS:スタックの番地を管理している