K氏のheboOSをまねてみる

45:Re: INT 0x09 の乗っ取り
hideyosi 09/30 06:58
おさらい。

--------------------------
;BIOSのキー入力を乗っ取る
MOV AX,0
MOV ES,AX ; ESを0にする。
MOV WORD[ES:0x09*4+0],IINT09
MOV WORD[ES:0x09*4+2],CS
MOV AX,DS
MOV ES,AX ; ESをもとにもどす。
-------------------------------

MOV AX,0
これはまあ解る。AXレジスタ(16ビット)に、0を代入。AXレジスタは、0x0000という状態になる。

MOV ES,AX ; ESを0にする。
???なんでこんなことするの?ESに直接0を代入できないの?
実験してみたら、できなかった。ESレジスタには、直接数字を代入することはできないようだ。だから、ESレジスタに値をセットしたい場合は、AXなどの汎用レジスタに一度代入して、レジスタ間で値をコピーしなくてはいけないようだ。

ESレジスタって、なにするレジスタ? DSレジスタ(データがあるセグメントを管理)の予備的なレジスタ??


MOV WORD[ES:0x09*4+0],IINT09
うーん。ここいらへんがわからんなぁ・・・なになに?「WORD」は、2バイトをあらわす符号!?
ここの処理を分解して考えてみる。つまり、
WORD[ES:0x09*4+0]というところに、IINT09(ラベル。多分実態はメモリアドレス)を代入している。
ここは、そもそもはINT09の割り込みがあった場合のジャンプ先のアドレスを書き換えるための処理。で、+0だから、ここは「オフセット値」が入るはず。

うむむむ!??? (くわーーー!むず〜!!)



1-

BluesBB ©Sting_Band