gasと戦闘中
今、OS自作入門3日目のiplからOS本体に処理を移すところを書いているのだけれど、iplからOS本体に処理が移らない。
具体的には、iplから0xc200番地によみこまれるはずのコードへジャンプしたいのだけれど、ジャンプ先のコードが読み込まれない。
[Using as:title=http://sourceware.org/binutils/docs/as/i386_002dMemory.html#i386_002dMemory]
Absolute (as opposed to PC relative) call and jump operands must be prefixed with `*'. If no `*' is specified, as always chooses PC relative addressing for jump/call labels.
とあるので、これにならって
jmp *0xc200
としても、0xc200番地に存在するはずのコードが読み込まれない。理由は2つ考えられて、
- jmp命令について私が勘違いをしている。
- jmp先に実は何もない。IPLを書き間違えていて、jmp自体は成功しているが、その先でわけのわからない(undefined な)命令を実行している。
はたしてどっちかなぁ。前者については、アセンブルしたバイナリをみてみたところ、
0xff 0x26 0x00 0xc2
となっていて、ちゃんと該当するコードが存在したので、大丈夫そう。ってことは、やっぱり2.のiplを書き間違えている可能性が高い。時間はあるからもうちょい頑張ってみるかー。