私はx86リアルモードプログラミングを学んでおり、QEMUを使って小さなブートローダをテストしてテストしています。私は学習のためにGNUアセンブラを選択しました。ここでInt 10HがQEMUで動作しません
は、アセンブリコードです:
#
# boot.s
#
.section .text
.globl start
start:
//setup stack
mov $0x7c0, %ax
mov %ax, %ss
mov $512, %sp
//setup video
mov $0x0, %eax
mov $0x0, %al
int $0x10
//print a character say 'm'
mov $'m', %al
mov $0x0E, %ah
int $0x10
1:
jmp 1b
次のテキストがQEMUディスプレイに表示されます:ハードディスクからのブート
...
が問題:上記のメッセージが印刷され、それはnothiのように表示されますng。
私は組み立てに使用するスクリプト、リンクは次のとおりです。
> to assemble : gcc -c boot.s
> to link : ld -T link.ld boot.o -o b.bin
> to put on bootsector of Hard-disk image
dd if=b.bin of=HD.img conv=notrunc
> to attach boot magic
echo -ne "\x55\xaa" | dd seek=510 bs=1 of=HD.img
> to emulate: qemu-system-i386 HD.img
私は1つを自分で作成する方法を知りませんでしたから、私はどこかで見たオンラインチュートリアルからコピーされたリンカスクリプト:
OUTPUT_FORMAT("binary")
ENTRY(start)
phys = 0x00100000;
SECTIONS
{
.text phys : AT(phys) {
code = .;
*(.text)
*(.rodata)
. = ALIGN(4096);
}
.data : AT(phys + (data - code))
{
data = .;
*(.data)
. = ALIGN(4096);
}
.bss : AT(phys + (bss - code))
{
bss = .;
*(.bss)
. = ALIGN(4096);
}
end = .;
}
追加の引数を指定する必要がありますか、コードに間違いがありますか?私はそれがスタックの設定だと思ったが、多くの可能性を試したが、うまくいかなかった。
ハードディスクのブートメッセージが表示され、ブートローダに文字「m
」が表示されるようにするにはどうすればよいですか?
私の作業プラットフォームは、あなたのリンカスクリプトがプロテクトモードカーネルが0x00100000にロードされるだろう、環境のために書かれたと思われるのFedora 23
「機能しない」とはどういう意味ですか?それは意味のある問題の説明ではありません。 –