我的引导程序错在哪了(nasm)

我的引导程序错在哪了(nasm),第1张

如果你知道什么是引导程序的话当我没说好了。

mov cr0,eax是刚往保护模式切换的时候,你最好用小的例子先学会正确地切进保护模式再研究这者掘么长的。

调试需要系统的中断支持,你在mov cr0,eax之后系统状态变了,己经不支持实模式的中断了,所以即使仔芦是Debug.com也不能继续调试它了。这首戚核程序中在两种中断模式中切换,调试器是不能工作的。

 如何动手制作这样的引导扇区呢?这个过程十分简单, (1)首先按照要求写一个合法的引导程序(通常用汇编,机器码也可以,呵呵); (2)然后斗闷将其通过汇编程序,如NASM汇编成二进制文件; (3)最后,将这个二进制文件写入到目标盘的第一个扇区。 第一步:写代码 文件名:boot.asm 代码如下,注意,汇编中通常用“”来表示注释内容 此段代码参考《自己动手写 *** 作系统》(于渊) 初始化函数 org 07c00h 告诉编译器将此段程序加载 到内存0x0000:07C00处 mov ax, cs mov ds, ax mov es, ax call PrintStr 调用屏幕打印函数 jmp $ 无限循环 PrintStr: 屏幕打印函数 mov ax, HelloWorld 将字符串拷贝到ax mov bp, ax es:bp = 串地址 mov cx, 24 cx = 串长度 mov ax, 01301h ah = 13, al = 01h mov bx, 000ch 页号为0(bh = 0) 黑底红字(bl = 0ch,高亮) mov dl, 0 int 10h 10h号中断 ret HelloWorld: db "Welcome to Lee's OS *_*" 字符串负值 times 510-($-$$) db 0 用0x0填充剩余的空间使生成 的二进制代码刚好为512字节 dw 0xaa55 结束标志 整个程序结束!很短吧 第二步:汇编 假设你已经安装了NASM程序,那么进入命令行模式,然后输入以下命令: C:[PATH]\ nasm boot.asm -o boot.bin 其中“C:[PATH]\”为boot.asm代码文件所在位置。 现在如果不出意外的话,你已经拥有了boot.bin二进制文件,这个就是引导程序! 第三步:制作引导盘 由于不能随便更改硬盘,否则系统无法进入原来的 *** 作系统,所以我们用软盘来试验。 那么,我们准备一张软盘。 现在,我们要自己写一个程序将我们汇编得到的二进制文件写到软盘的第一个扇区。 C语言程序代码如下: /***************START***************/乎和 #include #include int main(void) { FILE *inunsigned char buffer[520]if((in = fopen("boot.bin", "rb"))==NULL) { printf("Error loading file\n")exit(0)} fread(&buffer, 512, 1, in)while(biosdisk(3, 0, 0, 0, 1, 1, buffer))fclose(in)return 0} /****************END****************/ 注意,这个程序必须同boot.bin文件在同一目录下,然后将软盘放进软驱,运行此程序。  空顷弯 第四步:GOGOGO 好了,现在你拥有了一张从头到尾完全自制的引导盘,由于有了她,你想运行你的电脑再也不需要微软插手了,而且这很可能是你第一次能在裸机上运行一个自己的程序哦,哈哈! 重新启动你的机器,记得把软盘放进去,现在你看见什么了? 一行醒目的红字: Welcome to Lee's OS *_* 打印在屏幕上!


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8183447.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存