在这里我们用汇编实现了一个打印字符的函数,并在c语言中调用这个函数。
需要注意的是,我们在实现函数是遵循cdecl约定
(1)调用者将所有参数从右向左入栈。
(2)被调用者清理参数所占的栈空间。
#include "print.h"
int main(){put_char('6');put_str("6666");put_int(8);while(1);
}
不错成功
sh
将用到的命令整合一下成一个sh文件
#!/bin/bash
if [ ! -d "./out" ]; thenmkdir out
fi
if [ -e "hd3M.img" ]; thenrm -rf hd3M.img
fi
if [ ! -d "./out/boot" ];then mkdir out/boot
fi
if [ ! -d "./out/kernel" ];then mkdir out/kernel
fi
nasm -I ./include/ -o ./out/boot/mbr.bin ./mbr3-1.S && dd if=./out/boot/mbr.bin of=../c.img bs=512 count=1 conv=notrunc
nasm -I ./include/ -o ./out/boot/loader.bin ./loader.S && dd if=./out/boot/loader.bin of=../c.img bs=512 count=4 seek=2 conv=notrunc
nasm -f elf -o out/kernel/print.o lib/kernel/print.S
gcc -m32 -I lib/kernel -c -o out/kernel/main.o kernel/main.c
ld -m elf_i386 -Ttext 0xc0001500 -e main -o ./out/kernel/kernel.bin out/kernel/main.o out/kernel/print.o && \dd if=./out/kernel/kernel.bin of=../c.img bs=512 count=200 seek=9 conv=notrunc