自己动手写操作系统之旅
xiaominthere
这个作者很懒,什么都没留下…
展开
-
Bochs 安装make时出错
原作网址:http://blog.csdn.net/bitowang/article/details/7473691make时报错:symbols.cc: At global scope: symbols.cc:137: error: ISO C++ forbids declaration of ‘hash_map’ with no type symbo转载 2013-11-17 20:24:00 · 2321 阅读 · 0 评论 -
汇编函数 哪些寄存器在使用时需要保护和恢复现场
在写汇编函数时,总感觉在哪些寄存器该保护哪些不需要保护的问题上比较模糊,要是保护所有使用到的寄存器感觉比较死板也不符合规则,所以就去网上搜了搜。找到了一些规则,我觉得这是一个规则问题,大家都遵守的话就可以相互复用函数了,当然这个规则也是有一定道理的。1、你自己的函数在操作改变edi esi ebx ebp esp这几个寄存器的值时,你必须先保存这几个寄存器原先的值,并在函数返回之前恢复上述这几原创 2013-12-22 16:40:32 · 5454 阅读 · 0 评论 -
undefined reference to `__stack_chk_fail'
在编译程序时klib.c中的disp_int报了该错,去网上搜了一下,在Makefile中的$(CFLAGS)后面加上-fno-stack-protector,即不需要栈保护lib/klib.o:lib/klib.c $(CC) $(CFLAGS) -fno-stack-protector -o $@ $然后编译就可以了正常执行了然后就自己验证了一下,将char ou原创 2014-01-10 15:59:17 · 9260 阅读 · 1 评论 -
我和CPU之间关于EFLAGS的对话
作者:ukyohy原作网址:http://www.pediy.com/kssd/pediy10/99569.html某日下午,偶为了学习《加密解密》正伏案研究汇编语言中涉及到的CPU EFLAGS相关内容.针对书本上的内容,整按照自己的理解写了几个测试程序,用OD调来调去,可是EFLAGS寄存器的变化和自己想的总是不一样。于是苦苦思索,百思不得其解,只好闭目养神。 不知道转载 2014-01-13 22:14:17 · 1053 阅读 · 0 评论 -
跳转指令 jmp、call、ret、retf
保存一下,方便以后查看。作者:chuanwang66原作网址:http://chuanwang66.iteye.com/blog/1075859JMP、CALL和RET指令的近转移形式只是在当前代码段中执行程序控制转移,因此不会执行特权级检查。JMP、CALL或RET指令的远转移形式会把控制转移到另外一个代码段中,因此处理器一定会执行特权级检查。 1、jmp指令:不影响堆栈转载 2014-01-13 22:11:04 · 2069 阅读 · 0 评论 -
GDT和LDT
作者:billpig原作网址:http://blog.csdn.net/billpig/article/details/5833980保护模式下的段寄存器 由 16位的选择器 与 64位的段描述符寄存器 构成段描述符寄存器: 存储段描述符选择器:存储段描述符的索引PS:原先实模式下的各个段寄存器作为保护模式下的段选择器,80486中有6个(即CS,SS,DS,ES,转载 2014-01-20 09:41:03 · 907 阅读 · 0 评论 -
硬盘概念:扇区,磁道,磁头,柱面,簇
图片来源:百度图片参考文章:文章下载1.基本概念:磁头:磁头是硬盘中对盘片进行读写工作的工具,是硬盘中最精密的部位之一。硬盘的磁头是用线圈缠绕在磁芯上制成的,最初的磁头是读写合一的,通过电流变化去感应信号的幅度。磁道:当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。这些磁道用肉眼是根本看不到的,因为它们仅是盘面上以原创 2014-02-23 15:02:04 · 27723 阅读 · 3 评论 -
宏定义中的#exp和__FILE__, __LINE__
写了一个测试程序,文件名test1.c,来测试一下 1 #include 2 #define fuc(exp) printf("%s\n",#exp); 3 int main() 4 { 5 fuc(1==1); 6 fuc("abc"); 7 fuc(abc); 8 printf("%s\n",__FILE__原创 2014-02-11 12:41:39 · 839 阅读 · 0 评论 -
rep insw的用法小记
作者:Jack204原作网址:http://www.cnblogs.com/jack204/archive/2011/09/22/2185412.html串输入指令 指令格式1: [REP] INS 目的串 , DX 指令格式2: [REP] INSB 指令格式3: [REP] INSW 功转载 2014-03-01 16:42:04 · 1524 阅读 · 0 评论 -
"undefined reference to" 问题解决方法
作者:aiwoziji13原作网址:http://blog.csdn.net/aiwoziji13/article/details/7330333遇到了这样的问题,保存以后会用到,谢谢原作者最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误:(.text+0x13): undefined reference to `func'转载 2014-03-07 22:20:51 · 1031 阅读 · 0 评论 -
suggest parentheses around arithmetic in operand of '|'
在向linux下gcc移植ucos的时候遇到如下问题:[plain] view plaincopyprint?warning: suggest parentheses around arithmetic in operand of '|' [cpp] view plaincopyprint?//GPG4 is setted as L转载 2014-04-04 11:38:37 · 7800 阅读 · 0 评论 -
80x86段式寻址的原因;8086的20位地址总线
作者:goodider原作网址:http://bbs.csdn.net/topics/3500378618086处理器引入了一个重要概念--段。(目标,想要的结果)8086处理器的寻址目标是1M大的内存空间,于是它的地址总线扩展到了20位。但是,一个问题摆在了Intel设计人员面前,(问题)虽然地址总线宽度是20位的,但是CPU中“算术逻辑运算单元(ALU)”的宽度,即数据总线却只转载 2013-12-22 13:51:37 · 6622 阅读 · 4 评论 -
地址描述符结构ARDS
作者:huybin_wang原作网址:http://blog.csdn.net/huybin_wang/article/details/2158602Address Range Descriptor Structure OffsetNameDescription0BaseAddrLow基地址的低32位4Base转载 2013-12-22 13:07:55 · 1903 阅读 · 0 评论 -
启动bochs时报错No bootable device
在做第三章的第一个代码实验时,写完代码编译,自己用bximage工具重新做了个a.img,然后pmtest1.bin写入到a.img中,启动bochs后报错No bootable device,查了半天代码,没找出来代码错误,然后就看了一下书,书中说是将第二章中的a.img拷贝过来,拷贝过来一式就好了。原因是:第二章中的代码最后有两句代码:times 510 - ($ - $$)d原创 2013-11-25 22:20:04 · 13587 阅读 · 8 评论 -
DOS系统功能调用表(INT 21H)
原作网址:http://blog.csdn.net/chinazeze/article/details/1735621作者:chinazeze保存一下。AH功能调用参数返回参数00程序终止(同INT 20H)CS=程序段前缀01键盘输入并回显A转载 2013-12-07 19:38:35 · 5027 阅读 · 0 评论 -
80386的寄存器组成
作者:luketowne原作网址:http://www.cppblog.com/luketowne/articles/87043.html 写这篇文章,完全是因为学习保护模式需要这些知识,读者完全可以走马观花,大致看看有什么内容,知道需要的时候来查这篇文章就可以了,完全没有必要抵抗着困意非要把这篇文章认真看完,记住里面每一个寄存器里每一位的定义,但是以后的文章如果需要,一定要记得回转载 2013-12-02 11:37:38 · 1531 阅读 · 0 评论 -
大小写字母转化
通过“与”和“或”操作来进行,可以将大小写转化小写->大写“与”11011111大写->小写“或”00100000比如'A':01000001'a':01100001'B':01000010'b':01100010原创 2013-12-09 22:21:23 · 793 阅读 · 0 评论 -
x86 BIOS 中断 INT 10h
在网上找了一会儿才找到,所以贴出来,也方便自己以后查看原网址:http://zh.wikipedia.org/wiki/INT_10INT 10h INT 10H 或者 INT 16 是BIOS中断调用的第10H功能的简写, 在基于x86的计算机系统中属于第17中断向量。BIOS通常在此建立了一个中断处理程序提供了实模式下的视频服务。此类服务包括设置显示模式,字符和字符串输出,和基转载 2013-12-04 14:58:19 · 3591 阅读 · 0 评论 -
调用BIOS中断显示Hello World
今天又回过头去把第一个显示“Hello,OS world”的程序看了一遍,所谓温故而知新嘛,虽然简单但是也很重要。参考资料:《一个操作系统的实现》,《Linux内核设计的艺术》(新设计团队著,也推荐一下这本书,写的是关于linux内核讲解的书,写的很好,被翻译成了繁体和英语)好的,关于下面的代码进行一下解释,虽然比较简,但是写下来,以后想不起来也可以翻出来看。1.电脑的启动:电脑加原创 2013-12-04 19:48:54 · 1727 阅读 · 10 评论 -
Linux系统调用 int 80h int 0x80
在网上找了好一会儿才找到,自己整理一下,也方便以后查看。参考网址:http://zh.wikipedia.org/wiki/%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html1.系统调用在计算机中,系统调用(英语:sy原创 2013-12-12 20:24:17 · 27882 阅读 · 5 评论 -
汇编中resb指令
转载下来,方便以后查看原作网址:http://blog.csdn.net/m1j2t3/article/details/5681657汇编中resb这样的指令是什么意思?还有我在汇编程序中看到这样一段代码,说是栈顶的StackSpaceresb2 * 1024StackTop:; 栈顶怎么理解StackTop:这个啊? 汇编中resb这样的指令是什么意思?r转载 2014-01-04 16:53:10 · 6235 阅读 · 0 评论 -
memcpy(&gdt,(void*)(*((u32*)(&gdt_ptr[2]))),*((u16*)(&gdt_ptr[0])) + 1)中参数的理解
今天看代码时,一下子没有看懂,所以记录一下解析过程。先看定义:PUBLIC u8 gdt_ptr[6];PUBLIC DESCRIPTOR gdt[GDT_SIZE];PUBLIC void* memcpy(void* pDst, void* pSrc, int iSize);然后看memcpy(&gdt,(void*)(*(原创 2014-01-04 20:33:27 · 2022 阅读 · 1 评论 -
比较详细的bochs调试指令
原网址:http://blog.csdn.net/programmingring/article/details/7408293bochs调试FAQ:1. Q:如何从引导扇区开始设置断点?A: BIOS被载入内存中运行,其引导扇区的地址一般都是在0x7c00,因为在实模式下,逻辑地址和物理地址是一一对应的,所以我们可以在启动bochs调试的命令行下输入转载 2013-12-20 22:31:11 · 997 阅读 · 0 评论 -
warning: suggest parentheses around assignment used as truth value
作者今天在写一个小程序,编译完成后就报警告:warning: suggest parentheses around assignment used as truth value在找到程序内部后发现这是对于指针操作提示的警告。例如:while (pDirent = readdir(dp)) 在上面的定义如下:DIR *dp;struct dirent *pDi转载 2014-04-04 16:42:39 · 922 阅读 · 0 评论