K氏のheboOSをまねてみる

21:Re: K氏のheboOSをまねてみる
hideyosi 09/25 17:12
・・・あっれ? くそ!

ループって、こういうのじゃないのかなぁ・・・

---------------------------------------
JMP START

START:
;文字の表示
MOV AL,0x41
MOV AH,0x0e
INT 0x10



JMP START
---------------------------------------

なんか、レベルの指定の文字がまずいらしいな。ここでエラーが出ている・・・・

22:Re: K氏のheboOSをまねてみる
feel 09/25 20:43
頑張れhideyosi氏
私も自分なりに頑張るよ

---------------------------------------
JMP START

START:
;文字の表示
MOV AL,0x41
MOV AH,0x0e
INT 0x10



JMP START
---------------------------------------
nasmだとうまくいきました
(もちろん--------の部分消して)

23:Re: K氏のheboOSをまねてみる
hideyosi 09/25 21:08
feelさんドモです〜(始めまして。)

>頑張れhideyosi氏
ありがとうございます〜。がんばります。

>私も自分なりに頑張るよ
やっぱそれが一番大事ですよね。ちなみにあくまでもここはコミュニティなので、気がむいたりおもしろそうだったら、気軽〜に無責任〜に遊んでいってくださいね。

24:Re: K氏のheboOSをまねてみる
-- K 09/25 23:42
レベル指定って何のことだろうと思ったら、ラベル指定か。

でもおかしいところはなさそうに見えるんですがねえ・・・。
naskでも問題なく動きそうに思うのですが、どうしてだめなんでしょう。

25:Re: K氏のheboOSをまねてみる
hideyosi 09/26 09:11
っはっはぁ〜・・・・・
なるほど。「割り込み」ね? これか・・・

つまり、たとえば私自身はこういうプログラムだけを書いたとしても・・


       ↓
    初期化とかの処理
       ↓
       ↓
    スタート地点 ←←←←←←←←←
       ↓                 ↑
       ↓                 ↑
       ↓                 ↑
       ↓             (グルグル・・)
       ↓                 ↑
       ↓                 ↑
       ↓                 ↑
       ↓                 ↑
     スタート地点に戻れ!→→→→→


実際には、「割り込み」という機能が働いているので、実行時には
私がイヤでもこういう状態で実行されるのか。

       ↓
    初期化とかの処理
       ↓
       ↓
    スタート地点 ←←←←←←←←←
       ↓                 ↑
    キーボードが押されたらxxへ      ↑
       ↓                 ↑
    時計が1秒進んだらxxへ       (グルグル・・)
       ↓                 ↑
    牛が鳴いたらxxへ           ↑
       ↓                 ↑
       ↓                 ↑
     スタート地点に戻れ!→→→→→


で、この「xx」の部分を書き換えて、かつそこになにか命令を書いておくと、反応すると・・・・

(・・・つーことは、極論だけど、xxの部分に「なにもするな!」っていう命令を書いておくと、割り込みが効かないという状態に出来る・・・のかな???)


26:Re: K氏のheboOSをまねてみる
hideyosi 09/26 10:30
「割り込み」には、ハードウェア割り込みとソフトウェア割り込みがあると。

たとえば、キーボードが押されると、割り込みが発生する。
(つまり、私がなんにもプログラムしていなくても、INT 0x09 が実行される)

私のコレまでのプログラムでは、キーボード押してもなーんにも起きない。これは、INT 0x09 が実行されてはいるが、ジャンプした先になんにも命令が書かれていないからそのまま戻ってくる。

割り込み番号 09番が発生した時の処理って、どこにどうやって書くのかぁ・・・


27:Re: K氏のheboOSをまねてみる
feel 09/26 13:20
割り込みをさせない命令といえばCLIですね
許可させるのはSTI
で、私的割り込みの解釈
IDTにxxhはここのアドレス、yyhはここのアドレスという情報を書いておき
xxhの割り込みが発生するとそこのアドレスを参照、実行
命令はpushしてpopしてiretする(なんだかなぁ・・・)
という感じだと思っています
間違っていたらご指摘を


28:Re: K氏のheboOSをまねてみる
hideyosi 09/26 15:51
うーーーん。むずかしいなぁ・・・・
えーっと。どの割り込みが発生したのか?
これが割り込む番号。キーボードだと9番。
で、もし9番の割り込むが発生したら、xxxへジャンプしろ!と記憶してる部分が割り込みベクタテーブルか。

で、IDTってのはCPU内にある特別なレジスタ。(・・・どこにあるんだろう?)このレジスタに、どこに割り込みベクタテーブルがあるのかを設定するわけか。なになに?LIDT命令??



29:Re: K氏のheboOSをまねてみる
hideyosi 09/26 16:02
あーれ? おっかしいなぁ。
NASKでとりあえずいい加減なところに
LIDT 0x100
とか書いてコンパイルだけしてみたんだけど、センタックスエラーだ。こんな命令はない?それとも指定が違うのかな?

30:Re: K氏のheboOSをまねてみる
feel 09/26 17:23
LIDTは
リミット値と先頭アドレスを指定したと思います
例えば

lidt[idtr]

idtr dw 0;リミット
dw 0;先頭アドレス

こんな感じではないでしょうか
自信あまりないですが

1-

BluesBB ©Sting_Band