diff --git a/related_info/lab1/toybootloader/Makefile b/related_info/lab1/toybootloader/Makefile new file mode 100644 index 0000000..13d9832 --- /dev/null +++ b/related_info/lab1/toybootloader/Makefile @@ -0,0 +1,9 @@ +all:toy +toy.o: toy.S + as -o toy.o toy.S +toy: toy.o + ld --oformat binary -N -e start -Ttext 0x7c00 -o toy toy.o +run: toy + qemu-system-i386 -fda toy +clean: + rm toy.o toy diff --git a/related_info/lab1/toybootloader/toy.S b/related_info/lab1/toybootloader/toy.S new file mode 100644 index 0000000..e40adcb --- /dev/null +++ b/related_info/lab1/toybootloader/toy.S @@ -0,0 +1,30 @@ +.text +.globl start /* 程序从start处开始运行 */ +.code16 +start: + jmpl $0x0, $code +msg: + .string "Hello world!" +code: + mov %cs,%ax + mov %ax,%ds + mov %ax,%es + mov %ax,%ss + mov $0x400,%sp + call dispstr /* call dispstr函数显示字符串 */ + +loop0: /* 无限循环 */ + jmp loop0 + +dispstr: + mov $msg ,%ax + mov %ax ,%bp /* es:bp = 串地址 */ + mov $12 ,%cx /* cs = 串长度 */ + mov $0x1301 ,%ax /* ah=0x13:显示字符串 ,al=0x1:显示输出方式 */ + mov $0x000c ,%bx /* bh=0 :第0页, bl=0xc :高亮 黑底红字 */ + mov $0 ,%dl /* 在0行0列显示*/ + int $0x10 /* 调用BIOS提供的int服务0x10的0x13功能:显示字符串 */ + ret + +.org 0x1fe, 0x90 +.word 0xaa55 diff --git a/related_info/lab1/toybootloader/toy.md b/related_info/lab1/toybootloader/toy.md new file mode 100644 index 0000000..0955305 --- /dev/null +++ b/related_info/lab1/toybootloader/toy.md @@ -0,0 +1,8 @@ +From http://blog.csdn.net/guocaigao/article/details/8476086 + +A toy bootloader can display string in real mode of x86. + +Try +``` +make run +```