コードやオペレーティングシステムの実際の動作を知るためにアセンブリを教え始めました。私がこれを理解しているように、は、プロセッサに、ラベルfoo
を含む行に行くように指示します。しかし、(それは本当にそれを呼び出すことができるならば!)最も基本的なOSは、私はこのコードを理解するように、プロセッサは、1行目を見て、それがfoo
であることを覚えてアセンブリでjmpsはどのように動作しますか? (OS開発)
foo: ; label foo
jmp foo ; Go to foo
times 512-($-$$) db 0 ; Fill remaining bytes with 0's
...このようになります。その後、2行目に進み、foo
に行くように指示します。繰り返し、3行目に到達して空のスペースを埋めるようにしてはいけません。
なぜこれは無限ループではありませんか?これは、コンパイル時にVirtualBox上でかなりうまく動作します(ここで適切な単語を使用していますか?).isoファイルに格納されます。
「jmp」は単に「ここからフェッチ命令Xバイトをフェッチする」です。それは、あなたが言ったことのようなものですが、もちろん行ではないということになります。行の点では "ここからX行にジャンプ"し、 "jmp foo"は "ここからジャンプする"となります。もちろんこれはちょうど類推です。 –
@MargaretBloom右ですが、3行目はどのように実行されましたか? – seadoggie01
** **は無限ループであり、3行目は命令ではありません。セクタの残りの部分をゼロで埋めるためのアセンブラ命令です。アセンブリ時にアセンブラによって「実行」されます。 – Jester